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%2Fadmin%2FClusterAdminRpcService.java;h=007b34755865fcf9bb5e151314f6dbca3a254893;hb=87c8362c7501408b281f5ddc9b78ed7440280fa1;hp=ba842961408ce84745f8f59a866098b378deede0;hpb=769ef0f950f2ed6cfc14d274e6a8edc583a36a96;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java index ba84296140..007b347558 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java @@ -34,6 +34,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ConvertMembersToNonvotingForAllShardsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ConvertMembersToVotingForAllShardsInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveShardReplicaInput; import org.opendaylight.yangtools.yang.common.RpcError.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -78,13 +79,18 @@ public class ClusterAdminRpcService implements ClusterAdminService, AutoCloseabl return newFailedRpcResultBuilder("A valid shard name must be specified").buildFuture(); } + DataStoreType dataStoreType = input.getDataStoreType(); + if(dataStoreType == null) { + return newFailedRpcResultBuilder("A valid DataStoreType must be specified").buildFuture(); + } + LOG.info("Adding replica for shard {}", shardName); final SettableFuture> returnFuture = SettableFuture.create(); - ListenableFuture> future = sendMessageToShardManagers(new AddShardReplica(shardName)); - Futures.addCallback(future, new FutureCallback>() { + ListenableFuture future = sendMessageToShardManager(dataStoreType, new AddShardReplica(shardName)); + Futures.addCallback(future, new FutureCallback() { @Override - public void onSuccess(List snapshots) { + public void onSuccess(Success success) { LOG.info("Successfully added replica for shard {}", shardName); returnFuture.set(newSuccessfulResult()); } @@ -169,6 +175,12 @@ public class ClusterAdminRpcService implements ClusterAdminService, AutoCloseabl return Futures.allAsList(configFuture, operFuture); } + private ListenableFuture sendMessageToShardManager(DataStoreType dataStoreType, Object message) { + ActorRef shardManager = dataStoreType == DataStoreType.Config ? + configDataStore.getActorContext().getShardManager() : operDataStore.getActorContext().getShardManager(); + return ask(shardManager, message, new Timeout(1, TimeUnit.MINUTES)); + } + private static void saveSnapshotsToFile(DatastoreSnapshotList snapshots, String fileName, SettableFuture> returnFuture) { try(FileOutputStream fos = new FileOutputStream(fileName)) {