X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-cluster-admin-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fadmin%2FClusterAdminRpcServiceTest.java;h=ba00174f24d3de22947ea8f9945c25f34906732f;hp=cc70f7e673046619ee1d91b247d930b3f6c71d67;hb=684673104adccd504e394e01a852a06d42047af0;hpb=4944f54d4e1fc24404d55e4ab74b6de212844dcd 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 cc70f7e673..ba00174f24 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 @@ -11,11 +11,11 @@ import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; import static org.hamcrest.CoreMatchers.anyOf; import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.opendaylight.controller.cluster.datastore.MemberNode.verifyNoShardPresent; @@ -26,31 +26,25 @@ import akka.actor.ActorRef; import akka.actor.PoisonPill; import akka.actor.Status.Success; import akka.cluster.Cluster; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import java.io.File; import java.io.FileInputStream; -import java.net.URI; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.SerializationUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.mockito.Mockito; import org.opendaylight.controller.cluster.access.concepts.MemberName; import org.opendaylight.controller.cluster.datastore.AbstractDataStore; import org.opendaylight.controller.cluster.datastore.DatastoreContext; @@ -58,11 +52,9 @@ import org.opendaylight.controller.cluster.datastore.MemberNode; import org.opendaylight.controller.cluster.datastore.MemberNode.RaftStateVerifier; import org.opendaylight.controller.cluster.datastore.Shard; import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfiguration; -import org.opendaylight.controller.cluster.datastore.config.PrefixShardConfiguration; import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; import org.opendaylight.controller.cluster.datastore.messages.CreateShard; import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot; -import org.opendaylight.controller.cluster.datastore.utils.ClusterUtils; import org.opendaylight.controller.cluster.raft.RaftState; import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload; import org.opendaylight.controller.cluster.raft.persisted.ServerInfo; @@ -70,19 +62,9 @@ import org.opendaylight.controller.cluster.raft.persisted.SimpleReplicatedLogEnt import org.opendaylight.controller.cluster.raft.persisted.UpdateElectionTerm; import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal; import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore; -import org.opendaylight.controller.cluster.sharding.messages.PrefixShardCreated; import org.opendaylight.controller.md.cluster.datastore.model.CarsModel; -import org.opendaylight.controller.md.cluster.datastore.model.PeopleModel; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.Cars; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.people.rev140818.People; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddPrefixShardReplicaInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddPrefixShardReplicaInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddPrefixShardReplicaOutput; 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; @@ -96,27 +78,19 @@ 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.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.GetPrefixShardRoleInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetPrefixShardRoleInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetPrefixShardRoleOutput; -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.GetShardRoleInputBuilder; -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.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.RemovePrefixShardReplicaInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemovePrefixShardReplicaInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemovePrefixShardReplicaOutput; 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; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +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.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; /** @@ -153,7 +127,8 @@ public class ClusterAdminRpcServiceTest { String fileName = "target/testBackupDatastore"; new File(fileName).delete(); - ClusterAdminRpcService service = new ClusterAdminRpcService(node.configDataStore(), node.operDataStore(), null); + final ClusterAdminRpcService service = new ClusterAdminRpcService(node.configDataStore(), node.operDataStore(), + null, null); RpcResult rpcResult = service .backupDatastore(new BackupDatastoreInputBuilder() .setFilePath(fileName).build()).get(5, TimeUnit.SECONDS); @@ -195,108 +170,7 @@ public class ClusterAdminRpcServiceTest { shardNames.add(s.getName()); } - assertEquals("DatastoreSnapshot shard names", Sets.newHashSet(expShardNames), shardNames); - } - - @Test - public void testAddRemovePrefixShardReplica() throws Exception { - String name = "testAddPrefixShardReplica"; - String moduleShardsConfig = "module-shards-default.conf"; - - final MemberNode member1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) - .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) - .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) - .moduleShardsConfig(moduleShardsConfig).build(); - - member1.waitForMembersUp("member-2", "member-3"); - replicaNode2.kit().waitForMembersUp("member-1", "member-3"); - replicaNode3.kit().waitForMembersUp("member-1", "member-2"); - - final ActorRef shardManager1 = member1.configDataStore().getActorUtils().getShardManager(); - - shardManager1.tell(new PrefixShardCreated(new PrefixShardConfiguration( - new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, CarsModel.BASE_PATH), - "prefix", Collections.singleton(MEMBER_1))), - ActorRef.noSender()); - - member1.kit().waitUntilLeader(member1.configDataStore().getActorUtils(), - ClusterUtils.getCleanShardName(CarsModel.BASE_PATH)); - - final InstanceIdentifier identifier = InstanceIdentifier.create(Cars.class); - final BindingNormalizedNodeSerializer serializer = Mockito.mock(BindingNormalizedNodeSerializer.class); - Mockito.doReturn(CarsModel.BASE_PATH).when(serializer).toYangInstanceIdentifier(identifier); - - addPrefixShardReplica(replicaNode2, identifier, serializer, - ClusterUtils.getCleanShardName(CarsModel.BASE_PATH), "member-1"); - - addPrefixShardReplica(replicaNode3, identifier, serializer, - ClusterUtils.getCleanShardName(CarsModel.BASE_PATH), "member-1", "member-2"); - - verifyRaftPeersPresent(member1.configDataStore(), ClusterUtils.getCleanShardName(CarsModel.BASE_PATH), - "member-2", "member-3"); - - removePrefixShardReplica(member1, identifier, "member-3", serializer, - ClusterUtils.getCleanShardName(CarsModel.BASE_PATH), "member-2"); - - verifyNoShardPresent(replicaNode3.configDataStore(), ClusterUtils.getCleanShardName(CarsModel.BASE_PATH)); - verifyRaftPeersPresent(replicaNode2.configDataStore(), ClusterUtils.getCleanShardName(CarsModel.BASE_PATH), - "member-1"); - - removePrefixShardReplica(member1, identifier, "member-2", serializer, - ClusterUtils.getCleanShardName(CarsModel.BASE_PATH)); - - verifyNoShardPresent(replicaNode2.configDataStore(), ClusterUtils.getCleanShardName(CarsModel.BASE_PATH)); - } - - @Test - public void testGetShardRole() throws Exception { - String name = "testGetShardRole"; - String moduleShardsConfig = "module-shards-default-member-1.conf"; - - final MemberNode member1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) - .moduleShardsConfig(moduleShardsConfig).build(); - - member1.kit().waitUntilLeader(member1.configDataStore().getActorUtils(), "default"); - - final RpcResult successResult = - getShardRole(member1, Mockito.mock(BindingNormalizedNodeSerializer.class), "default"); - verifySuccessfulRpcResult(successResult); - assertEquals("Leader", successResult.getResult().getRole()); - - final RpcResult failedResult = - getShardRole(member1, Mockito.mock(BindingNormalizedNodeSerializer.class), "cars"); - - verifyFailedRpcResult(failedResult); - - final ActorRef shardManager1 = member1.configDataStore().getActorUtils().getShardManager(); - - shardManager1.tell(new PrefixShardCreated(new PrefixShardConfiguration( - new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, CarsModel.BASE_PATH), - "prefix", Collections.singleton(MEMBER_1))), - ActorRef.noSender()); - - member1.kit().waitUntilLeader(member1.configDataStore().getActorUtils(), - ClusterUtils.getCleanShardName(CarsModel.BASE_PATH)); - - final InstanceIdentifier identifier = InstanceIdentifier.create(Cars.class); - final BindingNormalizedNodeSerializer serializer = Mockito.mock(BindingNormalizedNodeSerializer.class); - Mockito.doReturn(CarsModel.BASE_PATH).when(serializer).toYangInstanceIdentifier(identifier); - - final RpcResult prefixSuccessResult = - getPrefixShardRole(member1, identifier, serializer); - - verifySuccessfulRpcResult(prefixSuccessResult); - assertEquals("Leader", prefixSuccessResult.getResult().getRole()); - - final InstanceIdentifier peopleId = InstanceIdentifier.create(People.class); - Mockito.doReturn(PeopleModel.BASE_PATH).when(serializer).toYangInstanceIdentifier(peopleId); - - final RpcResult prefixFail = - getPrefixShardRole(member1, peopleId, serializer); - - verifyFailedRpcResult(prefixFail); + assertEquals("DatastoreSnapshot shard names", Set.of(expShardNames), shardNames); } @Test @@ -308,8 +182,6 @@ public class ClusterAdminRpcServiceTest { .moduleShardsConfig(moduleShardsConfig).build(); member1.kit().waitUntilLeader(member1.configDataStore().getActorUtils(), "default"); - - } @Test @@ -379,7 +251,7 @@ public class ClusterAdminRpcServiceTest { verifyRaftPeersPresent(newReplicaNode2.operDataStore(), "cars", "member-1", "member-3"); // Write data to member-2's config datastore and read/verify via member-3 - final NormalizedNode configCarsNode = writeCarsNodeAndVerify(newReplicaNode2.configDataStore(), + final NormalizedNode configCarsNode = writeCarsNodeAndVerify(newReplicaNode2.configDataStore(), newReplicaNode3.configDataStore()); // Write data to member-3's oper datastore and read/verify via member-2 @@ -420,8 +292,8 @@ public class ClusterAdminRpcServiceTest { MemberNode memberNode = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig("module-shards-cars-member-1.conf").build(); - ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), - memberNode.operDataStore(), null); + final ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), + memberNode.operDataStore(), null, null); RpcResult rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() .setDataStoreType(DataStoreType.Config).build()).get(10, TimeUnit.SECONDS); @@ -436,10 +308,10 @@ public class ClusterAdminRpcServiceTest { verifyFailedRpcResult(rpcResult); } - private static NormalizedNode writeCarsNodeAndVerify(final AbstractDataStore writeToStore, + private static NormalizedNode writeCarsNodeAndVerify(final AbstractDataStore writeToStore, final AbstractDataStore readFromStore) throws Exception { DOMStoreWriteTransaction writeTx = writeToStore.newWriteOnlyTransaction(); - NormalizedNode carsNode = CarsModel.create(); + NormalizedNode carsNode = CarsModel.create(); writeTx.write(CarsModel.BASE_PATH, carsNode); DOMStoreThreePhaseCommitCohort cohort = writeTx.ready(); @@ -453,87 +325,19 @@ public class ClusterAdminRpcServiceTest { } private static void readCarsNodeAndVerify(final AbstractDataStore readFromStore, - final NormalizedNode expCarsNode) throws Exception { - java.util.Optional> optional = readFromStore.newReadOnlyTransaction() - .read(CarsModel.BASE_PATH).get(15, TimeUnit.SECONDS); + final NormalizedNode expCarsNode) throws Exception { + Optional optional = readFromStore.newReadOnlyTransaction().read(CarsModel.BASE_PATH) + .get(15, TimeUnit.SECONDS); assertTrue("isPresent", optional.isPresent()); assertEquals("Data node", expCarsNode, optional.get()); } - private static RpcResult getShardRole(final MemberNode memberNode, - final BindingNormalizedNodeSerializer serializer, final String shardName) throws Exception { - - final GetShardRoleInput input = new GetShardRoleInputBuilder() - .setDataStoreType(DataStoreType.Config) - .setShardName(shardName) - .build(); - - final ClusterAdminRpcService service = - new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), serializer); - - return service.getShardRole(input).get(10, TimeUnit.SECONDS); - } - - private static RpcResult getPrefixShardRole( - final MemberNode memberNode, - final InstanceIdentifier identifier, - final BindingNormalizedNodeSerializer serializer) throws Exception { - - final GetPrefixShardRoleInput input = new GetPrefixShardRoleInputBuilder() - .setDataStoreType(DataStoreType.Config) - .setShardPrefix(identifier) - .build(); - - final ClusterAdminRpcService service = - new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), serializer); - - return service.getPrefixShardRole(input).get(10, TimeUnit.SECONDS); - } - - private static void addPrefixShardReplica(final MemberNode memberNode, final InstanceIdentifier identifier, - final BindingNormalizedNodeSerializer serializer, final String shardName, - final String... peerMemberNames) throws Exception { - - final AddPrefixShardReplicaInput input = new AddPrefixShardReplicaInputBuilder() - .setShardPrefix(identifier) - .setDataStoreType(DataStoreType.Config).build(); - - final ClusterAdminRpcService service = - new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), serializer); - - final RpcResult rpcResult = service.addPrefixShardReplica(input) - .get(10, TimeUnit.SECONDS); - verifySuccessfulRpcResult(rpcResult); - - verifyRaftPeersPresent(memberNode.configDataStore(), shardName, peerMemberNames); - Optional optional = memberNode.configDataStore().getActorUtils().findLocalShard(shardName); - assertTrue("Replica shard not present", optional.isPresent()); - } - - private static void removePrefixShardReplica(final MemberNode memberNode, final InstanceIdentifier identifier, - final String removeFromMember, final BindingNormalizedNodeSerializer serializer, final String shardName, - final String... peerMemberNames) throws Exception { - final RemovePrefixShardReplicaInput input = new RemovePrefixShardReplicaInputBuilder() - .setDataStoreType(DataStoreType.Config) - .setShardPrefix(identifier) - .setMemberName(removeFromMember).build(); - - final ClusterAdminRpcService service = - new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), serializer); - - final RpcResult rpcResult = service.removePrefixShardReplica(input) - .get(10, TimeUnit.SECONDS); - verifySuccessfulRpcResult(rpcResult); - - verifyRaftPeersPresent(memberNode.configDataStore(), shardName, peerMemberNames); - } - private static void doAddShardReplica(final MemberNode memberNode, final String shardName, final String... peerMemberNames) throws Exception { memberNode.waitForMembersUp(peerMemberNames); - ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), - memberNode.operDataStore(), null); + final ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), + memberNode.operDataStore(), null, null); RpcResult rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() .setShardName(shardName).setDataStoreType(DataStoreType.Config).build()).get(10, TimeUnit.SECONDS); @@ -553,8 +357,8 @@ public class ClusterAdminRpcServiceTest { private static void doMakeShardLeaderLocal(final MemberNode memberNode, final String shardName, final String newLeader) throws Exception { - ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), - memberNode.operDataStore(), null); + final ClusterAdminRpcService service = new ClusterAdminRpcService(memberNode.configDataStore(), + memberNode.operDataStore(), null, null); final RpcResult rpcResult = service.makeLeaderLocal(new MakeLeaderLocalInputBuilder() .setDataStoreType(DataStoreType.Config).setShardName(shardName).build()) @@ -609,8 +413,8 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to remove it's local shard - ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null); + final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), + replicaNode3.operDataStore(), null, null); RpcResult rpcResult = service3.removeShardReplica(new RemoveShardReplicaInputBuilder() .setShardName("cars").setMemberName("member-3").setDataStoreType(DataStoreType.Config).build()) @@ -634,8 +438,8 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-1 to remove member-2 - ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), - leaderNode1.operDataStore(), null); + final ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), + leaderNode1.operDataStore(), null, null); rpcResult = service1.removeShardReplica(new RemoveShardReplicaInputBuilder().setShardName("cars") .setMemberName("member-2").setDataStoreType(DataStoreType.Config).build()).get(10, TimeUnit.SECONDS); @@ -670,8 +474,8 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on leader member-1 to remove it's local shard - ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), - leaderNode1.operDataStore(), null); + final ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), + leaderNode1.operDataStore(), null, null); RpcResult rpcResult = service1.removeShardReplica(new RemoveShardReplicaInputBuilder() .setShardName("cars").setMemberName("member-1").setDataStoreType(DataStoreType.Config).build()) @@ -694,9 +498,8 @@ public class ClusterAdminRpcServiceTest { MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig(moduleShardsConfig).waitForShardLeader("cars", "people").build(); - ModuleShardConfiguration petsModuleConfig = new ModuleShardConfiguration(URI.create("pets-ns"), "pets-module", - "pets", null, - Collections.singletonList(MEMBER_1)); + ModuleShardConfiguration petsModuleConfig = new ModuleShardConfiguration( + XMLNamespace.of("pets-ns"), "pets-module", "pets", null, List.of(MEMBER_1)); leaderNode1.configDataStore().getActorUtils().getShardManager().tell( new CreateShard(petsModuleConfig, Shard.builder(), null), leaderNode1.kit().getRef()); leaderNode1.kit().expectMsgClass(Success.class); @@ -713,15 +516,14 @@ public class ClusterAdminRpcServiceTest { newReplicaNode2.kit().expectMsgClass(Success.class); newReplicaNode2.operDataStore().getActorUtils().getShardManager().tell( - new CreateShard(new ModuleShardConfiguration(URI.create("no-leader-ns"), "no-leader-module", - "no-leader", null, - Collections.singletonList(MEMBER_1)), + new CreateShard(new ModuleShardConfiguration(XMLNamespace.of("no-leader-ns"), "no-leader-module", + "no-leader", null, List.of(MEMBER_1)), Shard.builder(), null), newReplicaNode2.kit().getRef()); newReplicaNode2.kit().expectMsgClass(Success.class); - ClusterAdminRpcService service = new ClusterAdminRpcService(newReplicaNode2.configDataStore(), - newReplicaNode2.operDataStore(), null); + final ClusterAdminRpcService service = new ClusterAdminRpcService(newReplicaNode2.configDataStore(), + newReplicaNode2.operDataStore(), null, null); RpcResult rpcResult = service.addReplicasForAllShards( new AddReplicasForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); @@ -760,8 +562,8 @@ public class ClusterAdminRpcServiceTest { verifyRaftPeersPresent(replicaNode2.configDataStore(), "cars", "member-1", "member-3"); verifyRaftPeersPresent(replicaNode3.configDataStore(), "cars", "member-1", "member-2"); - ModuleShardConfiguration petsModuleConfig = new ModuleShardConfiguration(URI.create("pets-ns"), "pets-module", - "pets", null, Arrays.asList(MEMBER_1, MEMBER_2, MEMBER_3)); + ModuleShardConfiguration petsModuleConfig = new ModuleShardConfiguration(XMLNamespace.of("pets-ns"), + "pets-module", "pets", null, List.of(MEMBER_1, MEMBER_2, MEMBER_3)); leaderNode1.configDataStore().getActorUtils().getShardManager().tell( new CreateShard(petsModuleConfig, Shard.builder(), null), leaderNode1.kit().getRef()); leaderNode1.kit().expectMsgClass(Success.class); @@ -778,8 +580,8 @@ public class ClusterAdminRpcServiceTest { verifyRaftPeersPresent(replicaNode2.configDataStore(), "pets", "member-1", "member-3"); verifyRaftPeersPresent(replicaNode3.configDataStore(), "pets", "member-1", "member-2"); - ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null); + final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), + replicaNode3.operDataStore(), null, null); RpcResult rpcResult = service3.removeAllShardReplicas( new RemoveAllShardReplicasInputBuilder().setMemberName("member-3").build()).get(10, TimeUnit.SECONDS); @@ -824,13 +626,13 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to change voting status - ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null); + final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), + replicaNode3.operDataStore(), null, null); RpcResult rpcResult = service3 .changeMemberVotingStatesForShard(new ChangeMemberVotingStatesForShardInputBuilder() .setShardName("cars").setDataStoreType(DataStoreType.Config) - .setMemberVotingState(ImmutableList.of( + .setMemberVotingState(List.of( new MemberVotingStateBuilder().setMemberName("member-2").setVoting(FALSE).build(), new MemberVotingStateBuilder().setMemberName("member-3").setVoting(FALSE).build())) .build()) @@ -858,14 +660,16 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to change voting status - ClusterAdminRpcService service = new ClusterAdminRpcService(leaderNode.configDataStore(), - leaderNode.operDataStore(), null); + final ClusterAdminRpcService service = new ClusterAdminRpcService(leaderNode.configDataStore(), + leaderNode.operDataStore(), null, null); RpcResult rpcResult = service .changeMemberVotingStatesForShard(new ChangeMemberVotingStatesForShardInputBuilder() .setShardName("cars").setDataStoreType(DataStoreType.Config) - .setMemberVotingState(ImmutableList - .of(new MemberVotingStateBuilder().setMemberName("member-1").setVoting(FALSE).build())) + .setMemberVotingState(List.of(new MemberVotingStateBuilder() + .setMemberName("member-1") + .setVoting(FALSE) + .build())) .build()) .get(10, TimeUnit.SECONDS); verifyFailedRpcResult(rpcResult); @@ -898,11 +702,11 @@ public class ClusterAdminRpcServiceTest { // Invoke RPC service on member-3 to change voting status - ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null); + final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), + replicaNode3.operDataStore(), null, null); RpcResult rpcResult = service3.changeMemberVotingStatesForAllShards( - new ChangeMemberVotingStatesForAllShardsInputBuilder().setMemberVotingState(ImmutableList.of( + new ChangeMemberVotingStatesForAllShardsInputBuilder().setMemberVotingState(List.of( new MemberVotingStateBuilder().setMemberName("member-2").setVoting(FALSE).build(), new MemberVotingStateBuilder().setMemberName("member-3").setVoting(FALSE).build())).build()) .get(10, TimeUnit.SECONDS); @@ -923,7 +727,7 @@ public class ClusterAdminRpcServiceTest { public void testFlipMemberVotingStates() throws Exception { String name = "testFlipMemberVotingStates"; - ServerConfigurationPayload persistedServerConfig = new ServerConfigurationPayload(Arrays.asList( + ServerConfigurationPayload persistedServerConfig = new ServerConfigurationPayload(List.of( new ServerInfo("member-1", true), new ServerInfo("member-2", true), new ServerInfo("member-3", false))); @@ -950,8 +754,8 @@ public class ClusterAdminRpcServiceTest { verifyVotingStates(leaderNode1.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), new SimpleEntry<>("member-2", TRUE), new SimpleEntry<>("member-3", FALSE)); - ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), - replicaNode3.operDataStore(), null); + final ClusterAdminRpcService service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), + replicaNode3.operDataStore(), null, null); RpcResult rpcResult = service3.flipMemberVotingStatesForAllShards( new FlipMemberVotingStatesForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); @@ -1012,7 +816,7 @@ public class ClusterAdminRpcServiceTest { // Members 1, 2, and 3 are initially started up as non-voting. Members 4, 5, and 6 are initially // non-voting and simulated as down by not starting them up. - ServerConfigurationPayload persistedServerConfig = new ServerConfigurationPayload(Arrays.asList( + ServerConfigurationPayload persistedServerConfig = new ServerConfigurationPayload(List.of( new ServerInfo("member-1", false), new ServerInfo("member-2", false), new ServerInfo("member-3", false), new ServerInfo("member-4", true), new ServerInfo("member-5", true), new ServerInfo("member-6", true))); @@ -1045,8 +849,8 @@ public class ClusterAdminRpcServiceTest { verifyRaftState(replicaNode1.configDataStore(), "cars", raftState -> assertEquals("Expected raft state", RaftState.Follower.toString(), raftState.getRaftState())); - ClusterAdminRpcService service1 = new ClusterAdminRpcService(replicaNode1.configDataStore(), - replicaNode1.operDataStore(), null); + final ClusterAdminRpcService service1 = new ClusterAdminRpcService(replicaNode1.configDataStore(), + replicaNode1.operDataStore(), null, null); RpcResult rpcResult = service1.flipMemberVotingStatesForAllShards( new FlipMemberVotingStatesForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); @@ -1084,7 +888,7 @@ public class ClusterAdminRpcServiceTest { String name = "testFlipMemberVotingStatesWithVotingMembersDown"; // Members 4, 5, and 6 are initially non-voting and simulated as down by not starting them up. - ServerConfigurationPayload persistedServerConfig = new ServerConfigurationPayload(Arrays.asList( + ServerConfigurationPayload persistedServerConfig = new ServerConfigurationPayload(List.of( new ServerInfo("member-1", true), new ServerInfo("member-2", true), new ServerInfo("member-3", true), new ServerInfo("member-4", false), new ServerInfo("member-5", false), new ServerInfo("member-6", false))); @@ -1112,8 +916,8 @@ public class ClusterAdminRpcServiceTest { new SimpleEntry<>("member-4", FALSE), new SimpleEntry<>("member-5", FALSE), new SimpleEntry<>("member-6", FALSE)); - ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), - leaderNode1.operDataStore(), null); + final ClusterAdminRpcService service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), + leaderNode1.operDataStore(), null, null); RpcResult rpcResult = service1.flipMemberVotingStatesForAllShards( new FlipMemberVotingStatesForAllShardsInputBuilder().build()).get(10, TimeUnit.SECONDS); @@ -1151,7 +955,7 @@ public class ClusterAdminRpcServiceTest { type + datastoreTypeSuffix).toString(), info.isVoting())); } - String shardID = ShardIdentifier.create(shard, MemberName.forName(member), + final String shardID = ShardIdentifier.create(shard, MemberName.forName(member), type + datastoreTypeSuffix).toString(); InMemoryJournal.addEntry(shardID, 1, new UpdateElectionTerm(1, null)); InMemoryJournal.addEntry(shardID, 2, new SimpleReplicatedLogEntry(0, 1, @@ -1190,18 +994,19 @@ public class ClusterAdminRpcServiceTest { }); } - private static void verifyShardResults(final List shardResults, final ShardResult... expShardResults) { + private static void verifyShardResults(final Map shardResults, + final ShardResult... expShardResults) { Map expResultsMap = new HashMap<>(); for (ShardResult r: expShardResults) { expResultsMap.put(r.getShardName() + "-" + r.getDataStoreType(), r); } - for (ShardResult result: shardResults) { + for (ShardResult result: shardResults.values()) { ShardResult exp = expResultsMap.remove(result.getShardName() + "-" + result.getDataStoreType()); assertNotNull(String.format("Unexpected result for shard %s, type %s", result.getShardName(), result.getDataStoreType()), exp); - assertEquals("isSucceeded", exp.isSucceeded(), result.isSucceeded()); - if (exp.isSucceeded()) { + assertEquals("isSucceeded", exp.getSucceeded(), result.getSucceeded()); + if (exp.getSucceeded()) { assertNull("Expected null error message", result.getErrorMessage()); } else { assertNotNull("Expected error message", result.getErrorMessage());