Enable overwrite test suite 01/90701/11 master
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 25 Jun 2020 16:57:34 +0000 (18:57 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 26 Jun 2020 18:06:59 +0000 (20:06 +0200)
With data being split up correctly between shards, we can re-enable
the test suite for snapshot triggers.

JIRA: CONTROLLER-1913
JIRA: CONTROLLER-1950
Change-Id: Ibda02648682aee03cf4c5a0275f705d79dbe6b1c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java
opendaylight/md-sal/sal-distributed-datastore/src/test/resources/module-shards-default-cars-member1-and-2.conf [new file with mode: 0644]

index f530d67..cbe494f 100644 (file)
@@ -911,7 +911,6 @@ public abstract class AbstractDistributedDataStoreIntegrationTest {
     }
 
     @Test
-    @Ignore("Writes to root node are not split into shards")
     public void testSnapshotOnRootOverwrite() throws Exception {
         if (!DistributedDataStore.class.isAssignableFrom(testParameter)) {
             // FIXME: ClientBackedDatastore does not have stable indexes/term, the snapshot index seems to fluctuate
@@ -931,10 +930,10 @@ public abstract class AbstractDistributedDataStoreIntegrationTest {
 
             testKit.testWriteTransaction(dataStore, YangInstanceIdentifier.empty(), rootNode);
             IntegrationTestKit.verifyShardState(dataStore, "cars",
-                state -> assertEquals(0, state.getSnapshotIndex()));
+                state -> assertEquals(1, state.getSnapshotIndex()));
 
             // root has been written expect snapshot at index 0
-            verifySnapshot("member-1-shard-cars-testRootOverwrite", 0, 1);
+            verifySnapshot("member-1-shard-cars-testRootOverwrite", 1, 1);
 
             for (int i = 0; i < 10; i++) {
                 testKit.testWriteTransaction(dataStore, CarsModel.newCarPath("car " + i),
@@ -943,23 +942,24 @@ public abstract class AbstractDistributedDataStoreIntegrationTest {
 
             // fake snapshot causes the snapshotIndex to move
             IntegrationTestKit.verifyShardState(dataStore, "cars",
-                state -> assertEquals(9, state.getSnapshotIndex()));
+                state -> assertEquals(10, state.getSnapshotIndex()));
 
             // however the real snapshot still has not changed and was taken at index 0
-            verifySnapshot("member-1-shard-cars-testRootOverwrite", 0, 1);
+            verifySnapshot("member-1-shard-cars-testRootOverwrite", 1, 1);
 
             // root overwrite so expect a snapshot
             testKit.testWriteTransaction(dataStore, YangInstanceIdentifier.empty(), rootNode);
 
             // this was a real snapshot so everything should be in it(1 + 10 + 1)
             IntegrationTestKit.verifyShardState(dataStore, "cars",
-                state -> assertEquals(11, state.getSnapshotIndex()));
+                state -> assertEquals(12, state.getSnapshotIndex()));
 
-            verifySnapshot("member-1-shard-cars-testRootOverwrite", 11, 1);
+            verifySnapshot("member-1-shard-cars-testRootOverwrite", 12, 1);
         }
     }
 
-    private void verifySnapshot(String persistenceId, long lastAppliedIndex, long lastAppliedTerm) {
+    private static void verifySnapshot(final String persistenceId, final long lastAppliedIndex,
+            final long lastAppliedTerm) {
         await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
                 List<Snapshot> snap = InMemorySnapshotStore.getSnapshots(persistenceId, Snapshot.class);
                 assertEquals(1, snap.size());
index 8637a5f..fbc7fa2 100644 (file)
@@ -227,7 +227,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest {
     }
 
     private void initDatastores(final String type, final String moduleShardsConfig, final String[] shards,
-            DatastoreContext.Builder leaderBuilder, DatastoreContext.Builder followerBuilder) throws Exception {
+            final DatastoreContext.Builder leaderBuilder, final DatastoreContext.Builder followerBuilder)
+                    throws Exception {
         leaderTestKit = new IntegrationTestKit(leaderSystem, leaderBuilder, commitTimeout);
 
         leaderDistributedDataStore = leaderTestKit.setupAbstractDataStore(
@@ -1443,7 +1444,6 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest {
     }
 
     @Test
-    @Ignore("Writes to root node are not split into shards")
     public void testSnapshotOnRootOverwrite() throws Exception {
         if (!DistributedDataStore.class.isAssignableFrom(testParameter)) {
             // FIXME: ClientBackedDatastore does not have stable indexes/term, the snapshot index seems to fluctuate
@@ -1451,13 +1451,13 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest {
         }
 
         final String testName = "testSnapshotOnRootOverwrite";
-        String[] shards = {"cars", "default"};
-        initDatastores(testName, "module-shards-default-cars-member1.conf", shards,
+        final String[] shards = {"cars", "default"};
+        initDatastores(testName, "module-shards-default-cars-member1-and-2.conf", shards,
                 leaderDatastoreContextBuilder.snapshotOnRootOverwrite(true),
                 followerDatastoreContextBuilder.snapshotOnRootOverwrite(true));
 
         leaderTestKit.waitForMembersUp("member-2");
-        ContainerNode rootNode = ImmutableContainerNodeBuilder.create()
+        final ContainerNode rootNode = ImmutableContainerNodeBuilder.create()
                 .withNodeIdentifier(YangInstanceIdentifier.NodeIdentifier.create(SchemaContext.NAME))
                 .withChild((ContainerNode) CarsModel.create())
                 .build();
@@ -1465,13 +1465,13 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest {
         leaderTestKit.testWriteTransaction(leaderDistributedDataStore, YangInstanceIdentifier.empty(), rootNode);
 
         IntegrationTestKit.verifyShardState(leaderDistributedDataStore, "cars",
-            state -> assertEquals(0, state.getSnapshotIndex()));
+            state -> assertEquals(1, state.getSnapshotIndex()));
 
         IntegrationTestKit.verifyShardState(followerDistributedDataStore, "cars",
-            state -> assertEquals(0, state.getSnapshotIndex()));
+            state -> assertEquals(1, state.getSnapshotIndex()));
 
-        verifySnapshot("member-1-shard-cars-testSnapshotOnRootOverwrite", 0);
-        verifySnapshot("member-2-shard-cars-testSnapshotOnRootOverwrite", 0);
+        verifySnapshot("member-1-shard-cars-testSnapshotOnRootOverwrite", 1);
+        verifySnapshot("member-2-shard-cars-testSnapshotOnRootOverwrite", 1);
 
         for (int i = 0; i < 10; i++) {
             leaderTestKit.testWriteTransaction(leaderDistributedDataStore, CarsModel.newCarPath("car " + i),
@@ -1480,28 +1480,28 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest {
 
         // fake snapshot causes the snapshotIndex to move
         IntegrationTestKit.verifyShardState(leaderDistributedDataStore, "cars",
-            state -> assertEquals(9, state.getSnapshotIndex()));
+            state -> assertEquals(10, state.getSnapshotIndex()));
         IntegrationTestKit.verifyShardState(followerDistributedDataStore, "cars",
-            state -> assertEquals(9, state.getSnapshotIndex()));
+            state -> assertEquals(10, state.getSnapshotIndex()));
 
-        // however the real snapshot still has not changed and was taken at index 0
-        verifySnapshot("member-1-shard-cars-testSnapshotOnRootOverwrite", 0);
-        verifySnapshot("member-2-shard-cars-testSnapshotOnRootOverwrite", 0);
+        // however the real snapshot still has not changed and was taken at index 1
+        verifySnapshot("member-1-shard-cars-testSnapshotOnRootOverwrite", 1);
+        verifySnapshot("member-2-shard-cars-testSnapshotOnRootOverwrite", 1);
 
         // root overwrite so expect a snapshot
         leaderTestKit.testWriteTransaction(leaderDistributedDataStore, YangInstanceIdentifier.empty(), rootNode);
 
-        // this was a real snapshot so everything should be in it(1 + 10 + 1)
+        // this was a real snapshot so everything should be in it(1(DisableTrackingPayload) + 1 + 10 + 1)
         IntegrationTestKit.verifyShardState(leaderDistributedDataStore, "cars",
-            state -> assertEquals(11, state.getSnapshotIndex()));
+            state -> assertEquals(12, state.getSnapshotIndex()));
         IntegrationTestKit.verifyShardState(followerDistributedDataStore, "cars",
-            state -> assertEquals(11, state.getSnapshotIndex()));
+            state -> assertEquals(12, state.getSnapshotIndex()));
 
-        verifySnapshot("member-1-shard-cars-testSnapshotOnRootOverwrite", 11);
-        verifySnapshot("member-2-shard-cars-testSnapshotOnRootOverwrite", 11);
+        verifySnapshot("member-1-shard-cars-testSnapshotOnRootOverwrite", 12);
+        verifySnapshot("member-2-shard-cars-testSnapshotOnRootOverwrite", 12);
     }
 
-    private void verifySnapshot(String persistenceId, long lastAppliedIndex) {
+    private void verifySnapshot(final String persistenceId, final long lastAppliedIndex) {
         await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
                 List<Snapshot> snap = InMemorySnapshotStore.getSnapshots(persistenceId, Snapshot.class);
                 assertEquals(1, snap.size());
diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/resources/module-shards-default-cars-member1-and-2.conf b/opendaylight/md-sal/sal-distributed-datastore/src/test/resources/module-shards-default-cars-member1-and-2.conf
new file mode 100644 (file)
index 0000000..efc3dd4
--- /dev/null
@@ -0,0 +1,26 @@
+module-shards = [
+    {
+        name = "default"
+        shards = [
+            {
+                name="default",
+                replicas = [
+                    "member-1",
+                    "member-2"
+                ]
+            }
+        ]
+    },
+    {
+        name = "cars"
+        shards = [
+            {
+                name="cars"
+                replicas = [
+                    "member-1",
+                    "member-2"
+                ]
+            }
+        ]
+    }
+]
\ No newline at end of file

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.