From f7e271e7b70d21fce365d017a12a452593d58fb4 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 12 Mar 2024 17:03:59 +0100 Subject: [PATCH] Specialize tests to ClientBackedDataStore We have only one subclass of AbstractDataStore, use that instead of AbstractDataStore. Change-Id: Ia6552b1c050fb99e3084c2d8f5c36ea052e991be Signed-off-by: Robert Varga --- .../admin/ClusterAdminRpcServiceTest.java | 326 +++++++++--------- .../ConcurrentDOMDataBrokerTest.java | 5 +- ...ctDistributedDataStoreIntegrationTest.java | 77 ++--- .../DataTreeCohortIntegrationTest.java | 14 +- .../DistributedDataStoreIntegrationTest.java | 13 +- ...butedDataStoreRemotingIntegrationTest.java | 47 ++- ...reWithSegmentedJournalIntegrationTest.java | 8 +- .../cluster/datastore/IntegrationTestKit.java | 65 ++-- .../cluster/datastore/MemberNode.java | 20 +- .../shardmanager/ShardManagerTest.java | 13 +- 10 files changed, 282 insertions(+), 306 deletions(-) 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 ce0a5367e2..2239908877 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 @@ -9,6 +9,7 @@ package org.opendaylight.controller.cluster.datastore.admin; import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; +import static java.util.Objects.requireNonNull; import static org.hamcrest.CoreMatchers.anyOf; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; @@ -26,18 +27,14 @@ import akka.actor.ActorRef; import akka.actor.PoisonPill; import akka.actor.Status.Success; import akka.cluster.Cluster; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import java.io.File; import java.nio.file.Files; -import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; 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; @@ -46,6 +43,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.cluster.access.concepts.MemberName; +import org.opendaylight.controller.cluster.databroker.ClientBackedDataStore; import org.opendaylight.controller.cluster.datastore.AbstractDataStore; import org.opendaylight.controller.cluster.datastore.DatastoreContext; import org.opendaylight.controller.cluster.datastore.MemberNode; @@ -63,29 +61,23 @@ 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.md.cluster.datastore.model.CarsModel; -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.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.BackupDatastoreInputBuilder; 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.ChangeMemberVotingStatesForShardInputBuilder; 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.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.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.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; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; /** * Unit tests for ClusterAdminRpcService. @@ -93,6 +85,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * @author Thomas Pantelis */ public class ClusterAdminRpcServiceTest { + record ExpState(String name, boolean voting) { + ExpState { + requireNonNull(name); + } + } + private static final MemberName MEMBER_1 = MemberName.forName("member-1"); private static final MemberName MEMBER_2 = MemberName.forName("member-2"); private static final MemberName MEMBER_3 = MemberName.forName("member-3"); @@ -106,17 +104,20 @@ public class ClusterAdminRpcServiceTest { @After public void tearDown() { - for (MemberNode m : Lists.reverse(memberNodes)) { - m.cleanup(); + for (var member : Lists.reverse(memberNodes)) { + member.cleanup(); } memberNodes.clear(); } @Test public void testBackupDatastore() throws Exception { - MemberNode node = MemberNode.builder(memberNodes).akkaConfig("Member1") - .moduleShardsConfig("module-shards-member1.conf").waitForShardLeader("cars", "people") - .testName("testBackupDatastore").build(); + final var node = MemberNode.builder(memberNodes) + .akkaConfig("Member1") + .moduleShardsConfig("module-shards-member1.conf") + .waitForShardLeader("cars", "people") + .testName("testBackupDatastore") + .build(); final var fileName = "target/testBackupDatastore"; final var file = new File(fileName); @@ -129,11 +130,12 @@ public class ClusterAdminRpcServiceTest { verifySuccessfulRpcResult(rpcResult); try (var fis = Files.newInputStream(file.toPath())) { - List snapshots = SerializationUtils.deserialize(fis); + final List snapshots = SerializationUtils.deserialize(fis); assertEquals("DatastoreSnapshot size", 2, snapshots.size()); - ImmutableMap map = ImmutableMap.of(snapshots.get(0).getType(), snapshots.get(0), - snapshots.get(1).getType(), snapshots.get(1)); + final var map = Map.of( + snapshots.get(0).getType(), snapshots.get(0), + snapshots.get(1).getType(), snapshots.get(1)); verifyDatastoreSnapshot(node.configDataStore().getActorUtils().getDataStoreName(), map.get(node.configDataStore().getActorUtils().getDataStoreName()), "cars", "people"); } finally { @@ -145,7 +147,7 @@ public class ClusterAdminRpcServiceTest { node.configDataStore().getActorUtils().getShardManager().tell(node.datastoreContextBuilder() .shardInitializationTimeout(200, TimeUnit.MILLISECONDS).build(), ActorRef.noSender()); - ActorRef carsShardActor = node.configDataStore().getActorUtils().findLocalShard("cars").orElseThrow(); + final var carsShardActor = node.configDataStore().getActorUtils().findLocalShard("cars").orElseThrow(); node.kit().watch(carsShardActor); carsShardActor.tell(PoisonPill.getInstance(), ActorRef.noSender()); node.kit().expectTerminated(carsShardActor); @@ -159,9 +161,9 @@ public class ClusterAdminRpcServiceTest { private static void verifyDatastoreSnapshot(final String type, final DatastoreSnapshot datastoreSnapshot, final String... expShardNames) { assertNotNull("Missing DatastoreSnapshot for type " + type, datastoreSnapshot); - Set shardNames = new HashSet<>(); - for (DatastoreSnapshot.ShardSnapshot s: datastoreSnapshot.getShardSnapshots()) { - shardNames.add(s.getName()); + var shardNames = new HashSet(); + for (var snapshot : datastoreSnapshot.getShardSnapshots()) { + shardNames.add(snapshot.getName()); } assertEquals("DatastoreSnapshot shard names", Set.of(expShardNames), shardNames); @@ -172,7 +174,7 @@ public class ClusterAdminRpcServiceTest { String name = "testGetPrefixShardRole"; String moduleShardsConfig = "module-shards-default-member-1.conf"; - final MemberNode member1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var member1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); member1.kit().waitUntilLeader(member1.configDataStore().getActorUtils(), "default"); @@ -183,11 +185,11 @@ public class ClusterAdminRpcServiceTest { String name = "testModuleShardLeaderMovement"; String moduleShardsConfig = "module-shards-member1.conf"; - final MemberNode member1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var member1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .waitForShardLeader("cars").moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); member1.waitForMembersUp("member-2", "member-3"); @@ -223,17 +225,17 @@ public class ClusterAdminRpcServiceTest { public void testAddShardReplica() throws Exception { String name = "testAddShardReplica"; String moduleShardsConfig = "module-shards-cars-member-1.conf"; - MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig(moduleShardsConfig).waitForShardLeader("cars").build(); - MemberNode newReplicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) + final var newReplicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.waitForMembersUp("member-2"); doAddShardReplica(newReplicaNode2, "cars", "member-1"); - MemberNode newReplicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + var newReplicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.waitForMembersUp("member-3"); @@ -245,7 +247,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 var configCarsNode = writeCarsNodeAndVerify(newReplicaNode2.configDataStore(), newReplicaNode3.configDataStore()); // Write data to member-3's oper datastore and read/verify via member-2 @@ -283,7 +285,7 @@ public class ClusterAdminRpcServiceTest { @Test public void testAddShardReplicaFailures() throws Exception { String name = "testAddShardReplicaFailures"; - MemberNode memberNode = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var memberNode = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig("module-shards-cars-member-1.conf").build(); final var service = new ClusterAdminRpcService(memberNode.configDataStore(), memberNode.operDataStore(), null); @@ -305,15 +307,14 @@ public class ClusterAdminRpcServiceTest { verifyFailedRpcResult(rpcResult); } - private static NormalizedNode writeCarsNodeAndVerify(final AbstractDataStore writeToStore, + private static ContainerNode writeCarsNodeAndVerify(final AbstractDataStore writeToStore, final AbstractDataStore readFromStore) throws Exception { - DOMStoreWriteTransaction writeTx = writeToStore.newWriteOnlyTransaction(); - NormalizedNode carsNode = CarsModel.create(); + final var writeTx = writeToStore.newWriteOnlyTransaction(); + final var carsNode = CarsModel.create(); writeTx.write(CarsModel.BASE_PATH, carsNode); - DOMStoreThreePhaseCommitCohort cohort = writeTx.ready(); - Boolean canCommit = cohort.canCommit().get(7, TimeUnit.SECONDS); - assertEquals("canCommit", TRUE, canCommit); + final var cohort = writeTx.ready(); + assertEquals("canCommit", TRUE, cohort.canCommit().get(7, TimeUnit.SECONDS)); cohort.preCommit().get(5, TimeUnit.SECONDS); cohort.commit().get(5, TimeUnit.SECONDS); @@ -322,10 +323,9 @@ public class ClusterAdminRpcServiceTest { } private static void readCarsNodeAndVerify(final AbstractDataStore readFromStore, - final NormalizedNode expCarsNode) throws Exception { - Optional optional = readFromStore.newReadOnlyTransaction().read(CarsModel.BASE_PATH) - .get(15, TimeUnit.SECONDS); - assertEquals("Data node", Optional.of(expCarsNode), optional); + final ContainerNode expCarsNode) throws Exception { + assertEquals(Optional.of(expCarsNode), + readFromStore.newReadOnlyTransaction().read(CarsModel.BASE_PATH).get(15, TimeUnit.SECONDS)); } private static void doAddShardReplica(final MemberNode memberNode, final String shardName, @@ -342,8 +342,7 @@ public class ClusterAdminRpcServiceTest { verifyRaftPeersPresent(memberNode.configDataStore(), shardName, peerMemberNames); - Optional optional = memberNode.operDataStore().getActorUtils().findLocalShard(shardName); - assertFalse("Oper shard present", optional.isPresent()); + assertEquals(Optional.empty(), memberNode.operDataStore().getActorUtils().findLocalShard(shardName)); rpcResult = service.addShardReplica(new AddShardReplicaInputBuilder() .setShardName(shardName) @@ -371,8 +370,9 @@ public class ClusterAdminRpcServiceTest { private static T verifySuccessfulRpcResult(final RpcResult rpcResult) { if (!rpcResult.isSuccessful()) { - if (rpcResult.getErrors().size() > 0) { - RpcError error = Iterables.getFirst(rpcResult.getErrors(), null); + final var errors = rpcResult.getErrors(); + if (errors.size() > 0) { + final var error = errors.get(0); throw new AssertionError("Rpc failed with error: " + error, error.getCause()); } @@ -384,8 +384,9 @@ public class ClusterAdminRpcServiceTest { private static void verifyFailedRpcResult(final RpcResult rpcResult) { assertFalse("RpcResult", rpcResult.isSuccessful()); - assertEquals("RpcResult errors size", 1, rpcResult.getErrors().size()); - RpcError error = Iterables.getFirst(rpcResult.getErrors(), null); + final var errors = rpcResult.getErrors(); + assertEquals("RpcResult errors size", 1, errors.size()); + final var error = errors.get(0); assertNotNull("RpcResult error message null", error.getMessage()); } @@ -393,15 +394,15 @@ public class ClusterAdminRpcServiceTest { public void testRemoveShardReplica() throws Exception { String name = "testRemoveShardReplica"; String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var 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) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.configDataStore().waitTillReady(); @@ -430,7 +431,7 @@ public class ClusterAdminRpcServiceTest { Cluster.get(leaderNode1.kit().getSystem()).down(Cluster.get(replicaNode2.kit().getSystem()).selfAddress()); replicaNode2.cleanup(); - MemberNode newPeplicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) + final var newPeplicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); newPeplicaNode2.configDataStore().waitTillReady(); @@ -456,15 +457,15 @@ public class ClusterAdminRpcServiceTest { public void testRemoveShardLeaderReplica() throws Exception { String name = "testRemoveShardLeaderReplica"; String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var 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) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.configDataStore().waitTillReady(); @@ -500,17 +501,17 @@ public class ClusterAdminRpcServiceTest { public void testAddReplicasForAllShards() throws Exception { String name = "testAddReplicasForAllShards"; String moduleShardsConfig = "module-shards-member1.conf"; - MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig(moduleShardsConfig).waitForShardLeader("cars", "people").build(); - ModuleShardConfiguration petsModuleConfig = new ModuleShardConfiguration( - XMLNamespace.of("pets-ns"), "pets-module", "pets", null, List.of(MEMBER_1)); + final var 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); leaderNode1.kit().waitUntilLeader(leaderNode1.configDataStore().getActorUtils(), "pets"); - MemberNode newReplicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) + final var newReplicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.waitForMembersUp("member-2"); @@ -520,11 +521,10 @@ public class ClusterAdminRpcServiceTest { new CreateShard(petsModuleConfig, Shard.builder(), null), newReplicaNode2.kit().getRef()); newReplicaNode2.kit().expectMsgClass(Success.class); - newReplicaNode2.operDataStore().getActorUtils().getShardManager().tell( - 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.operDataStore().getActorUtils().getShardManager() + .tell(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); final var service = new ClusterAdminRpcService(newReplicaNode2.configDataStore(), @@ -532,7 +532,7 @@ public class ClusterAdminRpcServiceTest { var rpcResult = service.addReplicasForAllShards(new AddReplicasForAllShardsInputBuilder().build()) .get(10, TimeUnit.SECONDS); - AddReplicasForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); + final var result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), successShardResult("pets", DataStoreType.Config), @@ -551,15 +551,15 @@ public class ClusterAdminRpcServiceTest { public void testRemoveAllShardReplicas() throws Exception { String name = "testRemoveAllShardReplicas"; String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var 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) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.configDataStore().waitTillReady(); @@ -567,8 +567,8 @@ public class ClusterAdminRpcServiceTest { verifyRaftPeersPresent(replicaNode2.configDataStore(), "cars", "member-1", "member-3"); verifyRaftPeersPresent(replicaNode3.configDataStore(), "cars", "member-1", "member-2"); - ModuleShardConfiguration petsModuleConfig = new ModuleShardConfiguration(XMLNamespace.of("pets-ns"), - "pets-module", "pets", null, List.of(MEMBER_1, MEMBER_2, MEMBER_3)); + final var 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); @@ -591,7 +591,7 @@ public class ClusterAdminRpcServiceTest { var rpcResult = service3.removeAllShardReplicas( new RemoveAllShardReplicasInputBuilder().setMemberName("member-3").build()) .get(10, TimeUnit.SECONDS); - RemoveAllShardReplicasOutput result = verifySuccessfulRpcResult(rpcResult); + final var result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), successShardResult("pets", DataStoreType.Config), @@ -613,15 +613,15 @@ public class ClusterAdminRpcServiceTest { public void testChangeMemberVotingStatesForShard() throws Exception { String name = "testChangeMemberVotingStatusForShard"; String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var 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) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.configDataStore().waitTillReady(); @@ -644,19 +644,19 @@ public class ClusterAdminRpcServiceTest { .get(10, TimeUnit.SECONDS); verifySuccessfulRpcResult(rpcResult); - verifyVotingStates(leaderNode1.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), - new SimpleEntry<>("member-2", FALSE), new SimpleEntry<>("member-3", FALSE)); - verifyVotingStates(replicaNode2.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), - new SimpleEntry<>("member-2", FALSE), new SimpleEntry<>("member-3", FALSE)); - verifyVotingStates(replicaNode3.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), - new SimpleEntry<>("member-2", FALSE), new SimpleEntry<>("member-3", FALSE)); + verifyVotingStates(leaderNode1.configDataStore(), "cars", + new ExpState("member-1", true), new ExpState("member-2", false), new ExpState("member-3", false)); + verifyVotingStates(replicaNode2.configDataStore(), "cars", + new ExpState("member-1", true), new ExpState("member-2", false), new ExpState("member-3", false)); + verifyVotingStates(replicaNode3.configDataStore(), "cars", + new ExpState("member-1", true), new ExpState("member-2", false), new ExpState("member-3", false)); } @Test public void testChangeMemberVotingStatesForSingleNodeShard() throws Exception { String name = "testChangeMemberVotingStatesForSingleNodeShard"; String moduleShardsConfig = "module-shards-member1.conf"; - MemberNode leaderNode = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var leaderNode = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig(moduleShardsConfig).datastoreContextBuilder( DatastoreContext.newBuilder().shardHeartbeatIntervalInMillis(300).shardElectionTimeoutFactor(1)) .build(); @@ -678,14 +678,14 @@ public class ClusterAdminRpcServiceTest { .get(10, TimeUnit.SECONDS); verifyFailedRpcResult(rpcResult); - verifyVotingStates(leaderNode.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE)); + verifyVotingStates(leaderNode.configDataStore(), "cars", new ExpState("member-1", true)); } @Test public void testChangeMemberVotingStatesForAllShards() throws Exception { String name = "testChangeMemberVotingStatesForAllShards"; String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes) + final var leaderNode1 = MemberNode.builder(memberNodes) .akkaConfig("Member1") .testName(name) .moduleShardsConfig(moduleShardsConfig) @@ -694,10 +694,10 @@ public class ClusterAdminRpcServiceTest { .shardElectionTimeoutFactor(1)) .build(); - final MemberNode replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.configDataStore().waitTillReady(); @@ -726,43 +726,43 @@ public class ClusterAdminRpcServiceTest { successShardResult("cars", DataStoreType.Operational), successShardResult("people", DataStoreType.Operational)); - verifyVotingStates(new AbstractDataStore[]{leaderNode1.configDataStore(), leaderNode1.operDataStore(), - replicaNode2.configDataStore(), replicaNode2.operDataStore(), - replicaNode3.configDataStore(), replicaNode3.operDataStore()}, - new String[]{"cars", "people"}, new SimpleEntry<>("member-1", TRUE), - new SimpleEntry<>("member-2", FALSE), new SimpleEntry<>("member-3", FALSE)); + verifyVotingStates(new ClientBackedDataStore[] { + leaderNode1.configDataStore(), leaderNode1.operDataStore(), + replicaNode2.configDataStore(), replicaNode2.operDataStore(), + replicaNode3.configDataStore(), replicaNode3.operDataStore() + }, new String[] { "cars", "people" }, + new ExpState("member-1", true), new ExpState("member-2", false), new ExpState("member-3", false)); } @Test public void testFlipMemberVotingStates() throws Exception { String name = "testFlipMemberVotingStates"; - ServerConfigurationPayload persistedServerConfig = new ServerConfigurationPayload(List.of( - new ServerInfo("member-1", true), new ServerInfo("member-2", true), - new ServerInfo("member-3", false))); + final var persistedServerConfig = new ServerConfigurationPayload(List.of( + new ServerInfo("member-1", true), new ServerInfo("member-2", true), new ServerInfo("member-3", false))); setupPersistedServerConfigPayload(persistedServerConfig, "member-1", name, "cars", "people"); setupPersistedServerConfigPayload(persistedServerConfig, "member-2", name, "cars", "people"); setupPersistedServerConfigPayload(persistedServerConfig, "member-3", name, "cars", "people"); String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) .moduleShardsConfig(moduleShardsConfig).datastoreContextBuilder(DatastoreContext.newBuilder() .shardHeartbeatIntervalInMillis(100).shardElectionTimeoutFactor(10)) .build(); - final MemberNode replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.configDataStore().waitTillReady(); leaderNode1.operDataStore().waitTillReady(); replicaNode3.configDataStore().waitTillReady(); replicaNode3.operDataStore().waitTillReady(); - verifyVotingStates(leaderNode1.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), - new SimpleEntry<>("member-2", TRUE), new SimpleEntry<>("member-3", FALSE)); + verifyVotingStates(leaderNode1.configDataStore(), "cars", + new ExpState("member-1", true), new ExpState("member-2", true), new ExpState("member-3", false)); final var service3 = new ClusterAdminRpcService(replicaNode3.configDataStore(), replicaNode3.operDataStore(), null); @@ -770,18 +770,18 @@ public class ClusterAdminRpcServiceTest { var rpcResult = service3.flipMemberVotingStatesForAllShards( new FlipMemberVotingStatesForAllShardsInputBuilder().build()) .get(10, TimeUnit.SECONDS); - FlipMemberVotingStatesForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); + var result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), successShardResult("cars", DataStoreType.Operational), successShardResult("people", DataStoreType.Operational)); - verifyVotingStates(new AbstractDataStore[]{leaderNode1.configDataStore(), leaderNode1.operDataStore(), - replicaNode2.configDataStore(), replicaNode2.operDataStore(), - replicaNode3.configDataStore(), replicaNode3.operDataStore()}, - new String[]{"cars", "people"}, - new SimpleEntry<>("member-1", FALSE), new SimpleEntry<>("member-2", FALSE), - new SimpleEntry<>("member-3", TRUE)); + verifyVotingStates(new ClientBackedDataStore[] { + leaderNode1.configDataStore(), leaderNode1.operDataStore(), + replicaNode2.configDataStore(), replicaNode2.operDataStore(), + replicaNode3.configDataStore(), replicaNode3.operDataStore() + }, new String[] { "cars", "people" }, + new ExpState("member-1", false), new ExpState("member-2", false), new ExpState("member-3", true)); // Leadership should have transferred to member 3 since it is the only remaining voting member. verifyRaftState(leaderNode1.configDataStore(), "cars", raftState -> { @@ -807,12 +807,12 @@ public class ClusterAdminRpcServiceTest { successShardResult("cars", DataStoreType.Operational), successShardResult("people", DataStoreType.Operational)); - verifyVotingStates(new AbstractDataStore[]{leaderNode1.configDataStore(), leaderNode1.operDataStore(), - replicaNode2.configDataStore(), replicaNode2.operDataStore(), - replicaNode3.configDataStore(), replicaNode3.operDataStore()}, - new String[]{"cars", "people"}, - new SimpleEntry<>("member-1", TRUE), new SimpleEntry<>("member-2", TRUE), - new SimpleEntry<>("member-3", FALSE)); + verifyVotingStates(new ClientBackedDataStore[] { + leaderNode1.configDataStore(), leaderNode1.operDataStore(), + replicaNode2.configDataStore(), replicaNode2.operDataStore(), + replicaNode3.configDataStore(), replicaNode3.operDataStore() + }, new String[] { "cars", "people" }, + new ExpState("member-1", true), new ExpState("member-2", true), new ExpState("member-3", false)); // Leadership should have transferred to member 1 or 2. verifyRaftState(leaderNode1.configDataStore(), "cars", raftState -> { @@ -828,7 +828,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(List.of( + final var 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))); @@ -838,25 +838,24 @@ public class ClusterAdminRpcServiceTest { setupPersistedServerConfigPayload(persistedServerConfig, "member-3", name, "cars", "people"); String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode replicaNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var replicaNode1 = 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) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); // Initially there won't be a leader b/c all the up nodes are non-voting. replicaNode1.waitForMembersUp("member-2", "member-3"); - verifyVotingStates(replicaNode1.configDataStore(), "cars", new SimpleEntry<>("member-1", FALSE), - new SimpleEntry<>("member-2", FALSE), new SimpleEntry<>("member-3", FALSE), - new SimpleEntry<>("member-4", TRUE), new SimpleEntry<>("member-5", TRUE), - new SimpleEntry<>("member-6", TRUE)); + verifyVotingStates(replicaNode1.configDataStore(), "cars", + new ExpState("member-1", false), new ExpState("member-2", false), new ExpState("member-3", false), + new ExpState("member-4", true), new ExpState("member-5", true), new ExpState("member-6", true)); verifyRaftState(replicaNode1.configDataStore(), "cars", raftState -> assertEquals("Expected raft state", RaftState.Follower.toString(), raftState.getRaftState())); @@ -864,22 +863,22 @@ public class ClusterAdminRpcServiceTest { final var service1 = new ClusterAdminRpcService(replicaNode1.configDataStore(), replicaNode1.operDataStore(), null); - var rpcResult = service1.flipMemberVotingStatesForAllShards( + final var rpcResult = service1.flipMemberVotingStatesForAllShards( new FlipMemberVotingStatesForAllShardsInputBuilder().build()) .get(10, TimeUnit.SECONDS); - FlipMemberVotingStatesForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); + final var result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), successShardResult("cars", DataStoreType.Operational), successShardResult("people", DataStoreType.Operational)); - verifyVotingStates(new AbstractDataStore[]{replicaNode1.configDataStore(), replicaNode1.operDataStore(), - replicaNode2.configDataStore(), replicaNode2.operDataStore(), - replicaNode3.configDataStore(), replicaNode3.operDataStore()}, - new String[]{"cars", "people"}, - new SimpleEntry<>("member-1", TRUE), new SimpleEntry<>("member-2", TRUE), - new SimpleEntry<>("member-3", TRUE), new SimpleEntry<>("member-4", FALSE), - new SimpleEntry<>("member-5", FALSE), new SimpleEntry<>("member-6", FALSE)); + verifyVotingStates(new ClientBackedDataStore[] { + replicaNode1.configDataStore(), replicaNode1.operDataStore(), + replicaNode2.configDataStore(), replicaNode2.operDataStore(), + replicaNode3.configDataStore(), replicaNode3.operDataStore() + }, new String[] { "cars", "people" }, + new ExpState("member-1", true), new ExpState("member-2", true), new ExpState("member-3", true), + new ExpState("member-4", false), new ExpState("member-5", false), new ExpState("member-6", false)); // Since member 1 was changed to voting and there was no leader, it should've started and election // and become leader @@ -901,7 +900,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(List.of( + final var 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))); @@ -911,23 +910,22 @@ public class ClusterAdminRpcServiceTest { setupPersistedServerConfigPayload(persistedServerConfig, "member-3", name, "cars", "people"); String moduleShardsConfig = "module-shards-member1-and-2-and-3.conf"; - final MemberNode leaderNode1 = MemberNode.builder(memberNodes).akkaConfig("Member1").testName(name) + final var 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) + final var replicaNode2 = MemberNode.builder(memberNodes).akkaConfig("Member2").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); - final MemberNode replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) + final var replicaNode3 = MemberNode.builder(memberNodes).akkaConfig("Member3").testName(name) .moduleShardsConfig(moduleShardsConfig).build(); leaderNode1.configDataStore().waitTillReady(); leaderNode1.operDataStore().waitTillReady(); - verifyVotingStates(leaderNode1.configDataStore(), "cars", new SimpleEntry<>("member-1", TRUE), - new SimpleEntry<>("member-2", TRUE), new SimpleEntry<>("member-3", TRUE), - new SimpleEntry<>("member-4", FALSE), new SimpleEntry<>("member-5", FALSE), - new SimpleEntry<>("member-6", FALSE)); + verifyVotingStates(leaderNode1.configDataStore(), "cars", + new ExpState("member-1", true), new ExpState("member-2", true), new ExpState("member-3", true), + new ExpState("member-4", false), new ExpState("member-5", false), new ExpState("member-6", false)); final var service1 = new ClusterAdminRpcService(leaderNode1.configDataStore(), leaderNode1.operDataStore(), null); @@ -935,20 +933,20 @@ public class ClusterAdminRpcServiceTest { final var rpcResult = service1.flipMemberVotingStatesForAllShards( new FlipMemberVotingStatesForAllShardsInputBuilder().build()) .get(10, TimeUnit.SECONDS); - FlipMemberVotingStatesForAllShardsOutput result = verifySuccessfulRpcResult(rpcResult); + final var result = verifySuccessfulRpcResult(rpcResult); verifyShardResults(result.getShardResult(), successShardResult("cars", DataStoreType.Config), successShardResult("people", DataStoreType.Config), successShardResult("cars", DataStoreType.Operational), successShardResult("people", DataStoreType.Operational)); // Members 2 and 3 are now non-voting but should get replicated with the new new server config. - verifyVotingStates(new AbstractDataStore[]{leaderNode1.configDataStore(), leaderNode1.operDataStore(), - replicaNode2.configDataStore(), replicaNode2.operDataStore(), - replicaNode3.configDataStore(), replicaNode3.operDataStore()}, - new String[]{"cars", "people"}, - new SimpleEntry<>("member-1", FALSE), new SimpleEntry<>("member-2", FALSE), - new SimpleEntry<>("member-3", FALSE), new SimpleEntry<>("member-4", TRUE), - new SimpleEntry<>("member-5", TRUE), new SimpleEntry<>("member-6", TRUE)); + verifyVotingStates(new ClientBackedDataStore[] { + leaderNode1.configDataStore(), leaderNode1.operDataStore(), + replicaNode2.configDataStore(), replicaNode2.operDataStore(), + replicaNode3.configDataStore(), replicaNode3.operDataStore() + }, new String[] { "cars", "people" }, + new ExpState("member-1", false), new ExpState("member-2", false), new ExpState("member-3", false), + new ExpState("member-4", true), new ExpState("member-5", true), new ExpState("member-6", true)); // The leader (member 1) was changed to non-voting but it shouldn't be able to step down as leader yet // b/c it can't get a majority consensus with all voting members down. So verify it remains the leader. @@ -960,11 +958,11 @@ public class ClusterAdminRpcServiceTest { private static void setupPersistedServerConfigPayload(final ServerConfigurationPayload serverConfig, final String member, final String datastoreTypeSuffix, final String... shards) { - String[] datastoreTypes = {"config_", "oper_"}; + String[] datastoreTypes = { "config_", "oper_" }; for (String type : datastoreTypes) { for (String shard : shards) { - List newServerInfo = new ArrayList<>(serverConfig.getServerConfig().size()); - for (ServerInfo info : serverConfig.getServerConfig()) { + final var newServerInfo = new ArrayList(serverConfig.getServerConfig().size()); + for (var info : serverConfig.getServerConfig()) { newServerInfo.add(new ServerInfo(ShardIdentifier.create(shard, MemberName.forName(info.peerId()), type + datastoreTypeSuffix).toString(), info.isVoting())); } @@ -978,45 +976,43 @@ public class ClusterAdminRpcServiceTest { } } - @SafeVarargs - private static void verifyVotingStates(final AbstractDataStore[] datastores, final String[] shards, - final SimpleEntry... expStates) throws Exception { - for (AbstractDataStore datastore: datastores) { - for (String shard: shards) { + private static void verifyVotingStates(final ClientBackedDataStore[] datastores, final String[] shards, + final ExpState... expStates) throws Exception { + for (var datastore : datastores) { + for (String shard : shards) { verifyVotingStates(datastore, shard, expStates); } } } - @SafeVarargs - private static void verifyVotingStates(final AbstractDataStore datastore, final String shardName, - final SimpleEntry... expStates) throws Exception { + private static void verifyVotingStates(final ClientBackedDataStore datastore, final String shardName, + final ExpState... expStates) throws Exception { String localMemberName = datastore.getActorUtils().getCurrentMemberName().getName(); - Map expStateMap = new HashMap<>(); - for (Entry e: expStates) { - expStateMap.put(ShardIdentifier.create(shardName, MemberName.forName(e.getKey()), - datastore.getActorUtils().getDataStoreName()).toString(), e.getValue()); + var expStateMap = new HashMap(); + for (var expState : expStates) { + expStateMap.put(ShardIdentifier.create(shardName, MemberName.forName(expState.name), + datastore.getActorUtils().getDataStoreName()).toString(), expState.voting); } verifyRaftState(datastore, shardName, raftState -> { String localPeerId = ShardIdentifier.create(shardName, MemberName.forName(localMemberName), datastore.getActorUtils().getDataStoreName()).toString(); assertEquals("Voting state for " + localPeerId, expStateMap.get(localPeerId), raftState.isVoting()); - for (Entry e: raftState.getPeerVotingStates().entrySet()) { - assertEquals("Voting state for " + e.getKey(), expStateMap.get(e.getKey()), e.getValue()); + for (var entry : raftState.getPeerVotingStates().entrySet()) { + assertEquals("Voting state for " + entry.getKey(), expStateMap.get(entry.getKey()), entry.getValue()); } }); } private static void verifyShardResults(final Map shardResults, final ShardResult... expShardResults) { - Map expResultsMap = new HashMap<>(); - for (ShardResult r: expShardResults) { + var expResultsMap = new HashMap(); + for (var r : expShardResults) { expResultsMap.put(r.getShardName() + "-" + r.getDataStoreType(), r); } - for (ShardResult result: shardResults.values()) { - ShardResult exp = expResultsMap.remove(result.getShardName() + "-" + result.getDataStoreType()); + for (var result : shardResults.values()) { + var 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.getSucceeded(), result.getSucceeded()); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java index 7bf6971822..630d582f0c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java @@ -46,7 +46,6 @@ import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; import org.mockito.stubbing.Answer; -import org.opendaylight.controller.cluster.datastore.AbstractDataStore; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; @@ -427,8 +426,8 @@ public class ConcurrentDOMDataBrokerTest { @Test public void testExtensions() { - final var mockConfigStore = mock(AbstractDataStore.class); - final var mockOperStore = mock(AbstractDataStore.class); + final var mockConfigStore = mock(ClientBackedDataStore.class); + final var mockOperStore = mock(ClientBackedDataStore.class); try (var dataBroker = new ConcurrentDOMDataBroker(ImmutableMap.of( LogicalDatastoreType.OPERATIONAL, mockOperStore, LogicalDatastoreType.CONFIGURATION, mockConfigStore), futureExecutor)) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java index 01acb3dd05..9f19ca045d 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java @@ -42,6 +42,7 @@ import org.junit.Ignore; import org.junit.Test; import org.junit.runners.Parameterized.Parameter; import org.opendaylight.controller.cluster.access.client.RequestTimeoutException; +import org.opendaylight.controller.cluster.databroker.ClientBackedDataStore; import org.opendaylight.controller.cluster.databroker.ConcurrentDOMDataBroker; import org.opendaylight.controller.cluster.datastore.TestShard.RequestFrontendMetadata; import org.opendaylight.controller.cluster.datastore.messages.FindLocalShard; @@ -83,9 +84,8 @@ import org.opendaylight.yangtools.yang.data.tree.impl.di.InMemoryDataTreeFactory import org.opendaylight.yangtools.yang.model.api.SchemaContext; public abstract class AbstractDistributedDataStoreIntegrationTest { - @Parameter - public Class testParameter; + public Class testParameter; protected ActorSystem system; @@ -99,8 +99,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testWriteTransactionWithSingleShard() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "transactionIntegrationTest", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "transactionIntegrationTest", "test-1")) { testKit.testWriteTransaction(dataStore, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); @@ -115,8 +114,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testWriteTransactionWithMultipleShards() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testWriteTransactionWithMultipleShards", "cars-1", "people-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testWriteTransactionWithMultipleShards", + "cars-1", "people-1")) { DOMStoreWriteTransaction writeTx = dataStore.newWriteOnlyTransaction(); assertNotNull("newWriteOnlyTransaction returned null", writeTx); @@ -156,8 +155,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testReadWriteTransactionWithSingleShard() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testReadWriteTransactionWithSingleShard", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testReadWriteTransactionWithSingleShard", + "test-1")) { // 1. Create a read-write Tx final DOMStoreReadWriteTransaction readWriteTx = dataStore.newReadWriteTransaction(); @@ -190,8 +189,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testReadWriteTransactionWithMultipleShards() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testReadWriteTransactionWithMultipleShards", "cars-1", "people-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testReadWriteTransactionWithMultipleShards", + "cars-1", "people-1")) { DOMStoreReadWriteTransaction readWriteTx = dataStore.newReadWriteTransaction(); assertNotNull("newReadWriteTransaction returned null", readWriteTx); @@ -236,8 +235,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testSingleTransactionsWritesInQuickSuccession() throws Exception { final var testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (var dataStore = testKit.setupAbstractDataStore(testParameter, - "testSingleTransactionsWritesInQuickSuccession", "cars-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testSingleTransactionsWritesInQuickSuccession", + "cars-1")) { final var txChain = dataStore.createTransactionChain(); @@ -301,8 +300,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { datastoreContextBuilder.shardHeartbeatIntervalInMillis(100).shardElectionTimeoutFactor(1) .shardInitializationTimeout(200, TimeUnit.MILLISECONDS).frontendRequestTimeoutInSeconds(2); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore(testParameter, testName, false, shardName)) { - + try (var dataStore = testKit.setupDataStore(testParameter, testName, false, shardName)) { final Object result = dataStore.getActorUtils().executeOperation( dataStore.getActorUtils().getShardManager(), new FindLocalShard(shardName, true)); assertTrue("Expected LocalShardFound. Actual: " + result, result instanceof LocalShardFound); @@ -378,8 +376,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testTransactionAbort() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "transactionAbortIntegrationTest", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "transactionAbortIntegrationTest", "test-1")) { final DOMStoreWriteTransaction writeTx = dataStore.newWriteOnlyTransaction(); assertNotNull("newWriteOnlyTransaction returned null", writeTx); @@ -401,8 +398,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @SuppressWarnings("checkstyle:IllegalCatch") public void testTransactionChainWithSingleShard() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testTransactionChainWithSingleShard", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testTransactionChainWithSingleShard", "test-1")) { // 1. Create a Tx chain and write-only Tx final DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); @@ -478,8 +474,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testTransactionChainWithMultipleShards() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testTransactionChainWithMultipleShards", "cars-1", "people-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testTransactionChainWithMultipleShards", + "cars-1", "people-1")) { final DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); @@ -534,8 +530,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testCreateChainedTransactionsInQuickSuccession() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testCreateChainedTransactionsInQuickSuccession", "cars-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testCreateChainedTransactionsInQuickSuccession", + "cars-1")) { final ConcurrentDOMDataBroker broker = new ConcurrentDOMDataBroker( ImmutableMap.builder() @@ -579,8 +575,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testCreateChainedTransactionAfterEmptyTxReadied() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testCreateChainedTransactionAfterEmptyTxReadied", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testCreateChainedTransactionAfterEmptyTxReadied", + "test-1")) { final DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); @@ -600,8 +596,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testCreateChainedTransactionWhenPreviousNotReady() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testCreateChainedTransactionWhenPreviousNotReady", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testCreateChainedTransactionWhenPreviousNotReady", + "test-1")) { final DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); @@ -620,8 +616,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testCreateChainedTransactionAfterClose() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testCreateChainedTransactionAfterClose", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testCreateChainedTransactionAfterClose", + "test-1")) { final DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); txChain.close(); @@ -635,8 +631,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testChainWithReadOnlyTxAfterPreviousReady() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testChainWithReadOnlyTxAfterPreviousReady", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testChainWithReadOnlyTxAfterPreviousReady", + "test-1")) { final DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); @@ -678,8 +674,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testChainedTransactionFailureWithSingleShard() throws Exception { final var testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (var dataStore = testKit.setupAbstractDataStore(testParameter, - "testChainedTransactionFailureWithSingleShard", "cars-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testChainedTransactionFailureWithSingleShard", + "cars-1")) { final var broker = new ConcurrentDOMDataBroker( ImmutableMap.builder() @@ -714,8 +710,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testChainedTransactionFailureWithMultipleShards() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testChainedTransactionFailureWithMultipleShards", "cars-1", "people-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testChainedTransactionFailureWithMultipleShards", + "cars-1", "people-1")) { final ConcurrentDOMDataBroker broker = new ConcurrentDOMDataBroker( ImmutableMap.builder() @@ -753,8 +749,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { @Test public void testDataTreeChangeListenerRegistration() throws Exception { final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testDataTreeChangeListenerRegistration", "test-1")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testDataTreeChangeListenerRegistration", + "test-1")) { testKit.testWriteTransaction(dataStore, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); @@ -835,8 +831,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { new DatastoreSnapshot.ShardSnapshot("cars", carsSnapshot), new DatastoreSnapshot.ShardSnapshot("people", peopleSnapshot))); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, name, "module-shards-member1.conf", true, "cars", "people")) { + try (var dataStore = testKit.setupDataStore(testParameter, name, "module-shards-member1.conf", true, + "cars", "people")) { final DOMStoreReadTransaction readTx = dataStore.newReadOnlyTransaction(); @@ -851,9 +847,8 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { // FIXME: re-enable this test public void testSnapshotOnRootOverwrite() throws Exception { final var testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder.snapshotOnRootOverwrite(true)); - try (var dataStore = testKit.setupAbstractDataStore( - testParameter, "testRootOverwrite", "module-shards-default-cars-member1.conf", - true, "cars", "default")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testRootOverwrite", + "module-shards-default-cars-member1.conf", true, "cars", "default")) { final var rootNode = Builders.containerBuilder() .withNodeIdentifier(NodeIdentifier.create(SchemaContext.NAME)) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java index 2af2b6f278..7eb534c334 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java @@ -98,8 +98,9 @@ public class DataTreeCohortIntegrationTest { ArgumentCaptor candidateCapt = ArgumentCaptor.forClass(Collection.class); IntegrationTestKit kit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (var dataStore = kit.setupAbstractDataStore(ClientBackedDataStore.class, - "testSuccessfulCanCommitWithNoopPostStep", "test-1")) { + try (var dataStore = kit.setupDataStore(ClientBackedDataStore.class, "testSuccessfulCanCommitWithNoopPostStep", + "test-1")) { + final var cohortReg = dataStore.registerCommitCohort(TEST_ID, cohort); assertNotNull(cohortReg); @@ -140,7 +141,7 @@ public class DataTreeCohortIntegrationTest { any(EffectiveModelContext.class), anyCollection()); final var kit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (var dataStore = kit.setupAbstractDataStore(ClientBackedDataStore.class, "testFailedCanCommit", "test-1")) { + try (var dataStore = kit.setupDataStore(ClientBackedDataStore.class, "testFailedCanCommit", "test-1")) { dataStore.registerCommitCohort(TEST_ID, failedCohort); IntegrationTestKit.verifyShardState(dataStore, "test-1", @@ -166,8 +167,9 @@ public class DataTreeCohortIntegrationTest { any(EffectiveModelContext.class), anyCollection()); final var kit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (var dataStore = kit.setupAbstractDataStore(ClientBackedDataStore.class, - "testCanCommitWithMultipleListEntries", "cars-1")) { + try (var dataStore = kit.setupDataStore(ClientBackedDataStore.class, "testCanCommitWithMultipleListEntries", + "cars-1")) { + final var cohortReg = dataStore.registerCommitCohort( new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, CarsModel.CAR_LIST_PATH .node(CarsModel.CAR_QNAME)), cohort); @@ -282,7 +284,7 @@ public class DataTreeCohortIntegrationTest { any(EffectiveModelContext.class), anyCollection()); var kit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); - try (var dataStore = kit.setupAbstractDataStore(ClientBackedDataStore.class, "testAbortAfterCanCommit", + try (var dataStore = kit.setupDataStore(ClientBackedDataStore.class, "testAbortAfterCanCommit", "test-1", "cars-1")) { dataStore.registerCommitCohort(TEST_ID, cohortToAbort); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java index 6f0a0f5b87..6815b2d367 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java @@ -87,9 +87,7 @@ public class DistributedDataStoreIntegrationTest extends AbstractDistributedData final CountDownLatch blockRecoveryLatch = new CountDownLatch(1); InMemoryJournal.addBlockReadMessagesLatch(persistentID, blockRecoveryLatch); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, testName, false, shardName)) { - + try (var dataStore = testKit.setupDataStore(testParameter, testName, false, shardName)) { // Create the write Tx final DOMStoreWriteTransaction writeTx = writeOnly ? dataStore.newWriteOnlyTransaction() : dataStore.newReadWriteTransaction(); @@ -183,9 +181,7 @@ public class DistributedDataStoreIntegrationTest extends AbstractDistributedData final CountDownLatch blockRecoveryLatch = new CountDownLatch(1); InMemoryJournal.addBlockReadMessagesLatch(persistentID, blockRecoveryLatch); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, testName, false, shardName)) { - + try (var dataStore = testKit.setupDataStore(testParameter, testName, false, shardName)) { // Create the read-write Tx final DOMStoreReadWriteTransaction readWriteTx = dataStore.newReadWriteTransaction(); assertNotNull("newReadWriteTransaction returned null", readWriteTx); @@ -251,7 +247,7 @@ public class DistributedDataStoreIntegrationTest extends AbstractDistributedData InMemoryJournal.addEntry(persistentID, 1, "Dummy data so akka will read from persistence"); - final AbstractDataStore dataStore = testKit.setupAbstractDataStore(testParameter, testName, false, shardName); + final var dataStore = testKit.setupDataStore(testParameter, testName, false, shardName); // Create the write Tx final DOMStoreWriteTransaction writeTx = dataStore.newWriteOnlyTransaction(); @@ -317,8 +313,7 @@ public class DistributedDataStoreIntegrationTest extends AbstractDistributedData InMemoryJournal.addEntry(persistentID, 1, "Dummy data so akka will read from persistence"); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore(testParameter, testName, false, shardName)) { - + try (var dataStore = testKit.setupDataStore(testParameter, testName, false, shardName)) { // Create the read-write Tx final DOMStoreReadWriteTransaction readWriteTx = dataStore.newReadWriteTransaction(); assertNotNull("newReadWriteTransaction returned null", readWriteTx); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java index 6fa7698e3f..738ff58382 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java @@ -66,6 +66,7 @@ import org.junit.runners.Parameterized.Parameters; import org.mockito.stubbing.Answer; import org.opendaylight.controller.cluster.access.client.RequestTimeoutException; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; +import org.opendaylight.controller.cluster.databroker.ClientBackedDataStore; import org.opendaylight.controller.cluster.databroker.ConcurrentDOMDataBroker; import org.opendaylight.controller.cluster.databroker.TestClientBackedDataStore; import org.opendaylight.controller.cluster.datastore.DatastoreContext.Builder; @@ -145,7 +146,7 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { } @Parameter(0) - public Class testParameter; + public Class testParameter; @Parameter(1) public int commitTimeout; @@ -175,8 +176,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { private final TransactionIdentifier tx1 = nextTransactionId(); private final TransactionIdentifier tx2 = nextTransactionId(); - private AbstractDataStore followerDistributedDataStore; - private AbstractDataStore leaderDistributedDataStore; + private ClientBackedDataStore followerDistributedDataStore; + private ClientBackedDataStore leaderDistributedDataStore; private IntegrationTestKit followerTestKit; private IntegrationTestKit leaderTestKit; @@ -231,11 +232,11 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { throws Exception { leaderTestKit = new IntegrationTestKit(leaderSystem, leaderBuilder, commitTimeout); - leaderDistributedDataStore = leaderTestKit.setupAbstractDataStore( - testParameter, type, moduleShardsConfig, false, shards); + leaderDistributedDataStore = leaderTestKit.setupDataStore(testParameter, type, moduleShardsConfig, false, + shards); followerTestKit = new IntegrationTestKit(followerSystem, followerBuilder, commitTimeout); - followerDistributedDataStore = followerTestKit.setupAbstractDataStore( + followerDistributedDataStore = followerTestKit.setupDataStore( testParameter, type, moduleShardsConfig, false, shards); leaderTestKit.waitUntilLeader(leaderDistributedDataStore.getActorUtils(), shards); @@ -340,9 +341,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { final ActorSystem newSystem = newActorSystem("reinstated-member2", "Member2"); - try (AbstractDataStore member2Datastore = new IntegrationTestKit(newSystem, leaderDatastoreContextBuilder, - commitTimeout) - .setupAbstractDataStore(testParameter, testName, "module-shards-member2", true, CARS)) { + try (var member2Datastore = new IntegrationTestKit(newSystem, leaderDatastoreContextBuilder, commitTimeout) + .setupDataStore(testParameter, testName, "module-shards-member2", true, CARS)) { verifyCars(member2Datastore.newReadOnlyTransaction(), car2); } } @@ -702,9 +702,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { .shardHeartbeatIntervalInMillis(100).shardElectionTimeoutFactor(5); IntegrationTestKit newMember1TestKit = new IntegrationTestKit(leaderSystem, newMember1Builder, commitTimeout); - try (AbstractDataStore ds = - newMember1TestKit.setupAbstractDataStore( - testParameter, testName, MODULE_SHARDS_CARS_ONLY_1_2, false, CARS)) { + try (var ds = newMember1TestKit.setupDataStore(testParameter, testName, MODULE_SHARDS_CARS_ONLY_1_2, false, + CARS)) { followerTestKit.waitUntilLeader(followerDistributedDataStore.getActorUtils(), CARS); @@ -979,7 +978,7 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { verifyNode(readTx, PeopleModel.PERSON_LIST_PATH, people); } - private static void verifyCarsReadWriteTransactions(final AbstractDataStore datastore, final int expected) + private static void verifyCarsReadWriteTransactions(final ClientBackedDataStore datastore, final int expected) throws Exception { IntegrationTestKit.verifyShardStats(datastore, "cars", stats -> assertEquals("getReadWriteTransactionCount", expected, stats.getReadWriteTransactionCount())); @@ -995,8 +994,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { final IntegrationTestKit follower2TestKit = new IntegrationTestKit(follower2System, DatastoreContext.newBuilderFrom(followerDatastoreContextBuilder.build()).operationTimeoutInMillis(500), commitTimeout); - try (AbstractDataStore follower2DistributedDataStore = follower2TestKit.setupAbstractDataStore( - testParameter, testName, MODULE_SHARDS_CARS_PEOPLE_1_2_3, false)) { + try (var follower2DistributedDataStore = follower2TestKit.setupDataStore(testParameter, testName, + MODULE_SHARDS_CARS_PEOPLE_1_2_3, false)) { followerTestKit.waitForMembersUp("member-3"); follower2TestKit.waitForMembersUp("member-1", "member-2"); @@ -1095,8 +1094,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { final DOMStoreThreePhaseCommitCohort successTxCohort = successWriteTx.ready(); - followerDistributedDataStore = followerTestKit.setupAbstractDataStore( - testParameter, testName, MODULE_SHARDS_CARS_ONLY_1_2, false, CARS); + followerDistributedDataStore = followerTestKit.setupDataStore(testParameter, testName, + MODULE_SHARDS_CARS_ONLY_1_2, false, CARS); leaderTestKit.doCommit(preIsolatedLeaderTxCohort); leaderTestKit.doCommit(successTxCohort); @@ -1181,9 +1180,7 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { final IntegrationTestKit follower2TestKit = new IntegrationTestKit( follower2System, follower2DatastoreContextBuilder, commitTimeout); - try (AbstractDataStore ds = - follower2TestKit.setupAbstractDataStore( - testParameter, testName, MODULE_SHARDS_CARS_1_2_3, false, CARS)) { + try (var ds = follower2TestKit.setupDataStore(testParameter, testName, MODULE_SHARDS_CARS_1_2_3, false, CARS)) { followerTestKit.waitForMembersUp("member-1", "member-3"); follower2TestKit.waitForMembersUp("member-1", "member-2"); @@ -1220,9 +1217,7 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { final IntegrationTestKit follower2TestKit = new IntegrationTestKit( follower2System, follower2DatastoreContextBuilder, commitTimeout); - final AbstractDataStore ds2 = - follower2TestKit.setupAbstractDataStore( - testParameter, testName, MODULE_SHARDS_CARS_1_2_3, false, CARS); + final var ds2 = follower2TestKit.setupDataStore(testParameter, testName, MODULE_SHARDS_CARS_1_2_3, false, CARS); followerTestKit.waitForMembersUp("member-1", "member-3"); follower2TestKit.waitForMembersUp("member-1", "member-2"); @@ -1340,8 +1335,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { initialWriteTx.write(CarsModel.BASE_PATH, CarsModel.emptyContainer()); leaderTestKit.doCommit(initialWriteTx.ready()); - try (AbstractDataStore follower2DistributedDataStore = follower2TestKit.setupAbstractDataStore( - testParameter, testName, MODULE_SHARDS_CARS_1_2_3, false)) { + try (var follower2DistributedDataStore = follower2TestKit.setupDataStore(testParameter, testName, + MODULE_SHARDS_CARS_1_2_3, false)) { final ActorRef member3Cars = ((LocalShardStore) follower2DistributedDataStore).getLocalShards() .getLocalShards().get("cars").getActor(); @@ -1463,7 +1458,7 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { assertEquals("Snapshot root node", expRoot, shardSnapshot.getRootNode().orElseThrow()); } - private static void sendDatastoreContextUpdate(final AbstractDataStore dataStore, final Builder builder) { + private static void sendDatastoreContextUpdate(final ClientBackedDataStore dataStore, final Builder builder) { final Builder newBuilder = DatastoreContext.newBuilderFrom(builder.build()); final DatastoreContextFactory mockContextFactory = mock(DatastoreContextFactory.class); final Answer answer = invocation -> newBuilder.build(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreWithSegmentedJournalIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreWithSegmentedJournalIntegrationTest.java index 9c3c58f08c..b5fcc951aa 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreWithSegmentedJournalIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreWithSegmentedJournalIntegrationTest.java @@ -96,8 +96,8 @@ public class DistributedDataStoreWithSegmentedJournalIntegrationTest final IntegrationTestKit testKit = new IntegrationTestKit(getSystem(), datastoreContextBuilder); CollectionNodeBuilder carMapBuilder = ImmutableNodes.mapNodeBuilder(CAR_QNAME); - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testManyWritesDeletes", "module-shards-cars-member-1.conf", true, "cars")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testManyWritesDeletes", + "module-shards-cars-member-1.conf", true, "cars")) { DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); @@ -155,8 +155,8 @@ public class DistributedDataStoreWithSegmentedJournalIntegrationTest } // test restoration from journal and verify data matches - try (AbstractDataStore dataStore = testKit.setupAbstractDataStore( - testParameter, "testManyWritesDeletes", "module-shards-cars-member-1.conf", true, "cars")) { + try (var dataStore = testKit.setupDataStore(testParameter, "testManyWritesDeletes", + "module-shards-cars-member-1.conf", true, "cars")) { DOMStoreTransactionChain txChain = dataStore.createTransactionChain(); MapNode cars = carMapBuilder.build(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/IntegrationTestKit.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/IntegrationTestKit.java index 855c16599f..63e9ba72a7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/IntegrationTestKit.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/IntegrationTestKit.java @@ -25,11 +25,11 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.Sets; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.Uninterruptibles; -import java.lang.reflect.Constructor; import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; +import org.opendaylight.controller.cluster.databroker.ClientBackedDataStore; import org.opendaylight.controller.cluster.datastore.DatastoreContext.Builder; import org.opendaylight.controller.cluster.datastore.config.Configuration; import org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl; @@ -75,42 +75,36 @@ public class IntegrationTestKit extends ShardTestKit { return datastoreContextBuilder; } - public AbstractDataStore setupAbstractDataStore(final Class implementation, - final String typeName, final String... shardNames) - throws Exception { - return setupAbstractDataStore(implementation, typeName, "module-shards.conf", true, - SchemaContextHelper.full(), shardNames); + public ClientBackedDataStore setupDataStore(final Class implementation, + final String typeName, final String... shardNames) throws Exception { + return setupDataStore(implementation, typeName, "module-shards.conf", true, SchemaContextHelper.full(), + shardNames); } - public AbstractDataStore setupAbstractDataStore(final Class implementation, - final String typeName, final boolean waitUntilLeader, - final String... shardNames) throws Exception { - return setupAbstractDataStore(implementation, typeName, "module-shards.conf", waitUntilLeader, - SchemaContextHelper.full(), shardNames); + public ClientBackedDataStore setupDataStore(final Class implementation, + final String typeName, final boolean waitUntilLeader, final String... shardNames) throws Exception { + return setupDataStore(implementation, typeName, "module-shards.conf", waitUntilLeader, + SchemaContextHelper.full(), shardNames); } - public AbstractDataStore setupAbstractDataStore(final Class implementation, - final String typeName, final String moduleShardsConfig, - final boolean waitUntilLeader, final String... shardNames) - throws Exception { - return setupAbstractDataStore(implementation, typeName, moduleShardsConfig, waitUntilLeader, - SchemaContextHelper.full(), shardNames); + public ClientBackedDataStore setupDataStore(final Class implementation, + final String typeName, final String moduleShardsConfig, final boolean waitUntilLeader, + final String... shardNames) throws Exception { + return setupDataStore(implementation, typeName, moduleShardsConfig, waitUntilLeader, + SchemaContextHelper.full(), shardNames); } - public AbstractDataStore setupAbstractDataStore(final Class implementation, - final String typeName, final String moduleShardsConfig, - final boolean waitUntilLeader, - final EffectiveModelContext schemaContext, - final String... shardNames) throws Exception { - return setupAbstractDataStore(implementation, typeName, moduleShardsConfig, "modules.conf", waitUntilLeader, - schemaContext, shardNames); + public ClientBackedDataStore setupDataStore(final Class implementation, + final String typeName, final String moduleShardsConfig, final boolean waitUntilLeader, + final EffectiveModelContext schemaContext, final String... shardNames) throws Exception { + return setupDataStore(implementation, typeName, moduleShardsConfig, "modules.conf", waitUntilLeader, + schemaContext, shardNames); } - private AbstractDataStore setupAbstractDataStore(final Class implementation, - final String typeName, final String moduleShardsConfig, - final String modulesConfig, final boolean waitUntilLeader, - final EffectiveModelContext schemaContext, - final String... shardNames) throws Exception { + private ClientBackedDataStore setupDataStore(final Class implementation, + final String typeName, final String moduleShardsConfig, final String modulesConfig, + final boolean waitUntilLeader, final EffectiveModelContext schemaContext, final String... shardNames) + throws Exception { final ClusterWrapper cluster = new ClusterWrapperImpl(getSystem()); final Configuration config = new ConfigurationImpl(moduleShardsConfig, modulesConfig); @@ -121,11 +115,10 @@ public class IntegrationTestKit extends ShardTestKit { doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext(); doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(anyString()); - final Constructor constructor = implementation.getDeclaredConstructor( - ActorSystem.class, ClusterWrapper.class, Configuration.class, - DatastoreContextFactory.class, DatastoreSnapshot.class); + final var constructor = implementation.getDeclaredConstructor(ActorSystem.class, ClusterWrapper.class, + Configuration.class, DatastoreContextFactory.class, DatastoreSnapshot.class); - final AbstractDataStore dataStore = constructor.newInstance(getSystem(), cluster, config, mockContextFactory, + final var dataStore = constructor.newInstance(getSystem(), cluster, config, mockContextFactory, restoreFromSnapshot); dataStore.onModelContextUpdated(schemaContext); @@ -209,7 +202,7 @@ public class IntegrationTestKit extends ShardTestKit { throw new IllegalStateException("Shard[" + shardName + " did not shutdown in time"); } - public static void verifyShardStats(final AbstractDataStore datastore, final String shardName, + public static void verifyShardStats(final ClientBackedDataStore datastore, final String shardName, final ShardStatsVerifier verifier) throws Exception { ActorUtils actorUtils = datastore.getActorUtils(); @@ -234,7 +227,7 @@ public class IntegrationTestKit extends ShardTestKit { throw lastError; } - public static void verifyShardState(final AbstractDataStore datastore, final String shardName, + public static void verifyShardState(final ClientBackedDataStore datastore, final String shardName, final Consumer verifier) throws Exception { ActorUtils actorUtils = datastore.getActorUtils(); @@ -259,7 +252,7 @@ public class IntegrationTestKit extends ShardTestKit { throw lastError; } - void testWriteTransaction(final AbstractDataStore dataStore, final YangInstanceIdentifier nodePath, + void testWriteTransaction(final ClientBackedDataStore dataStore, final YangInstanceIdentifier nodePath, final NormalizedNode nodeToWrite) throws Exception { // 1. Create a write-only Tx diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java index 5379051acd..4466493857 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java @@ -52,8 +52,8 @@ public class MemberNode { private static final String MEMBER_1_ADDRESS = "akka://cluster-test@127.0.0.1:2558"; private IntegrationTestKit kit; - private AbstractDataStore configDataStore; - private AbstractDataStore operDataStore; + private ClientBackedDataStore configDataStore; + private ClientBackedDataStore operDataStore; private DatastoreContext.Builder datastoreContextBuilder; private boolean cleanedUp; @@ -73,12 +73,12 @@ public class MemberNode { } - public AbstractDataStore configDataStore() { + public ClientBackedDataStore configDataStore() { return configDataStore; } - public AbstractDataStore operDataStore() { + public ClientBackedDataStore operDataStore() { return operDataStore; } @@ -132,7 +132,7 @@ public class MemberNode { } } - public static void verifyRaftState(final AbstractDataStore datastore, final String shardName, + public static void verifyRaftState(final ClientBackedDataStore datastore, final String shardName, final RaftStateVerifier verifier) throws Exception { ActorUtils actorUtils = datastore.getActorUtils(); @@ -157,7 +157,7 @@ public class MemberNode { throw lastError; } - public static void verifyRaftPeersPresent(final AbstractDataStore datastore, final String shardName, + public static void verifyRaftPeersPresent(final ClientBackedDataStore datastore, final String shardName, final String... peerMemberNames) throws Exception { final Set peerIds = new HashSet<>(); for (String p: peerMemberNames) { @@ -169,7 +169,7 @@ public class MemberNode { raftState.getPeerAddresses().keySet())); } - public static void verifyNoShardPresent(final AbstractDataStore datastore, final String shardName) { + public static void verifyNoShardPresent(final ClientBackedDataStore datastore, final String shardName) { Stopwatch sw = Stopwatch.createStarted(); while (sw.elapsed(TimeUnit.SECONDS) <= 5) { Optional shardReply = datastore.getActorUtils().findLocalShard(shardName); @@ -308,12 +308,12 @@ public class MemberNode { String memberName = new ClusterWrapperImpl(system).getCurrentMemberName().getName(); node.kit.getDatastoreContextBuilder().shardManagerPersistenceId("shard-manager-config-" + memberName); - node.configDataStore = node.kit.setupAbstractDataStore(ClientBackedDataStore.class, - "config_" + testName, moduleShardsConfig, true, schemaContext, waitForshardLeader); + node.configDataStore = node.kit.setupDataStore(ClientBackedDataStore.class, "config_" + testName, + moduleShardsConfig, true, schemaContext, waitForshardLeader); if (createOperDatastore) { node.kit.getDatastoreContextBuilder().shardManagerPersistenceId("shard-manager-oper-" + memberName); - node.operDataStore = node.kit.setupAbstractDataStore(ClientBackedDataStore.class, + node.operDataStore = node.kit.setupDataStore(ClientBackedDataStore.class, "oper_" + testName, moduleShardsConfig, true, schemaContext, waitForshardLeader); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java index b56d8020cd..889f1d47e1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java @@ -73,8 +73,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.controller.cluster.access.concepts.MemberName; +import org.opendaylight.controller.cluster.databroker.ClientBackedDataStore; import org.opendaylight.controller.cluster.datastore.AbstractClusterRefActorTest; -import org.opendaylight.controller.cluster.datastore.AbstractDataStore; import org.opendaylight.controller.cluster.datastore.ClusterWrapperImpl; import org.opendaylight.controller.cluster.datastore.DataStoreVersions; import org.opendaylight.controller.cluster.datastore.DatastoreContext; @@ -203,12 +203,12 @@ public class ShardManagerTest extends AbstractClusterRefActorTest { } private TestShardManager.Builder newTestShardMgrBuilder() { - return TestShardManager.builder(datastoreContextBuilder).distributedDataStore(mock(AbstractDataStore.class)); + return TestShardManager.builder(datastoreContextBuilder) + .distributedDataStore(mock(ClientBackedDataStore.class)); } private TestShardManager.Builder newTestShardMgrBuilder(final Configuration config) { - return TestShardManager.builder(datastoreContextBuilder).configuration(config) - .distributedDataStore(mock(AbstractDataStore.class)); + return newTestShardMgrBuilder().configuration(config); } private Props newShardMgrProps() { @@ -244,8 +244,9 @@ public class ShardManagerTest extends AbstractClusterRefActorTest { } private TestShardManager.Builder newTestShardMgrBuilderWithMockShardActor(final ActorRef shardActor) { - return TestShardManager.builder(datastoreContextBuilder).shardActor(shardActor) - .distributedDataStore(mock(AbstractDataStore.class)); + return TestShardManager.builder(datastoreContextBuilder) + .shardActor(shardActor) + .distributedDataStore(mock(ClientBackedDataStore.class)); } -- 2.36.6