BUG-8205: use updated DatastoreContext 56/54956/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 12 Apr 2017 10:15:30 +0000 (12:15 +0200)
committerTom Pantelis <tompantelis@gmail.com>
Fri, 14 Apr 2017 18:02:22 +0000 (18:02 +0000)
DatastoreContext is updated by the config admin overlay, which means
we cannot refer to the initial one passed in when we are deciding
which data store to instantiate.

This fixes up the protocol propagation and adds and initial info about
which protocol is in use.

Change-Id: I3c2f1a5eec1c7346fff3aca2d85609f47990723a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit e325f9ec2d3fc6b059823d88658596be544a1828)

opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java

index e5b6f695474487782ee31887ce9ffba0ca53afe7..b62cd3d6d35826152bd38fa066f7eb1010786a0b 100644 (file)
@@ -22,30 +22,34 @@ public class DistributedDataStoreFactory {
     private static final Logger LOG = LoggerFactory.getLogger(DistributedDataStoreFactory.class);
 
     public static AbstractDataStore createInstance(final SchemaService schemaService,
-            final DatastoreContext datastoreContext, final DatastoreSnapshotRestore datastoreSnapshotRestore,
+            final DatastoreContext initialDatastoreContext, final DatastoreSnapshotRestore datastoreSnapshotRestore,
             final ActorSystemProvider actorSystemProvider, final BundleContext bundleContext) {
 
-        LOG.info("Create data store instance of type : {}", datastoreContext.getDataStoreName());
+        final String datastoreName = initialDatastoreContext.getDataStoreName();
+        LOG.info("Create data store instance of type : {}", datastoreName);
 
-        ActorSystem actorSystem = actorSystemProvider.getActorSystem();
-        DatastoreSnapshot restoreFromSnapshot = datastoreSnapshotRestore.getAndRemove(
-                datastoreContext.getDataStoreName());
-        DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(datastoreContext);
-        DatastoreContextConfigAdminOverlay overlay = new DatastoreContextConfigAdminOverlay(
+        final ActorSystem actorSystem = actorSystemProvider.getActorSystem();
+        final DatastoreSnapshot restoreFromSnapshot = datastoreSnapshotRestore.getAndRemove(datastoreName);
+        final DatastoreContextIntrospector introspector = new DatastoreContextIntrospector(initialDatastoreContext);
+        final DatastoreContextConfigAdminOverlay overlay = new DatastoreContextConfigAdminOverlay(
                 introspector, bundleContext);
 
-        Configuration config = new ConfigurationImpl("module-shards.conf", "modules.conf");
-        ClusterWrapper clusterWrapper = new ClusterWrapperImpl(actorSystem);
-        DatastoreContextFactory contextFactory = introspector.newContextFactory();
+        final Configuration config = new ConfigurationImpl("module-shards.conf", "modules.conf");
+        final ClusterWrapper clusterWrapper = new ClusterWrapperImpl(actorSystem);
+        final DatastoreContextFactory contextFactory = introspector.newContextFactory();
+
+        // This is the potentially-updated datastore context, distinct from the initial one
+        final DatastoreContext datastoreContext = contextFactory.getBaseDatastoreContext();
 
         final AbstractDataStore dataStore;
         if (datastoreContext.isUseTellBasedProtocol()) {
             dataStore = new ClientBackedDataStore(actorSystem, clusterWrapper, config, contextFactory,
                 restoreFromSnapshot);
-            LOG.info("Data store {} is using tell-based protocol", datastoreContext.getDataStoreName());
+            LOG.info("Data store {} is using tell-based protocol", datastoreName);
         } else {
             dataStore = new DistributedDataStore(actorSystem, clusterWrapper, config, contextFactory,
                 restoreFromSnapshot);
+            LOG.info("Data store {} is using ask-based protocol", datastoreName);
         }
 
         overlay.setListener(dataStore);