From: Tom Pantelis Date: Sat, 5 Mar 2016 12:25:59 +0000 (-0500) Subject: Add blueprint wiring to sal-distributed-datastore X-Git-Tag: release/boron~234 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=e332f9d44cad4d8592475ad409ed06595f0bbb15;hp=33767a11f3aec774ec2ac8c13cc18b0ff0da9c10 Add blueprint wiring to sal-distributed-datastore ALso changed the default in the config yang for shard-election-timeout-factor as it was changed in the config XML which will no longer be used. Change-Id: I2439587210c347dc1ac7e3e8ac5e9671fa86cf02 Signed-off-by: Tom Pantelis --- diff --git a/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java b/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java index c24c8dc068..40e1bd35fc 100644 --- a/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java +++ b/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/md/sal/common/util/jmx/AbstractMXBean.java @@ -69,6 +69,14 @@ public abstract class AbstractMXBean { return new ObjectName(builder.toString()); } + /** + * This method is a wrapper for registerMBean with void return type so it can be invoked by dependency + * injection frameworks such as Spring and Blueprint. + */ + public void register() { + registerMBean(); + } + /** * Registers this bean with the platform MBean server with the domain defined by * {@link #BASE_JMX_PREFIX}. @@ -107,6 +115,14 @@ public abstract class AbstractMXBean { return registered; } + /** + * This method is a wrapper for unregisterMBean with void return type so it can be invoked by dependency + * injection frameworks such as Spring and Blueprint. + */ + public void unregister() { + unregisterMBean(); + } + /** * Unregisters this bean with the platform MBean server. * diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConcurrentDOMDataBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConcurrentDOMDataBroker.java index 582f25859b..84cdccca63 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConcurrentDOMDataBroker.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConcurrentDOMDataBroker.java @@ -47,7 +47,7 @@ public class ConcurrentDOMDataBroker extends AbstractDOMBroker { private static final String PRE_COMMIT = "PRE_COMMIT"; private static final String COMMIT = "COMMIT"; - private final DurationStatisticsTracker commitStatsTracker = DurationStatisticsTracker.createConcurrent(); + private final DurationStatisticsTracker commitStatsTracker; /** * This executor is used to execute Future listener callback Runnables async. @@ -55,8 +55,14 @@ public class ConcurrentDOMDataBroker extends AbstractDOMBroker { private final Executor clientFutureCallbackExecutor; public ConcurrentDOMDataBroker(final Map datastores, Executor listenableFutureExecutor) { + this(datastores, listenableFutureExecutor, DurationStatisticsTracker.createConcurrent()); + } + + public ConcurrentDOMDataBroker(final Map datastores, Executor listenableFutureExecutor, + DurationStatisticsTracker commitStatsTracker) { super(datastores); this.clientFutureCallbackExecutor = Preconditions.checkNotNull(listenableFutureExecutor); + this.commitStatsTracker = Preconditions.checkNotNull(commitStatsTracker); } public DurationStatisticsTracker getCommitStatsTracker() { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java index 211465a35b..484a400a57 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorSystem; +import org.opendaylight.controller.cluster.ActorSystemProvider; import org.opendaylight.controller.cluster.datastore.config.Configuration; import org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl; import org.opendaylight.controller.cluster.datastore.messages.DatastoreSnapshot; @@ -20,11 +21,14 @@ public class DistributedDataStoreFactory { private static final Logger LOG = LoggerFactory.getLogger(DistributedDataStoreFactory.class); public static DistributedDataStore createInstance(SchemaService schemaService, - DatastoreContext datastoreContext, DatastoreSnapshot restoreFromSnapshot, ActorSystem actorSystem, - BundleContext bundleContext) { + DatastoreContext datastoreContext, DatastoreSnapshotRestore datastoreSnapshotRestore, + ActorSystemProvider actorSystemProvider, BundleContext bundleContext) { LOG.info("Create data store instance of type : {}", datastoreContext.getDataStoreName()); + ActorSystem actorSystem = actorSystemProvider.getActorSystem(); + DatastoreSnapshot restoreFromSnapshot = datastoreSnapshotRestore.getAndRemove( + datastoreContext.getDataStoreName()); DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(datastoreContext); DatastoreContextConfigAdminOverlay overlay = new DatastoreContextConfigAdminOverlay( introspector, bundleContext); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedConfigDataStoreProviderModule.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedConfigDataStoreProviderModule.java index 4d20b6f4f4..daa4c14cb2 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedConfigDataStoreProviderModule.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedConfigDataStoreProviderModule.java @@ -44,12 +44,24 @@ public class DistributedConfigDataStoreProviderModule extends @Override public java.lang.AutoCloseable createInstance() { - ConfigProperties props = getConfigProperties(); + DatastoreContext datastoreContext = newDatastoreContext(getConfigProperties()); + + return DistributedDataStoreFactory.createInstance(getConfigSchemaServiceDependency(), + datastoreContext, DatastoreSnapshotRestore.instance(), + getConfigActorSystemProviderDependency(), bundleContext); + } + + public static DatastoreContext newDatastoreContext() { + return newDatastoreContext(null); + } + + private static DatastoreContext newDatastoreContext(ConfigProperties inProps) { + ConfigProperties props = inProps; if(props == null) { props = new ConfigProperties(); } - DatastoreContext datastoreContext = DatastoreContext.newBuilder() + return DatastoreContext.newBuilder() .logicalStoreType(LogicalDatastoreType.CONFIGURATION) .maxShardDataChangeExecutorPoolSize(props.getMaxShardDataChangeExecutorPoolSize().getValue().intValue()) .maxShardDataChangeExecutorQueueSize(props.getMaxShardDataChangeExecutorQueueSize().getValue().intValue()) @@ -80,10 +92,6 @@ public class DistributedConfigDataStoreProviderModule extends .customRaftPolicyImplementation(props.getCustomRaftPolicyImplementation()) .shardSnapshotChunkSize(props.getShardSnapshotChunkSize().getValue().intValue()) .build(); - - return DistributedDataStoreFactory.createInstance(getConfigSchemaServiceDependency(), - datastoreContext, DatastoreSnapshotRestore.instance().getAndRemove(datastoreContext.getDataStoreName()), - getConfigActorSystemProviderDependency().getActorSystem(), bundleContext); } public void setBundleContext(BundleContext bundleContext) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedOperationalDataStoreProviderModule.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedOperationalDataStoreProviderModule.java index bae52c563e..9bb6b82eee 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedOperationalDataStoreProviderModule.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedOperationalDataStoreProviderModule.java @@ -44,13 +44,24 @@ public class DistributedOperationalDataStoreProviderModule extends @Override public java.lang.AutoCloseable createInstance() { + DatastoreContext datastoreContext = newDatastoreContext(getOperationalProperties()); - OperationalProperties props = getOperationalProperties(); + return DistributedDataStoreFactory.createInstance(getOperationalSchemaServiceDependency(), + datastoreContext, DatastoreSnapshotRestore.instance(), + getOperationalActorSystemProviderDependency(), bundleContext); + } + + public static DatastoreContext newDatastoreContext() { + return newDatastoreContext(null); + } + + private static DatastoreContext newDatastoreContext(OperationalProperties inProps) { + OperationalProperties props = inProps; if(props == null) { props = new OperationalProperties(); } - DatastoreContext datastoreContext = DatastoreContext.newBuilder() + return DatastoreContext.newBuilder() .logicalStoreType(LogicalDatastoreType.OPERATIONAL) .maxShardDataChangeExecutorPoolSize(props.getMaxShardDataChangeExecutorPoolSize().getValue().intValue()) .maxShardDataChangeExecutorQueueSize(props.getMaxShardDataChangeExecutorQueueSize().getValue().intValue()) @@ -81,10 +92,6 @@ public class DistributedOperationalDataStoreProviderModule extends .customRaftPolicyImplementation(props.getCustomRaftPolicyImplementation()) .shardSnapshotChunkSize(props.getShardSnapshotChunkSize().getValue().intValue()) .build(); - - return DistributedDataStoreFactory.createInstance(getOperationalSchemaServiceDependency(), - datastoreContext, DatastoreSnapshotRestore.instance().getAndRemove(datastoreContext.getDataStoreName()), - getOperationalActorSystemProviderDependency().getActorSystem(), bundleContext); } public void setBundleContext(BundleContext bundleContext) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml b/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml new file mode 100644 index 0000000000..ac0f02ffcc --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-datastore-provider.yang b/opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-datastore-provider.yang index 8ae1ec9d00..d40a3aafad 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-datastore-provider.yang +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-datastore-provider.yang @@ -112,7 +112,7 @@ module distributed-datastore-provider { } leaf shard-election-timeout-factor { - default 2; + default 20; type non-zero-uint32-type; description "The multiplication factor to be used to determine shard election timeout. The shard election timeout is determined by multiplying shard-heartbeat-interval-in-millis with the shard-election-timeout-factor";