X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fshardmanager%2FShardManagerTest.java;h=4417051b0994e0c4af3de24fc4f5f1435f9256e8;hp=63af6be93632b54f1511678be0a584ef4d4f9e6a;hb=abaef4a5ae37f27542155457fe7306a4662b1eeb;hpb=a4fcc7debbd036c6e1df8c88df1c0268c62e76e4 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 63af6be936..4417051b09 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 @@ -17,10 +17,8 @@ import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; @@ -43,13 +41,11 @@ import akka.serialization.Serialization; import akka.testkit.TestActorRef; import akka.testkit.javadsl.TestKit; import akka.util.Timeout; -import com.google.common.base.Function; import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Uninterruptibles; -import java.net.URI; import java.time.Duration; import java.util.AbstractMap; import java.util.Arrays; @@ -64,6 +60,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; +import java.util.function.Function; import java.util.stream.Collectors; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -129,8 +126,9 @@ import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore; import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor; import org.opendaylight.controller.md.cluster.datastore.model.TestModel; import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.Await; @@ -142,7 +140,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { private static final MemberName MEMBER_2 = MemberName.forName("member-2"); private static final MemberName MEMBER_3 = MemberName.forName("member-3"); - private static SchemaContext TEST_SCHEMA_CONTEXT; + private static EffectiveModelContext TEST_SCHEMA_CONTEXT; private final String shardMgrID = ShardManagerIdentifier.builder().type(shardMrgIDSuffix).build().toString(); @@ -298,7 +296,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { } } - final Creator creator = new Creator() { + final Creator creator = new Creator<>() { private static final long serialVersionUID = 1L; @Override public ShardManager create() { @@ -310,7 +308,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { final TestKit kit = new TestKit(getSystem()); - final ActorRef shardManager = actorFactory.createActor(Props.create( + final ActorRef shardManager = actorFactory.createActor(Props.create(ShardManager.class, new DelegatingShardManagerCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId())); shardManager.tell(new UpdateSchemaContext(TEST_SCHEMA_CONTEXT), kit.getRef()); @@ -1047,15 +1045,13 @@ public class ShardManagerTest extends AbstractShardManagerTest { TestShardManager shardManager = newTestShardManager(); String memberId = "member-1-shard-default-" + shardMrgIDSuffix; - shardManager.onReceiveCommand(new RoleChangeNotification( + shardManager.handleCommand(new RoleChangeNotification( memberId, RaftState.Candidate.name(), RaftState.Leader.name())); + assertFalse(ready.isDone()); - verify(ready, never()).countDown(); - - shardManager.onReceiveCommand(new ShardLeaderStateChanged(memberId, memberId, + shardManager.handleCommand(new ShardLeaderStateChanged(memberId, memberId, mock(DataTree.class), DataStoreVersions.CURRENT_VERSION)); - - verify(ready, times(1)).countDown(); + assertTrue(ready.isDone()); } @Test @@ -1064,17 +1060,15 @@ public class ShardManagerTest extends AbstractShardManagerTest { TestShardManager shardManager = newTestShardManager(); String memberId = "member-1-shard-default-" + shardMrgIDSuffix; - shardManager.onReceiveCommand(new RoleChangeNotification(memberId, null, RaftState.Follower.name())); + shardManager.handleCommand(new RoleChangeNotification(memberId, null, RaftState.Follower.name())); + assertFalse(ready.isDone()); - verify(ready, never()).countDown(); + shardManager.handleCommand(MockClusterWrapper.createMemberUp("member-2", kit.getRef().path().toString())); - shardManager.onReceiveCommand(MockClusterWrapper.createMemberUp("member-2", kit.getRef().path().toString())); - - shardManager.onReceiveCommand( + shardManager.handleCommand( new ShardLeaderStateChanged(memberId, "member-2-shard-default-" + shardMrgIDSuffix, mock(DataTree.class), DataStoreVersions.CURRENT_VERSION)); - - verify(ready, times(1)).countDown(); + assertTrue(ready.isDone()); } @Test @@ -1083,27 +1077,24 @@ public class ShardManagerTest extends AbstractShardManagerTest { TestShardManager shardManager = newTestShardManager(); String memberId = "member-1-shard-default-" + shardMrgIDSuffix; - shardManager.onReceiveCommand(new RoleChangeNotification(memberId, null, RaftState.Follower.name())); + shardManager.handleCommand(new RoleChangeNotification(memberId, null, RaftState.Follower.name())); + assertFalse(ready.isDone()); - verify(ready, never()).countDown(); - - shardManager.onReceiveCommand( + shardManager.handleCommand( new ShardLeaderStateChanged(memberId, "member-2-shard-default-" + shardMrgIDSuffix, mock(DataTree.class), DataStoreVersions.CURRENT_VERSION)); - shardManager.onReceiveCommand(MockClusterWrapper.createMemberUp("member-2", kit.getRef().path().toString())); - - verify(ready, times(1)).countDown(); + shardManager.handleCommand(MockClusterWrapper.createMemberUp("member-2", kit.getRef().path().toString())); + assertTrue(ready.isDone()); } @Test public void testRoleChangeNotificationDoNothingForUnknownShard() throws Exception { TestShardManager shardManager = newTestShardManager(); - shardManager.onReceiveCommand(new RoleChangeNotification("unknown", RaftState.Candidate.name(), + shardManager.handleCommand(new RoleChangeNotification("unknown", RaftState.Candidate.name(), RaftState.Leader.name())); - - verify(ready, never()).countDown(); + assertFalse(ready.isDone()); } @Test @@ -1117,7 +1108,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { public void testWhenShardIsLeaderSyncStatusIsTrue() throws Exception { TestShardManager shardManager = newTestShardManager(); - shardManager.onReceiveCommand(new RoleChangeNotification("member-1-shard-default-" + shardMrgIDSuffix, + shardManager.handleCommand(new RoleChangeNotification("member-1-shard-default-" + shardMrgIDSuffix, RaftState.Follower.name(), RaftState.Leader.name())); assertTrue(shardManager.getMBean().getSyncStatus()); @@ -1128,13 +1119,13 @@ public class ShardManagerTest extends AbstractShardManagerTest { TestShardManager shardManager = newTestShardManager(); String shardId = "member-1-shard-default-" + shardMrgIDSuffix; - shardManager.onReceiveCommand(new RoleChangeNotification(shardId, + shardManager.handleCommand(new RoleChangeNotification(shardId, RaftState.Follower.name(), RaftState.Candidate.name())); assertFalse(shardManager.getMBean().getSyncStatus()); // Send a FollowerInitialSyncStatus with status = true for the replica whose current state is candidate - shardManager.onReceiveCommand(new FollowerInitialSyncUpStatus( + shardManager.handleCommand(new FollowerInitialSyncUpStatus( true, shardId)); assertFalse(shardManager.getMBean().getSyncStatus()); @@ -1145,19 +1136,19 @@ public class ShardManagerTest extends AbstractShardManagerTest { TestShardManager shardManager = newTestShardManager(); String shardId = "member-1-shard-default-" + shardMrgIDSuffix; - shardManager.onReceiveCommand(new RoleChangeNotification(shardId, + shardManager.handleCommand(new RoleChangeNotification(shardId, RaftState.Candidate.name(), RaftState.Follower.name())); // Initially will be false assertFalse(shardManager.getMBean().getSyncStatus()); // Send status true will make sync status true - shardManager.onReceiveCommand(new FollowerInitialSyncUpStatus(true, shardId)); + shardManager.handleCommand(new FollowerInitialSyncUpStatus(true, shardId)); assertTrue(shardManager.getMBean().getSyncStatus()); // Send status false will make sync status false - shardManager.onReceiveCommand(new FollowerInitialSyncUpStatus(false, shardId)); + shardManager.handleCommand(new FollowerInitialSyncUpStatus(false, shardId)); assertFalse(shardManager.getMBean().getSyncStatus()); } @@ -1177,7 +1168,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { // Make default shard leader String defaultShardId = "member-1-shard-default-" + shardMrgIDSuffix; - shardManager.onReceiveCommand(new RoleChangeNotification(defaultShardId, + shardManager.handleCommand(new RoleChangeNotification(defaultShardId, RaftState.Follower.name(), RaftState.Leader.name())); // default = Leader, astronauts is unknown so sync status remains false @@ -1185,21 +1176,21 @@ public class ShardManagerTest extends AbstractShardManagerTest { // Make astronauts shard leader as well String astronautsShardId = "member-1-shard-astronauts-" + shardMrgIDSuffix; - shardManager.onReceiveCommand(new RoleChangeNotification(astronautsShardId, + shardManager.handleCommand(new RoleChangeNotification(astronautsShardId, RaftState.Follower.name(), RaftState.Leader.name())); // Now sync status should be true assertTrue(shardManager.getMBean().getSyncStatus()); // Make astronauts a Follower - shardManager.onReceiveCommand(new RoleChangeNotification(astronautsShardId, + shardManager.handleCommand(new RoleChangeNotification(astronautsShardId, RaftState.Leader.name(), RaftState.Follower.name())); // Sync status is not true assertFalse(shardManager.getMBean().getSyncStatus()); // Make the astronauts follower sync status true - shardManager.onReceiveCommand(new FollowerInitialSyncUpStatus(true, astronautsShardId)); + shardManager.handleCommand(new FollowerInitialSyncUpStatus(true, astronautsShardId)); // Sync status is now true assertTrue(shardManager.getMBean().getSyncStatus()); @@ -1238,14 +1229,14 @@ public class ShardManagerTest extends AbstractShardManagerTest { .createActor(newShardMgrProps(new ConfigurationImpl(new EmptyModuleShardConfigProvider())) .withDispatcher(Dispatchers.DefaultDispatcherId())); - SchemaContext schemaContext = TEST_SCHEMA_CONTEXT; + EffectiveModelContext schemaContext = TEST_SCHEMA_CONTEXT; shardManager.tell(new UpdateSchemaContext(schemaContext), ActorRef.noSender()); DatastoreContext datastoreContext = DatastoreContext.newBuilder().shardElectionTimeoutFactor(100) .persistent(false).build(); Shard.Builder shardBuilder = Shard.builder(); - ModuleShardConfiguration config = new ModuleShardConfiguration(URI.create("foo-ns"), "foo-module", + ModuleShardConfiguration config = new ModuleShardConfiguration(XMLNamespace.of("foo-ns"), "foo-module", "foo", null, members("member-1", "member-5", "member-6")); shardManager.tell(new CreateShard(config, shardBuilder, datastoreContext), kit.getRef()); @@ -1290,7 +1281,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { shardManager.tell(new UpdateSchemaContext(TEST_SCHEMA_CONTEXT), ActorRef.noSender()); Shard.Builder shardBuilder = Shard.builder(); - ModuleShardConfiguration config = new ModuleShardConfiguration(URI.create("foo-ns"), "foo-module", + ModuleShardConfiguration config = new ModuleShardConfiguration(XMLNamespace.of("foo-ns"), "foo-module", "foo", null, members("member-5", "member-6")); shardManager.tell(new CreateShard(config, shardBuilder, null), kit.getRef()); @@ -1316,13 +1307,13 @@ public class ShardManagerTest extends AbstractShardManagerTest { Shard.Builder shardBuilder = Shard.builder(); - ModuleShardConfiguration config = new ModuleShardConfiguration(URI.create("foo-ns"), "foo-module", + ModuleShardConfiguration config = new ModuleShardConfiguration(XMLNamespace.of("foo-ns"), "foo-module", "foo", null, members("member-1")); shardManager.tell(new CreateShard(config, shardBuilder, null), kit.getRef()); kit.expectMsgClass(Duration.ofSeconds(5), Success.class); - SchemaContext schemaContext = TEST_SCHEMA_CONTEXT; + EffectiveModelContext schemaContext = TEST_SCHEMA_CONTEXT; shardManager.tell(new UpdateSchemaContext(schemaContext), ActorRef.noSender()); shardManager.tell(new FindLocalShard("foo", true), kit.getRef()); @@ -1363,10 +1354,8 @@ public class ShardManagerTest extends AbstractShardManagerTest { assertEquals("getType", shardMrgIDSuffix, datastoreSnapshot.getType()); assertNull("Expected null ShardManagerSnapshot", datastoreSnapshot.getShardManagerSnapshot()); - Function shardNameTransformer = ShardSnapshot::getName; - assertEquals("Shard names", Sets.newHashSet("shard1", "shard2"), Sets.newHashSet( - datastoreSnapshot.getShardSnapshots().stream().map(shardNameTransformer).collect(Collectors.toSet()))); + datastoreSnapshot.getShardSnapshots().stream().map(ShardSnapshot::getName).collect(Collectors.toSet()))); // Add a new replica @@ -1387,7 +1376,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { datastoreSnapshot = expectMsgClassOrFailure(DatastoreSnapshot.class, kit, "GetSnapshot"); assertEquals("Shard names", Sets.newHashSet("shard1", "shard2", "astronauts"), Sets.newHashSet( - Lists.transform(datastoreSnapshot.getShardSnapshots(), shardNameTransformer))); + Lists.transform(datastoreSnapshot.getShardSnapshots(), ShardSnapshot::getName))); ShardManagerSnapshot snapshot = datastoreSnapshot.getShardManagerSnapshot(); assertNotNull("Expected ShardManagerSnapshot", snapshot); @@ -2269,7 +2258,7 @@ public class ShardManagerTest extends AbstractShardManagerTest { AbstractGenericCreator(final Class shardManagerClass) { this.shardManagerClass = shardManagerClass; - cluster(new MockClusterWrapper()).configuration(new MockConfiguration()).waitTillReadyCountDownLatch(ready) + cluster(new MockClusterWrapper()).configuration(new MockConfiguration()).readinessFuture(ready) .primaryShardInfoCache(new PrimaryShardInfoFutureCache()); }