ekaterinadimitrova2 commented on code in PR #3955:
URL: https://github.com/apache/cassandra/pull/3955#discussion_r1982363069
##########
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:
In 2i ALLOW FILTERING seems to pass here and this query we have here instead
complains of lack of ALLOW FILTERING and not about index not being available or
building
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]