ekaterinadimitrova2 commented on code in PR #3955:
URL: https://github.com/apache/cassandra/pull/3955#discussion_r1990064788


##########
test/distributed/org/apache/cassandra/distributed/test/sai/IndexAvailabilityTest.java:
##########
@@ -188,6 +190,92 @@ private void markIndexNonQueryable(IInvokableInstance 
node, String keyspace, Str
         });
     }
 
+    @Test
+    public void testIndexExceptionsTwoIndexesOn3NodeCluster() throws Exception
+    {
+        try (Cluster cluster = init(Cluster.build(3)
+                .withConfig(config -> config.with(GOSSIP)
+                        .with(NETWORK))
+                .start()))
+        {
+            String ks2 = "ks2";
+            String cf1 = "cf1";
+            String index1 = "cf1_idx1";
+            String index2 = "cf1_idx2";
+
+            // Create keyspace, table with correct column types
+            cluster.schemaChange(String.format(CREATE_KEYSPACE, ks2, 2));
+            cluster.schemaChange("CREATE TABLE " + ks2 + '.' + cf1 + " (pk int 
PRIMARY KEY, v1 int, v2 int)");
+            executeOnAllCoordinators(cluster,
+                    "SELECT pk FROM " + ks2 + '.' + cf1 + " WHERE v1=0 AND 
v2=0 ALLOW FILTERING"
+            );
+            executeOnAllCoordinators(cluster,
+                    "SELECT pk FROM " + ks2 + '.' + cf1 + " WHERE v2=0 ALLOW 
FILTERING"
+            );
+            executeOnAllCoordinators(cluster,
+                    "SELECT pk FROM " + ks2 + '.' + cf1 + " WHERE v1=0 ALLOW 
FILTERING"
+            );
+
+            cluster.schemaChange(String.format(CREATE_INDEX, index1, ks2, cf1, 
"v1"));
+            cluster.schemaChange(String.format(CREATE_INDEX, index2, ks2, cf1, 
"v2"));
+            cluster.forEach(node -> 
expectedNodeIndexQueryability.put(NodeIndex.create(ks2, index1, node), 
Index.Status.BUILD_SUCCEEDED));
+            waitForIndexingStatus(cluster.get(2), ks2, index1, cluster.get(1), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(2), ks2, index1, cluster.get(2), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(2), ks2, index1, cluster.get(3), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(1), ks2, index1, cluster.get(1), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(1), ks2, index1, cluster.get(2), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(1), ks2, index1, cluster.get(3), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(3), ks2, index1, cluster.get(1), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(3), ks2, index1, cluster.get(2), 
Index.Status.BUILD_SUCCEEDED);
+            waitForIndexingStatus(cluster.get(3), ks2, index1, cluster.get(3), 
Index.Status.BUILD_SUCCEEDED);
+
+            // Mark only index2 as building on node3, leave index1 in 
BUILD_SUCCEEDED state
+            markIndexBuilding(cluster.get(3), ks2, cf1, index2);
+            cluster.forEach(node -> 
expectedNodeIndexQueryability.put(NodeIndex.create(ks2, index2, node), 
Index.Status.FULL_REBUILD_STARTED));
+            waitForIndexingStatus(cluster.get(2), ks2, index2, cluster.get(3), 
Index.Status.FULL_REBUILD_STARTED);
+            waitForIndexingStatus(cluster.get(1), ks2, index2, cluster.get(3), 
Index.Status.FULL_REBUILD_STARTED);
+            waitForIndexingStatus(cluster.get(3), ks2, index2, cluster.get(3), 
Index.Status.FULL_REBUILD_STARTED);
+
+            assertThatThrownBy(() ->
+                    executeOnAllCoordinators(cluster,
+                            "SELECT pk FROM " + ks2 + '.' + cf1 + " WHERE v1=0 
AND v2=0"
+                    ))
+                    .hasMessageContaining("Operation failed - received 1 
responses and 1 failures: INDEX_BUILD_IN_PROGRESS");

Review Comment:
   Which makes sense considering:
   https://github.com/apache/cassandra/pull/3955/files#r1990063343



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org
For additional commands, e-mail: pr-h...@cassandra.apache.org

Reply via email to