From 02b74456a89b728e2c32ade1523b509b0ff74f4d Mon Sep 17 00:00:00 2001 From: Oleksandr Zharov Date: Thu, 28 Sep 2023 17:51:09 +0200 Subject: [PATCH] Do not use RpcService in sal-cluster-admin-impl Migrated usage of RpcService to Rpc for sal-cluster-admin-impl. Also ditch dependency on mdsal-binding-dom-codec-api, as it is not used anywhere. JIRA: CONTROLLER-2085 Change-Id: I5bfcc0646b73b18a540504406b8457fc83eb598f Signed-off-by: Oleksandr Zharov Signed-off-by: Robert Varga --- .../md-sal/sal-cluster-admin-impl/pom.xml | 4 - .../admin/ClusterAdminRpcService.java | 167 ++++++++------ .../datastore/admin/OSGiClusterAdmin.java | 7 +- .../admin/ClusterAdminRpcServiceTest.java | 213 ++++++++++-------- 4 files changed, 210 insertions(+), 181 deletions(-) diff --git a/opendaylight/md-sal/sal-cluster-admin-impl/pom.xml b/opendaylight/md-sal/sal-cluster-admin-impl/pom.xml index 4d3419bbb6..3d7f30799b 100644 --- a/opendaylight/md-sal/sal-cluster-admin-impl/pom.xml +++ b/opendaylight/md-sal/sal-cluster-admin-impl/pom.xml @@ -41,10 +41,6 @@ org.opendaylight.mdsal mdsal-binding-api - - org.opendaylight.mdsal - mdsal-binding-dom-codec-api - org.opendaylight.mdsal mdsal-dom-spi diff --git a/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java b/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java index d3a7c7a686..47dcc66c2d 100644 --- a/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java +++ b/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcService.java @@ -13,8 +13,10 @@ import akka.actor.Status.Success; import akka.dispatch.OnComplete; import akka.pattern.Patterns; import akka.util.Timeout; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.util.concurrent.FutureCallback; @@ -55,43 +57,52 @@ import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.opendaylight.controller.cluster.raft.client.messages.GetSnapshot; import org.opendaylight.controller.eos.akka.DataCenterControl; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.mdsal.binding.api.RpcProviderService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenter; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenterInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenterOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShardsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShardsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShardsOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddShardReplicaInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddShardReplicaOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddShardReplicaOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastore; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastoreInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastoreOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastoreOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShardsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShardsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShardsOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShard; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShardInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShardOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShardOutputBuilder; -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.DataStoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DeactivateEosDatacenter; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DeactivateEosDatacenterInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DeactivateEosDatacenterOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShardsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShardsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShardsOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetKnownClientsForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetKnownClientsForAllShardsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetKnownClientsForAllShardsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetKnownClientsForAllShardsOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetShardRoleInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetShardRoleOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetShardRoleOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.LocateShard; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.LocateShardInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.LocateShardOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.LocateShardOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocalInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocalOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocalOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicas; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicasInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicasOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicasOutputBuilder; @@ -107,6 +118,8 @@ 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.shard.result.output.ShardResult; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.shard.result.output.ShardResultBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.shard.result.output.ShardResultKey; +import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.yang.binding.Rpc; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -121,7 +134,7 @@ import scala.concurrent.Future; * * @author Thomas Pantelis */ -public class ClusterAdminRpcService implements ClusterAdminService { +public final class ClusterAdminRpcService { private static final Timeout SHARD_MGR_TIMEOUT = new Timeout(1, TimeUnit.MINUTES); private static final Logger LOG = LoggerFactory.getLogger(ClusterAdminRpcService.class); @@ -133,17 +146,14 @@ public class ClusterAdminRpcService implements ClusterAdminService { private final DistributedDataStoreInterface configDataStore; private final DistributedDataStoreInterface operDataStore; - private final BindingNormalizedNodeSerializer serializer; private final Timeout makeLeaderLocalTimeout; private final DataCenterControl dataCenterControl; public ClusterAdminRpcService(final DistributedDataStoreInterface configDataStore, final DistributedDataStoreInterface operDataStore, - final BindingNormalizedNodeSerializer serializer, final DataCenterControl dataCenterControl) { this.configDataStore = configDataStore; this.operDataStore = operDataStore; - this.serializer = serializer; makeLeaderLocalTimeout = new Timeout(configDataStore.getActorUtils().getDatastoreContext() @@ -152,8 +162,31 @@ public class ClusterAdminRpcService implements ClusterAdminService { this.dataCenterControl = dataCenterControl; } - @Override - public ListenableFuture> addShardReplica(final AddShardReplicaInput input) { + Registration registerWith(final RpcProviderService rpcProviderService) { + return rpcProviderService.registerRpcImplementations(ImmutableClassToInstanceMap.>builder() + .put(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin + .rev151013.AddShardReplica.class, this::addShardReplica) + .put(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin + .rev151013.RemoveShardReplica.class, this::removeShardReplica) + .put(LocateShard.class, this::locateShard) + .put(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin + .rev151013.MakeLeaderLocal.class, this::makeLeaderLocal) + .put(AddReplicasForAllShards.class, this::addReplicasForAllShards) + .put(RemoveAllShardReplicas.class, this::removeAllShardReplicas) + .put(ChangeMemberVotingStatesForShard.class, this::changeMemberVotingStatesForShard) + .put(ChangeMemberVotingStatesForAllShards.class, this::changeMemberVotingStatesForAllShards) + .put(FlipMemberVotingStatesForAllShards.class, this::flipMemberVotingStatesForAllShards) + .put(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin + .rev151013.GetShardRole.class, this::getShardRole) + .put(BackupDatastore.class, this::backupDatastore) + .put(GetKnownClientsForAllShards.class, this::getKnownClientsForAllShards) + .put(ActivateEosDatacenter.class, this::activateEosDatacenter) + .put(DeactivateEosDatacenter.class, this::deactivateEosDatacenter) + .build()); + } + + @VisibleForTesting + ListenableFuture> addShardReplica(final AddShardReplicaInput input) { final String shardName = input.getShardName(); if (Strings.isNullOrEmpty(shardName)) { return newFailedRpcResultFuture("A valid shard name must be specified"); @@ -166,28 +199,27 @@ public class ClusterAdminRpcService implements ClusterAdminService { LOG.info("Adding replica for shard {}", shardName); - final SettableFuture> returnFuture = SettableFuture.create(); - ListenableFuture future = sendMessageToShardManager(dataStoreType, new AddShardReplica(shardName)); - Futures.addCallback(future, new FutureCallback() { - @Override - public void onSuccess(final Success success) { - LOG.info("Successfully added replica for shard {}", shardName); - returnFuture.set(newSuccessfulResult(new AddShardReplicaOutputBuilder().build())); - } + final var returnFuture = SettableFuture.>create(); + Futures.addCallback(sendMessageToShardManager(dataStoreType, new AddShardReplica(shardName)), + new FutureCallback() { + @Override + public void onSuccess(final Success success) { + LOG.info("Successfully added replica for shard {}", shardName); + returnFuture.set(newSuccessfulResult(new AddShardReplicaOutputBuilder().build())); + } - @Override - public void onFailure(final Throwable failure) { - onMessageFailure(String.format("Failed to add replica for shard %s", shardName), + @Override + public void onFailure(final Throwable failure) { + onMessageFailure(String.format("Failed to add replica for shard %s", shardName), returnFuture, failure); - } - }, MoreExecutors.directExecutor()); + } + }, MoreExecutors.directExecutor()); return returnFuture; } - @Override - public ListenableFuture> removeShardReplica( - final RemoveShardReplicaInput input) { + @VisibleForTesting + ListenableFuture> removeShardReplica(final RemoveShardReplicaInput input) { final String shardName = input.getShardName(); if (Strings.isNullOrEmpty(shardName)) { return newFailedRpcResultFuture("A valid shard name must be specified"); @@ -225,8 +257,7 @@ public class ClusterAdminRpcService implements ClusterAdminService { return returnFuture; } - @Override - public ListenableFuture> locateShard(final LocateShardInput input) { + private ListenableFuture> locateShard(final LocateShardInput input) { final ActorUtils utils; switch (input.getDataStoreType()) { case Config: @@ -267,8 +298,8 @@ public class ClusterAdminRpcService implements ClusterAdminService { return ret; } - @Override - public ListenableFuture> makeLeaderLocal(final MakeLeaderLocalInput input) { + @VisibleForTesting + ListenableFuture> makeLeaderLocal(final MakeLeaderLocalInput input) { final String shardName = input.getShardName(); if (Strings.isNullOrEmpty(shardName)) { return newFailedRpcResultFuture("A valid shard name must be specified"); @@ -322,8 +353,7 @@ public class ClusterAdminRpcService implements ClusterAdminService { return future; } - @Override - public ListenableFuture> addReplicasForAllShards( + @VisibleForTesting ListenableFuture> addReplicasForAllShards( final AddReplicasForAllShardsInput input) { LOG.info("Adding replicas for all shards"); @@ -337,9 +367,7 @@ public class ClusterAdminRpcService implements ClusterAdminService { "Failed to add replica"); } - - @Override - public ListenableFuture> removeAllShardReplicas( + @VisibleForTesting ListenableFuture> removeAllShardReplicas( final RemoveAllShardReplicasInput input) { LOG.info("Removing replicas for all shards"); @@ -355,56 +383,54 @@ public class ClusterAdminRpcService implements ClusterAdminService { sendMessageToManagerForConfiguredShards(DataStoreType.Config, shardResultData, messageSupplier); sendMessageToManagerForConfiguredShards(DataStoreType.Operational, shardResultData, messageSupplier); - return waitForShardResults(shardResultData, shardResults -> - new RemoveAllShardReplicasOutputBuilder().setShardResult(shardResults).build(), - " Failed to remove replica"); + return waitForShardResults(shardResultData, + shardResults -> new RemoveAllShardReplicasOutputBuilder().setShardResult(shardResults).build(), + " Failed to remove replica"); } - @Override - public ListenableFuture> changeMemberVotingStatesForShard( + @VisibleForTesting + ListenableFuture> changeMemberVotingStatesForShard( final ChangeMemberVotingStatesForShardInput input) { final String shardName = input.getShardName(); if (Strings.isNullOrEmpty(shardName)) { return newFailedRpcResultFuture("A valid shard name must be specified"); } - DataStoreType dataStoreType = input.getDataStoreType(); + final var dataStoreType = input.getDataStoreType(); if (dataStoreType == null) { return newFailedRpcResultFuture("A valid DataStoreType must be specified"); } - List memberVotingStates = input.getMemberVotingState(); + final var memberVotingStates = input.getMemberVotingState(); if (memberVotingStates == null || memberVotingStates.isEmpty()) { return newFailedRpcResultFuture("No member voting state input was specified"); } - ChangeShardMembersVotingStatus changeVotingStatus = toChangeShardMembersVotingStatus(shardName, - memberVotingStates); - + final var changeVotingStatus = toChangeShardMembersVotingStatus(shardName, memberVotingStates); LOG.info("Change member voting states for shard {}: {}", shardName, changeVotingStatus.getMeberVotingStatusMap()); - final SettableFuture> returnFuture = SettableFuture.create(); - ListenableFuture future = sendMessageToShardManager(dataStoreType, changeVotingStatus); - Futures.addCallback(future, new FutureCallback() { - @Override - public void onSuccess(final Success success) { - LOG.info("Successfully changed member voting states for shard {}", shardName); - returnFuture.set(newSuccessfulResult(new ChangeMemberVotingStatesForShardOutputBuilder().build())); - } + final var returnFuture = SettableFuture.>create(); + Futures.addCallback(sendMessageToShardManager(dataStoreType, changeVotingStatus), + new FutureCallback() { + @Override + public void onSuccess(final Success success) { + LOG.info("Successfully changed member voting states for shard {}", shardName); + returnFuture.set(newSuccessfulResult(new ChangeMemberVotingStatesForShardOutputBuilder().build())); + } - @Override - public void onFailure(final Throwable failure) { - onMessageFailure(String.format("Failed to change member voting states for shard %s", shardName), + @Override + public void onFailure(final Throwable failure) { + onMessageFailure(String.format("Failed to change member voting states for shard %s", shardName), returnFuture, failure); - } - }, MoreExecutors.directExecutor()); + } + }, MoreExecutors.directExecutor()); return returnFuture; } - @Override - public ListenableFuture> changeMemberVotingStatesForAllShards( + @VisibleForTesting + ListenableFuture> changeMemberVotingStatesForAllShards( final ChangeMemberVotingStatesForAllShardsInput input) { List memberVotingStates = input.getMemberVotingState(); if (memberVotingStates == null || memberVotingStates.isEmpty()) { @@ -425,11 +451,11 @@ public class ClusterAdminRpcService implements ClusterAdminService { "Failed to change member voting states"); } - @Override - public ListenableFuture> flipMemberVotingStatesForAllShards( + @VisibleForTesting + ListenableFuture> flipMemberVotingStatesForAllShards( final FlipMemberVotingStatesForAllShardsInput input) { - final List, ShardResultBuilder>> shardResultData = new ArrayList<>(); - Function messageSupplier = FlipShardMembersVotingStatus::new; + final var shardResultData = new ArrayList, ShardResultBuilder>>(); + final Function messageSupplier = FlipShardMembersVotingStatus::new; LOG.info("Flip member voting states for all shards"); @@ -441,8 +467,7 @@ public class ClusterAdminRpcService implements ClusterAdminService { "Failed to change member voting states"); } - @Override - public ListenableFuture> getShardRole(final GetShardRoleInput input) { + private ListenableFuture> getShardRole(final GetShardRoleInput input) { final String shardName = input.getShardName(); if (Strings.isNullOrEmpty(shardName)) { return newFailedRpcResultFuture("A valid shard name must be specified"); @@ -484,8 +509,8 @@ public class ClusterAdminRpcService implements ClusterAdminService { return returnFuture; } - @Override - public ListenableFuture> backupDatastore(final BackupDatastoreInput input) { + @VisibleForTesting + ListenableFuture> backupDatastore(final BackupDatastoreInput input) { LOG.debug("backupDatastore: {}", input); if (Strings.isNullOrEmpty(input.getFilePath())) { @@ -513,9 +538,7 @@ public class ClusterAdminRpcService implements ClusterAdminService { return returnFuture; } - - @Override - public ListenableFuture> getKnownClientsForAllShards( + private ListenableFuture> getKnownClientsForAllShards( final GetKnownClientsForAllShardsInput input) { final ImmutableMap> allShardReplies = getAllShardLeadersClients(); @@ -523,8 +546,7 @@ public class ClusterAdminRpcService implements ClusterAdminService { MoreExecutors.directExecutor()); } - @Override - public ListenableFuture> activateEosDatacenter( + private ListenableFuture> activateEosDatacenter( final ActivateEosDatacenterInput input) { LOG.debug("Activating EOS Datacenter"); final SettableFuture> future = SettableFuture.create(); @@ -545,8 +567,7 @@ public class ClusterAdminRpcService implements ClusterAdminService { return future; } - @Override - public ListenableFuture> deactivateEosDatacenter( + private ListenableFuture> deactivateEosDatacenter( final DeactivateEosDatacenterInput input) { LOG.debug("Deactivating EOS Datacenter"); final SettableFuture> future = SettableFuture.create(); diff --git a/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/OSGiClusterAdmin.java b/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/OSGiClusterAdmin.java index c0218244f1..bcbf408eed 100644 --- a/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/OSGiClusterAdmin.java +++ b/opendaylight/md-sal/sal-cluster-admin-impl/src/main/java/org/opendaylight/controller/cluster/datastore/admin/OSGiClusterAdmin.java @@ -10,8 +10,6 @@ package org.opendaylight.controller.cluster.datastore.admin; import org.opendaylight.controller.cluster.datastore.DistributedDataStoreInterface; import org.opendaylight.controller.eos.akka.DataCenterControl; import org.opendaylight.mdsal.binding.api.RpcProviderService; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ClusterAdminService; import org.opendaylight.yangtools.concepts.Registration; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -30,12 +28,11 @@ public final class OSGiClusterAdmin { public OSGiClusterAdmin( @Reference(target = "(type=distributed-config)") final DistributedDataStoreInterface configDatastore, @Reference(target = "(type=distributed-operational)") final DistributedDataStoreInterface operDatastore, - @Reference final BindingNormalizedNodeSerializer serializer, @Reference final RpcProviderService rpcProviderService, @Reference final DataCenterControl dataCenterControls, @Reference final DataCenterControl dataCenterControl) { - reg = rpcProviderService.registerRpcImplementation(ClusterAdminService.class, - new ClusterAdminRpcService(configDatastore, operDatastore, serializer, dataCenterControl)); + reg = new ClusterAdminRpcService(configDatastore, operDatastore, dataCenterControl) + .registerWith(rpcProviderService); LOG.info("Cluster Admin services started"); } diff --git a/opendaylight/md-sal/sal-cluster-admin-impl/src/test/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcServiceTest.java b/opendaylight/md-sal/sal-cluster-admin-impl/src/test/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcServiceTest.java index ef09628414..ce0a5367e2 100644 --- a/opendaylight/md-sal/sal-cluster-admin-impl/src/test/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcServiceTest.java +++ b/opendaylight/md-sal/sal-cluster-admin-impl/src/test/java/org/opendaylight/controller/cluster/datastore/admin/ClusterAdminRpcServiceTest.java @@ -30,7 +30,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import java.io.File; -import java.io.FileInputStream; +import java.nio.file.Files; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.HashMap; @@ -68,22 +68,16 @@ import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShardsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShardsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddShardReplicaInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddShardReplicaOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastoreInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastoreOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShardsInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShardsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShardInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShardOutput; 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.FlipMemberVotingStatesForAllShardsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShardsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocalInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocalOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicasInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicasOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveShardReplicaInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveShardReplicaOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.member.voting.states.input.MemberVotingStateBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.shard.result.output.ShardResult; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.shard.result.output.ShardResultBuilder; @@ -124,17 +118,17 @@ public class ClusterAdminRpcServiceTest { .moduleShardsConfig("module-shards-member1.conf").waitForShardLeader("cars", "people") .testName("testBackupDatastore").build(); - String fileName = "target/testBackupDatastore"; - new File(fileName).delete(); + final var fileName = "target/testBackupDatastore"; + final var file = new File(fileName); + file.delete(); - final ClusterAdminRpcService service = new ClusterAdminRpcService(node.configDataStore(), node.operDataStore(), - null, null); + final var service = new ClusterAdminRpcService(node.configDataStore(), node.operDataStore(), null); - RpcResult rpcResult = service .backupDatastore(new BackupDatastoreInputBuilder() - .setFilePath(fileName).build()).get(5, TimeUnit.SECONDS); + var rpcResult = service.backupDatastore(new BackupDatastoreInputBuilder().setFilePath(fileName).build()) + .get(5, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); - try (FileInputStream fis = new FileInputStream(fileName)) { + try (var fis = Files.newInputStream(file.toPath())) { List snapshots = SerializationUtils.deserialize(fis); assertEquals("DatastoreSnapshot size", 2, snapshots.size()); @@ -292,19 +286,22 @@ public class ClusterAdminRpcServiceTest { MemberNode memberNode = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig("module-shards-cars-member-1.conf").build(); - final ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), - memberNode.operDataStore(), null, null); + final var service = new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), null); - RpcResult rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() - .setDataStoreType(DataStoreType.Config).build()).get(10, TimeUnit.SECONDS); + var rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() + .setDataStoreType(DataStoreType.Config) + .build()) + .get(10, TimeUnit.SECONDS); verifyFailedRpcResult(rpcResult); - rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder().setShardName("cars") - .build()).get(10, TimeUnit.SECONDS); + rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder().setShardName("cars").build()) + .get(10, TimeUnit.SECONDS); verifyFailedRpcResult(rpcResult); rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder().setShardName("people") - .setDataStoreType(DataStoreType.Config).build()).get(10, TimeUnit.SECONDS); + .setDataStoreType(DataStoreType.Config) + .build()) + .get(10, TimeUnit.SECONDS); verifyFailedRpcResult(rpcResult); } @@ -335,11 +332,12 @@ public class ClusterAdminRpcServiceTest { final String... peerMemberNames) throws Exception { memberNode.waitForMembersUp(peerMemberNames); - final ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), - memberNode.operDataStore(), null, null); + final var service = new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), null); - RpcResult rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() - .setShardName(shardName).setDataStoreType(DataStoreType.Config).build()).get(10, TimeUnit.SECONDS); + var rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.Config) + .build()).get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); verifyRaftPeersPresent(memberNode.configDataStore(), shardName, peerMemberNames); @@ -347,8 +345,10 @@ public class ClusterAdminRpcServiceTest { Optional optional = memberNode.operDataStore().getActorUtils().findLocalShard(shardName); assertFalse("Oper shard present", optional.isPresent()); - rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder().setShardName(shardName) - .setDataStoreType(DataStoreType.Operational).build()).get(10, TimeUnit.SECONDS); + rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() + .setShardName(shardName) + .setDataStoreType(DataStoreType.Operational) + .build()).get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); verifyRaftPeersPresent(memberNode.operDataStore(), shardName, peerMemberNames); @@ -356,12 +356,12 @@ public class ClusterAdminRpcServiceTest { private static void doMakeShardLeaderLocal(final MemberNode memberNode, final String shardName, final String newLeader) throws Exception { - final ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), - memberNode.operDataStore(), null, null); + final var service = new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), null); - final RpcResult rpcResult = service.makeLeaderLocal(new MakeLeaderLocalInputBuilder() - .setDataStoreType(DataStoreType.Config).setShardName(shardName).build()) - .get(10, TimeUnit.SECONDS); + final var rpcResult = service.makeLeaderLocal(new MakeLeaderLocalInputBuilder() + .setDataStoreType(DataStoreType.Config) + .setShardName(shardName) + .build()).get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); @@ -412,12 +412,13 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to remove it's local shard - final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null, null); + final var service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), replicaNode3.operDataStore(), + null); - RpcResult rpcResult = service3.removeShardReplica(new RemoveShardReplicaInputBuilder() - .setShardName("cars").setMemberName("member-3").setDataStoreType(DataStoreType.Config).build()) - .get(10, TimeUnit.SECONDS); + var rpcResult = service3.removeShardReplica(new RemoveShardReplicaInputBuilder() + .setShardName("cars").setMemberName("member-3") + .setDataStoreType(DataStoreType.Config) + .build()).get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); verifyRaftPeersPresent(leaderNode1.configDataStore(), "cars", "member-2"); @@ -437,11 +438,14 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-1 to remove member-2 - final ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), - leaderNode1.operDataStore(), null, null); + final var service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), leaderNode1.operDataStore(), + null); - rpcResult = service1.removeShardReplica(new RemoveShardReplicaInputBuilder().setShardName("cars") - .setMemberName("member-2").setDataStoreType(DataStoreType.Config).build()).get(10, TimeUnit.SECONDS); + rpcResult = service1.removeShardReplica(new RemoveShardReplicaInputBuilder() + .setShardName("cars") + .setMemberName("member-2") + .setDataStoreType(DataStoreType.Config) + .build()).get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); verifyRaftPeersPresent(leaderNode1.configDataStore(), "cars"); @@ -473,12 +477,14 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on leader member-1 to remove it's local shard - final ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), - leaderNode1.operDataStore(), null, null); + final var service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), leaderNode1.operDataStore(), + null); - RpcResult rpcResult = service1.removeShardReplica(new RemoveShardReplicaInputBuilder() - .setShardName("cars").setMemberName("member-1").setDataStoreType(DataStoreType.Config).build()) - .get(10, TimeUnit.SECONDS); + final var rpcResult = service1.removeShardReplica(new RemoveShardReplicaInputBuilder() + .setShardName("cars") + .setMemberName("member-1") + .setDataStoreType(DataStoreType.Config) + .build()).get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); verifyRaftState(replicaNode2.configDataStore(), "cars", raftState -> @@ -521,11 +527,11 @@ public class ClusterAdminRpcServiceTest { newReplicaNode2.kit().getRef()); newReplicaNode2.kit().expectMsgClass(Success.class); - final ClusterAdminRpcService service = new ClusterAdminRpcService(newReplicaNode2.configDataStore(), - newReplicaNode2.operDataStore(), null, null); + final var service = new ClusterAdminRpcService(newReplicaNode2.configDataStore(), + newReplicaNode2.operDataStore(), null); - RpcResult rpcResult = service.addReplicasForAllShards( - new AddReplicasForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); + var rpcResult = service.addReplicasForAllShards(new AddReplicasForAllShardsInputBuilder().build()) + .get(10, TimeUnit.SECONDS); AddReplicasForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), @@ -579,11 +585,12 @@ public class ClusterAdminRpcServiceTest { verifyRaftPeersPresent(replicaNode2.configDataStore(), "pets", "member-1", "member-3"); verifyRaftPeersPresent(replicaNode3.configDataStore(), "pets", "member-1", "member-2"); - final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null, null); + final var service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), replicaNode3.operDataStore(), + null); - RpcResult rpcResult = service3.removeAllShardReplicas( - new RemoveAllShardReplicasInputBuilder().setMemberName("member-3").build()).get(10, TimeUnit.SECONDS); + var rpcResult = service3.removeAllShardReplicas( + new RemoveAllShardReplicasInputBuilder().setMemberName("member-3").build()) + .get(10, TimeUnit.SECONDS); RemoveAllShardReplicasOutput result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), @@ -625,17 +632,16 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to change voting status - final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null, null); + final var service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), replicaNode3.operDataStore(), + null); - RpcResult rpcResult = service3 - .changeMemberVotingStatesForShard(new ChangeMemberVotingStatesForShardInputBuilder() - .setShardName("cars").setDataStoreType(DataStoreType.Config) - .setMemberVotingState(List.of( - new MemberVotingStateBuilder().setMemberName("member-2").setVoting(FALSE).build(), - new MemberVotingStateBuilder().setMemberName("member-3").setVoting(FALSE).build())) - .build()) - .get(10, TimeUnit.SECONDS); + var rpcResult = service3.changeMemberVotingStatesForShard(new ChangeMemberVotingStatesForShardInputBuilder() + .setShardName("cars").setDataStoreType(DataStoreType.Config) + .setMemberVotingState(List.of( + new MemberVotingStateBuilder().setMemberName("member-2").setVoting(FALSE).build(), + new MemberVotingStateBuilder().setMemberName("member-3").setVoting(FALSE).build())) + .build()) + .get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); verifyVotingStates(leaderNode1.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), @@ -659,18 +665,17 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to change voting status - final ClusterAdminRpcService service = new ClusterAdminRpcService(leaderNode.configDataStore(), - leaderNode.operDataStore(), null, null); - - RpcResult rpcResult = service - .changeMemberVotingStatesForShard(new ChangeMemberVotingStatesForShardInputBuilder() - .setShardName("cars").setDataStoreType(DataStoreType.Config) - .setMemberVotingState(List.of(new MemberVotingStateBuilder() - .setMemberName("member-1") - .setVoting(FALSE) - .build())) - .build()) - .get(10, TimeUnit.SECONDS); + final var service = new ClusterAdminRpcService(leaderNode.configDataStore(), leaderNode.operDataStore(), null); + + final var rpcResult = service.changeMemberVotingStatesForShard( + new ChangeMemberVotingStatesForShardInputBuilder() + .setShardName("cars").setDataStoreType(DataStoreType.Config) + .setMemberVotingState(List.of(new MemberVotingStateBuilder() + .setMemberName("member-1") + .setVoting(FALSE) + .build())) + .build()) + .get(10, TimeUnit.SECONDS); verifyFailedRpcResult(rpcResult); verifyVotingStates(leaderNode.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE)); @@ -680,10 +685,14 @@ public class ClusterAdminRpcServiceTest { public void testChangeMemberVotingStatesForAllShards() throws Exception { String name = "testChangeMemberVotingStatesForAllShards"; String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) - .moduleShardsConfig(moduleShardsConfig).datastoreContextBuilder( - DatastoreContext.newBuilder().shardHeartbeatIntervalInMillis(300).shardElectionTimeoutFactor(1)) - .build(); + final MemberNode leaderNode1 = MemberNode.builder(memberNodes) + .akkaConfig("Member1") + .testName(name) + .moduleShardsConfig(moduleShardsConfig) + .datastoreContextBuilder(DatastoreContext.newBuilder() + .shardHeartbeatIntervalInMillis(300) + .shardElectionTimeoutFactor(1)) + .build(); final MemberNode replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); @@ -701,15 +710,17 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to change voting status - final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null, null); + final var service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), + replicaNode3.operDataStore(), null); - RpcResult rpcResult = service3.changeMemberVotingStatesForAllShards( - new ChangeMemberVotingStatesForAllShardsInputBuilder().setMemberVotingState(List.of( + final var rpcResult = service3.changeMemberVotingStatesForAllShards( + new ChangeMemberVotingStatesForAllShardsInputBuilder() + .setMemberVotingState(List.of( new MemberVotingStateBuilder().setMemberName("member-2").setVoting(FALSE).build(), - new MemberVotingStateBuilder().setMemberName("member-3").setVoting(FALSE).build())).build()) + new MemberVotingStateBuilder().setMemberName("member-3").setVoting(FALSE).build())) + .build()) .get(10, TimeUnit.SECONDS); - ChangeMemberVotingStatesForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); + final var result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), successShardResult("cars", DataStoreType.Operational), @@ -753,11 +764,12 @@ public class ClusterAdminRpcServiceTest { verifyVotingStates(leaderNode1.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), new SimpleEntry<>("member-2", TRUE), new SimpleEntry<>("member-3", FALSE)); - final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null, null); + final var service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), replicaNode3.operDataStore(), + null); - RpcResult rpcResult = service3.flipMemberVotingStatesForAllShards( - new FlipMemberVotingStatesForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); + var rpcResult = service3.flipMemberVotingStatesForAllShards( + new FlipMemberVotingStatesForAllShardsInputBuilder().build()) + .get(10, TimeUnit.SECONDS); FlipMemberVotingStatesForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), @@ -787,7 +799,8 @@ public class ClusterAdminRpcServiceTest { // Flip the voting states back to the original states. rpcResult = service3.flipMemberVotingStatesForAllShards( - new FlipMemberVotingStatesForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); + new FlipMemberVotingStatesForAllShardsInputBuilder().build()) + .get(10, TimeUnit.SECONDS); result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), @@ -848,11 +861,12 @@ public class ClusterAdminRpcServiceTest { verifyRaftState(replicaNode1.configDataStore(), "cars", raftState -> assertEquals("Expected raft state", RaftState.Follower.toString(), raftState.getRaftState())); - final ClusterAdminRpcService service1 = new ClusterAdminRpcService(replicaNode1.configDataStore(), - replicaNode1.operDataStore(), null, null); + final var service1 = new ClusterAdminRpcService(replicaNode1.configDataStore(), replicaNode1.operDataStore(), + null); - RpcResult rpcResult = service1.flipMemberVotingStatesForAllShards( - new FlipMemberVotingStatesForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); + var rpcResult = service1.flipMemberVotingStatesForAllShards( + new FlipMemberVotingStatesForAllShardsInputBuilder().build()) + .get(10, TimeUnit.SECONDS); FlipMemberVotingStatesForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), @@ -915,11 +929,12 @@ public class ClusterAdminRpcServiceTest { new SimpleEntry<>("member-4", FALSE), new SimpleEntry<>("member-5", FALSE), new SimpleEntry<>("member-6", FALSE)); - final ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), - leaderNode1.operDataStore(), null, null); + final var service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), leaderNode1.operDataStore(), + null); - RpcResult rpcResult = service1.flipMemberVotingStatesForAllShards( - new FlipMemberVotingStatesForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); + final var rpcResult = service1.flipMemberVotingStatesForAllShards( + new FlipMemberVotingStatesForAllShardsInputBuilder().build()) + .get(10, TimeUnit.SECONDS); FlipMemberVotingStatesForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), -- 2.36.6