BUG 3156 : Recreating CDS should not fail 81/20181/3
authorMoiz Raja <moraja@cisco.com>
Thu, 7 May 2015 01:43:31 +0000 (18:43 -0700)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 13 May 2015 04:01:01 +0000 (04:01 +0000)
commitdb0dbb7e7976efc860012dfdba61d5416d45900c
tree9613f8b624c845dbc9828ca06667647c1c9a4796
parente40d6fff44efc7eac7f5e00cb9db4f08f33a8df0
BUG 3156 : Recreating CDS should not fail

When CDS is recreated it can fail because we try to
create actors on a datastore that is already terminated.

To address this issue I have enhanced DistributedDataStoreFactory
as follows,

- Simplified the actor system creation code by synchronizing
  all static methods. Since these methods are anyway not used in
  any fast paths - it is a fair enough solution.
- Added another static field in DistributedDataStoreFactory to
  track the createdInstances. This is so that we can properly
  cleanup the actor system as instances of the data store are destroyed.
- The actor system is now shutdown when there are no datastrore instances.
- Removed actor system shutdown from ActorContext to ensure that we
  use the symmetric method destroyInstance

Now that we do not shutdown actor system till both the data stores
are destroyed it may so happen that we may have a situation where we are
trying to create an actor on the old actor system with an already used name
like shardmnanager-config or shardmanager-operational. To avoid this
I have added a loop when creating shardmanager which catches the thrown
exception and retries 100 times after waiting for 100 milliseconds. This
is to give some time for the actor to properly die.

Change-Id: I3c8b2b3b21a1519610bf2ed5e1af8be93f3120ce
Signed-off-by: Moiz Raja <moraja@cisco.com>
(cherry picked from commit 35f8cf2335afa8cf87ce565bbb974431ad5008a6)
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStore.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/ActorContext.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/concurrent_data_broker/DomConcurrentDataBrokerModule.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedConfigDataStoreProviderModule.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedOperationalDataStoreProviderModule.java
opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/config/yang/config/remote_rpc_connector/RemoteRPCBrokerModule.java