X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShard.java;h=a5abd2fc69059f4af377ab85ac161372de15cbed;hb=8177f76b3e8bd802cc8e7a05ba3f192f219ab0ee;hp=0672023fcbfe0e207036006d85ca9d1509a94a38;hpb=7435f945b84ace0a7e92093a425696ae8bf0da32;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index 0672023fcb..a5abd2fc69 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -63,6 +63,7 @@ import org.opendaylight.controller.cluster.datastore.modification.MutableComposi import org.opendaylight.controller.cluster.datastore.utils.Dispatchers; import org.opendaylight.controller.cluster.datastore.utils.MessageTracker; import org.opendaylight.controller.cluster.datastore.utils.SerializationUtils; +import org.opendaylight.controller.cluster.notifications.RegisterRoleChangeListener; import org.opendaylight.controller.cluster.notifications.RoleChangeNotifier; import org.opendaylight.controller.cluster.raft.RaftActor; import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry; @@ -113,9 +114,9 @@ public class Shard extends RaftActor { private final List delayedListenerRegistrations = Lists.newArrayList(); - private final DatastoreContext datastoreContext; + private DatastoreContext datastoreContext; - private final DataPersistenceProvider dataPersistenceProvider; + private DataPersistenceProvider dataPersistenceProvider; private SchemaContext schemaContext; @@ -123,7 +124,7 @@ public class Shard extends RaftActor { private final ShardCommitCoordinator commitCoordinator; - private final long transactionCommitTimeout; + private long transactionCommitTimeout; private Cancellable txCommitTimeoutCheckSchedule; @@ -175,8 +176,7 @@ public class Shard extends RaftActor { commitCoordinator = new ShardCommitCoordinator(TimeUnit.SECONDS.convert(1, TimeUnit.MINUTES), datastoreContext.getShardTransactionCommitQueueCapacity(), LOG, name.toString()); - transactionCommitTimeout = TimeUnit.MILLISECONDS.convert( - datastoreContext.getShardTransactionCommitTimeoutInSeconds(), TimeUnit.SECONDS); + setTransactionCommitTimeout(); // create a notifier actor for each cluster member roleChangeNotifier = createRoleChangeNotifier(name.toString()); @@ -185,6 +185,11 @@ public class Shard extends RaftActor { getRaftActorContext().getConfigParams().getIsolatedCheckIntervalInMillis()); } + private void setTransactionCommitTimeout() { + transactionCommitTimeout = TimeUnit.MILLISECONDS.convert( + datastoreContext.getShardTransactionCommitTimeoutInSeconds(), TimeUnit.SECONDS); + } + private static Map mapPeerAddresses( final Map peerAddresses) { Map map = new HashMap<>(); @@ -211,16 +216,20 @@ public class Shard extends RaftActor { private Optional createRoleChangeNotifier(String shardId) { ActorRef shardRoleChangeNotifier = this.getContext().actorOf( RoleChangeNotifier.getProps(shardId), shardId + "-notifier"); - return Optional.of(shardRoleChangeNotifier); + return Optional.of(shardRoleChangeNotifier); } @Override public void postStop() { + LOG.info("Stopping Shard {}", persistenceId()); + super.postStop(); if(txCommitTimeoutCheckSchedule != null) { txCommitTimeoutCheckSchedule.cancel(); } + + shardMBean.unregisterMBean(); } @Override @@ -278,6 +287,10 @@ public class Shard extends RaftActor { resolved.getPeerAddress()); } else if (message.equals(TX_COMMIT_TIMEOUT_CHECK_MESSAGE)) { handleTransactionCommitTimeoutCheck(); + } else if(message instanceof DatastoreContext) { + onDatastoreContext((DatastoreContext)message); + } else if(message instanceof RegisterRoleChangeListener){ + roleChangeNotifier.get().forward(message, context()); } else { super.onReceiveCommand(message); } @@ -291,6 +304,24 @@ public class Shard extends RaftActor { return roleChangeNotifier; } + private void onDatastoreContext(DatastoreContext context) { + datastoreContext = context; + + commitCoordinator.setQueueCapacity(datastoreContext.getShardTransactionCommitQueueCapacity()); + + setTransactionCommitTimeout(); + + if(datastoreContext.isPersistent() && + dataPersistenceProvider instanceof NonPersistentRaftDataProvider) { + dataPersistenceProvider = new PersistentDataProvider(); + } else if(!datastoreContext.isPersistent() && + dataPersistenceProvider instanceof PersistentDataProvider) { + dataPersistenceProvider = new NonPersistentRaftDataProvider(); + } + + updateConfigParams(datastoreContext.getShardRaftConfig()); + } + private void handleTransactionCommitTimeoutCheck() { CohortEntry cohortEntry = commitCoordinator.getCurrentCohortEntry(); if(cohortEntry != null) {