From: Vishal Thapar Date: Fri, 19 Aug 2016 10:00:43 +0000 (+0530) Subject: Configurable update-strategy for clusteredAppConfig X-Git-Tag: release/carbon~450 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=cab1d5845cb951fe31a3243653ed567583dc73c1;hp=c9943f5bc72d4cde9356d3bd4cf73d36f4b2f754 Configurable update-strategy for clusteredAppConfig Any change to application's config data results in restart of the blueprint container. This change adds an attribute that allows different applications to disable this restart. Attribute added: update-strategy Values: reload, none. Default: reload Change-Id: Ie0c7501f8b5c84970a46ca8f02d7f77caf913a0a Signed-off-by: Vishal Thapar --- diff --git a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java index c83e4e8312..73614971f3 100644 --- a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java +++ b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java @@ -93,6 +93,7 @@ public class DataStoreAppConfigMetadata extends AbstractDependentComponentFactor private final String defaultAppConfigFileName; private final String appConfigBindingClassName; private final String appConfigListKeyValue; + private final UpdateStrategy appConfigUpdateStrategy; private final AtomicBoolean readingInitialAppConfig = new AtomicBoolean(true); private volatile BindingContext bindingContext; @@ -106,12 +107,13 @@ public class DataStoreAppConfigMetadata extends AbstractDependentComponentFactor public DataStoreAppConfigMetadata(@Nonnull String id, @Nonnull String appConfigBindingClassName, @Nullable String appConfigListKeyValue, @Nullable String defaultAppConfigFileName, - @Nullable Element defaultAppConfigElement) { + @Nonnull UpdateStrategy updateStrategyValue, @Nullable Element defaultAppConfigElement) { super(id); this.defaultAppConfigElement = defaultAppConfigElement; this.defaultAppConfigFileName = defaultAppConfigFileName; this.appConfigBindingClassName = appConfigBindingClassName; this.appConfigListKeyValue = appConfigListKeyValue; + this.appConfigUpdateStrategy = updateStrategyValue; } @Override @@ -250,14 +252,18 @@ public class DataStoreAppConfigMetadata extends AbstractDependentComponentFactor if(!setInitialAppConfig(Optional.of(newAppConfig)) && !Objects.equals(currentAppConfig, newAppConfig)) { - LOG.debug("App config was updated - scheduling container for restart"); + LOG.debug("App config was updated"); - restartContainer(); + if(appConfigUpdateStrategy == UpdateStrategy.RELOAD) { + restartContainer(); + } } } else if(type == ModificationType.DELETE) { - LOG.debug("App config was deleted - scheduling container for restart"); + LOG.debug("App config was deleted"); - restartContainer(); + if(appConfigUpdateStrategy == UpdateStrategy.RELOAD) { + restartContainer(); + } } } } diff --git a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/OpendaylightNamespaceHandler.java b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/OpendaylightNamespaceHandler.java index e6ddd48234..47b2c2b238 100644 --- a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/OpendaylightNamespaceHandler.java +++ b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/OpendaylightNamespaceHandler.java @@ -54,6 +54,7 @@ public class OpendaylightNamespaceHandler implements NamespaceHandler { static final String RPC_REGISTRY_NAME = "org.opendaylight.blueprint.RpcRegistry"; static final String NOTIFICATION_SERVICE_NAME = "org.opendaylight.blueprint.NotificationService"; static final String TYPE_ATTR = "type"; + static final String UPDATE_STRATEGY_ATTR = "update-strategy"; private static final Logger LOG = LoggerFactory.getLogger(OpendaylightNamespaceHandler.class); private static final String COMPONENT_PROCESSOR_NAME = ComponentProcessor.class.getName(); @@ -350,7 +351,20 @@ public class OpendaylightNamespaceHandler implements NamespaceHandler { return new DataStoreAppConfigMetadata(getId(context, element), element.getAttribute( DataStoreAppConfigMetadata.BINDING_CLASS), element.getAttribute( DataStoreAppConfigMetadata.LIST_KEY_VALUE), element.getAttribute( - DataStoreAppConfigMetadata.DEFAULT_CONFIG_FILE_NAME), defaultAppConfigElement); + DataStoreAppConfigMetadata.DEFAULT_CONFIG_FILE_NAME), parseUpdateStrategy( + element.getAttribute(UPDATE_STRATEGY_ATTR)), defaultAppConfigElement); + } + + private UpdateStrategy parseUpdateStrategy(String updateStrategyValue) { + if (Strings.isNullOrEmpty(updateStrategyValue) || + updateStrategyValue.equalsIgnoreCase(UpdateStrategy.RELOAD.name())) { + return UpdateStrategy.RELOAD; + } else if(updateStrategyValue.equalsIgnoreCase(UpdateStrategy.NONE.name())){ + return UpdateStrategy.NONE; + } else { + LOG.warn("update-strategy {} not supported, using reload", updateStrategyValue); + return UpdateStrategy.RELOAD; + } } private Metadata parseSpecificReferenceList(Element element, ParserContext context) { diff --git a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/UpdateStrategy.java b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/UpdateStrategy.java new file mode 100644 index 0000000000..1b5d128005 --- /dev/null +++ b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/UpdateStrategy.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.blueprint.ext; + +/** + * Enumerates possible strategies when a component is updated + * + * @author Vishal Thapar + */ +public enum UpdateStrategy { + /* + * Restart container + */ + RELOAD, + /* + * Don't do anything + */ + NONE +} diff --git a/opendaylight/blueprint/src/main/resources/opendaylight-blueprint-ext-1.0.0.xsd b/opendaylight/blueprint/src/main/resources/opendaylight-blueprint-ext-1.0.0.xsd index c451e48995..3c0e2274fe 100644 --- a/opendaylight/blueprint/src/main/resources/opendaylight-blueprint-ext-1.0.0.xsd +++ b/opendaylight/blueprint/src/main/resources/opendaylight-blueprint-ext-1.0.0.xsd @@ -41,9 +41,15 @@ + - + + + + + +