This is an automated email from the ASF dual-hosted git repository. bdeggleston pushed a commit to branch cep-45-mutation-tracking in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 5a94a5a0fdb72745cd7461d76877dec8d89d9aff Author: Caleb Rackliffe <[email protected]> AuthorDate: Tue Oct 14 16:01:45 2025 -0500 Enable range reads for MultiNodeTableWalkWithMutationTrackingTest and document failure modes for known problematic seeds patch by Caleb Rackliffe; reviewed by Blake Eggleston for CASSANDRA-20898 --- ...MultiNodeTableWalkWithMutationTrackingTest.java | 9 +- .../tracking/MutationTrackingRangeReadTest.java | 368 +++++++++------------ .../test/tracking/MutationTrackingUtils.java | 3 +- 3 files changed, 159 insertions(+), 221 deletions(-) diff --git a/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithMutationTrackingTest.java b/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithMutationTrackingTest.java index 51f04697dc..7d28f96e44 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithMutationTrackingTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithMutationTrackingTest.java @@ -102,15 +102,14 @@ public class MultiNodeTableWalkWithMutationTrackingTest extends MultiNodeTableWa preCheck(cluster, statefulBuilder); statefulBuilder.check(commands(() -> rs -> createState(rs, cluster)) .add(StatefulASTBase::insert) - //.add(StatefulASTBase::fullTableScan) + .add(StatefulASTBase::fullTableScan) .addIf(State::allowUsingTimestamp, StatefulASTBase::validateUsingTimestamp) .addIf(State::hasPartitions, this::selectExisting) - //.addAllIf(State::supportTokens, this::selectToken, this::selectTokenRange, StatefulASTBase::selectMinTokenRange) + .addAllIf(State::supportTokens, this::selectToken, this::selectTokenRange, StatefulASTBase::selectMinTokenRange) .addIf(State::hasEnoughMemtable, StatefulASTBase::flushTable) .addIf(State::hasEnoughSSTables, StatefulASTBase::compactTable) - //.addAllIf(BaseState::allowRepair, StatefulASTBase::incrementalRepair, StatefulASTBase::previewRepair) - //.addIf(State::allowNonPartitionQuery, this::nonPartitionQuery) - //.addIf(State::allowNonPartitionMultiColumnQuery, this::multiColumnQuery) + .addIf(State::allowNonPartitionQuery, this::nonPartitionQuery) + .addIf(State::allowNonPartitionMultiColumnQuery, this::multiColumnQuery) .addIf(State::allowPartitionQuery, this::partitionRestrictedQuery) .destroyState(State::close) .commandsTransformer(LoggingCommand.factory()) diff --git a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java index 7fb4fcb960..194637253d 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java @@ -23,6 +23,7 @@ import java.util.Iterator; import org.junit.AfterClass; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import org.apache.cassandra.distributed.Cluster; @@ -33,6 +34,7 @@ import org.apache.cassandra.distributed.test.TestBaseImpl; import static org.apache.cassandra.distributed.shared.AssertUtils.assertRows; import static org.apache.cassandra.distributed.shared.AssertUtils.row; +@Ignore(MutationTrackingUtils.IgnoreReasons.NO_PER_PARTITION_RANGE_READ_LIMITS) public class MutationTrackingRangeReadTest extends TestBaseImpl { private static final int REPLICAS = 3; @@ -44,7 +46,9 @@ public class MutationTrackingRangeReadTest extends TestBaseImpl { cluster = Cluster.build() .withNodes(REPLICAS) - .withConfig(cfg -> cfg.with(Feature.NETWORK).with(Feature.GOSSIP).set("mutation_tracking_enabled", "true")) + .withConfig(cfg -> cfg.with(Feature.NETWORK, Feature.GOSSIP) + .set("mutation_tracking_enabled", true) + .set("hinted_handoff_enabled", false)) .start(); } @@ -55,260 +59,196 @@ public class MutationTrackingRangeReadTest extends TestBaseImpl cluster.close(); } - /* - * Seed = 3448511221048049990 - * Examples = 1 - * Pure = true - * Error: Unexpected results for query: SELECT * FROM ks1.tbl WHERE pk0 = 7137864754153440313 PER PARTITION LIMIT 21 LIMIT 914 ALLOW FILTERING - * Steps: 400 - * Values: - * State: - * Setup: - * Config: - * sstable: - * selected_format: bti - * CREATE KEYSPACE IF NOT EXISTS ks1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'; - * CREATE TYPE IF NOT EXISTS ks1."tOGqK49dTH9n5nZhCHxpmKOPKYO8w4I04vHtYY41ys" ( - * f0 boolean, - * f1 blob, - * f2 smallint - * );; - * CREATE TABLE ks1.tbl ( - * pk0 bigint, - * pk1 text, - * ck0 bigint, - * s0 frozen<list<frozen<list<time>>>> static, - * v0 'org.apache.cassandra.db.marshal.LexicalUUIDType', - * v1 frozen<tuple<frozen<"tOGqK49dTH9n5nZhCHxpmKOPKYO8w4I04vHtYY41ys">, vector<timeuuid, 1>>>, - * PRIMARY KEY ((pk0, pk1), ck0) - * ) WITH CLUSTERING ORDER BY (ck0 DESC) - * AND read_repair = 'NONE' - * AND transactional_mode = 'off' - * AND transactional_migration_from = 'none' - * History: - * 1: UPDATE ks1.tbl USING TIMESTAMP 1 SET s0=[['08:31:40.807720853', '01:14:50.323756148', '13:00:06.063871867']] WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲' -- on node3 - * 2: UPDATE ks1.tbl USING TIMESTAMP 2 SET s0=[['03:28:16.047802044']] WHERE pk0 = 7137864754153440313 AND pk1 = '뢸镝蔥' -- on node1 - * 3: INSERT INTO ks1.tbl (pk0, pk1, ck0, v0) VALUES (7137864754153440313, '뢸镝蔥', 7732824726196172505, 0x0000000000004d00af00000000000000) USING TIMESTAMP 3 -- on node2 - * 4: SELECT * FROM ks1.tbl WHERE ck0 = 7732824726196172505 ALLOW FILTERING -- ck0 bigint (reversed), on node2 - * 5: SELECT * FROM ks1.tbl WHERE s0 > [['03:28:16.047802044']] PER PARTITION LIMIT 519 LIMIT 721 ALLOW FILTERING -- s0 frozen<list<frozen<list<time>>>>, on node2, fetch size 1000 - * 6: nodetool flush ks1 tbl - * 7: SELECT * FROM ks1.tbl WHERE pk0 = 7137864754153440313 AND pk1 = '뢸镝蔥' LIMIT 521 -- By Partition Key, on node2, fetch size 1 - * 8: SELECT * FROM ks1.tbl WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲' LIMIT 486 -- By Partition Key, on node2, fetch size 5000 - * 9: SELECT * FROM ks1.tbl -- full table scan, on node2 - * 10: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(1699976006349660742, 'ጬ葲') AND token(pk0, pk1) <= token(7137864754153440313, '뢸镝蔥') -- by token range, on node3, fetch size 1000 - * 11: SELECT * FROM ks1.tbl WHERE v0 = 0x0000000000004d00af00000000000000 ALLOW FILTERING -- v0 'org.apache.cassandra.db.marshal.LexicalUUIDType', on node2 - * 12: INSERT INTO ks1.tbl (pk0, pk1, s0) VALUES (1699976006349660742, 'ጬ葲', null) USING TIMESTAMP 4 -- on node1 - * 13: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) >= token(1699976006349660742, 'ጬ葲') AND token(pk0, pk1) < token(7137864754153440313, '뢸镝蔥') PER PARTITION LIMIT 402 -- by token range, on node1, fetch size 1 - * 14: SELECT * FROM ks1.tbl LIMIT 980 -- full table scan, on node1 - * 15: SELECT * FROM ks1.tbl WHERE pk0 = 7137864754153440313 AND pk1 = '뢸镝蔥' AND ck0 <= 7732824726196172505 PER PARTITION LIMIT 154 LIMIT 27 ALLOW FILTERING -- ck0 bigint (reversed), on node1 - * 16: UPDATE ks1.tbl USING TIMESTAMP 5 SET s0=[['01:28:35.208066780', '05:25:43.184564123'], ['16:14:58.464860367', '13:59:53.463983006', '10:32:10.674489767']] WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲' -- on node2 - * 17: SELECT * FROM ks1.tbl WHERE v0 <= 0x0000000000004d00af00000000000000 PER PARTITION LIMIT 39 ALLOW FILTERING -- v0 'org.apache.cassandra.db.marshal.LexicalUUIDType', on node1, fetch size 1 - * 18: nodetool flush ks1 tbl - * 19: SELECT writetime(s0), writetime(v0), writetime(v1) FROM ks1.tbl - * 20: INSERT INTO ks1.tbl (pk0, pk1, s0) VALUES (7137864754153440313, '뢸镝蔥', [['11:13:31.615781929', '02:03:35.298191424', '21:32:35.861361643']]) USING TIMESTAMP 6 -- on node3 - * 21: SELECT * FROM ks1.tbl WHERE v0 <= 0x0000000000004d00af00000000000000 PER PARTITION LIMIT 96 ALLOW FILTERING -- v0 'org.apache.cassandra.db.marshal.LexicalUUIDType', on node3 - * 22: SELECT * FROM ks1.tbl WHERE ck0 >= 7732824726196172505 PER PARTITION LIMIT 334 LIMIT 596 ALLOW FILTERING -- ck0 bigint (reversed), on node1, fetch size 1 - * 23: DELETE FROM ks1.tbl USING TIMESTAMP 7 WHERE pk0 = -5694501802205955587 AND pk1 = '䱔틊雬ⲓ텓┪炷ᱳ' AND ck0 = -6329240054733066635 -- on node1 - * 24: SELECT * FROM ks1.tbl WHERE pk0 <= 7137864754153440313 PER PARTITION LIMIT 223 LIMIT 958 ALLOW FILTERING -- pk0 bigint, on node3, fetch size 1 - * 25: UPDATE ks1.tbl USING TIMESTAMP 8 SET s0=[['01:53:27.416986187', '06:59:06.972693101', '22:18:26.463792361'], ['10:28:11.888503614', '18:21:42.999485132']] WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲' -- on node3 - * 26: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) BETWEEN 5433756588025747060 AND -9223372036854775808 PER PARTITION LIMIT 162 LIMIT 988 -- min token range, on node2, fetch size 1 - * 27: SELECT * FROM ks1.tbl WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲' PER PARTITION LIMIT 557 LIMIT 510 -- By Partition Key, on node1, fetch size 5000 - * 28: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(1699976006349660742, 'ጬ葲') AND token(pk0, pk1) < token(7137864754153440313, '뢸镝蔥') PER PARTITION LIMIT 54 -- by token range, on node2, fetch size 5000 - * 29: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) BETWEEN -3315371536788945839 AND -9223372036854775808 PER PARTITION LIMIT 406 LIMIT 921 -- min token range, on node3 - * 30: UPDATE ks1.tbl USING TIMESTAMP 9 SET v1=({f0: false, f1: 0xc50678, f2: 514}, [00000000-0000-1700-9e00-000000000000]), s0=[['02:53:03.301806358', '22:11:05.490315481', '08:57:26.834747163'], ['03:19:25.855999427', '07:43:08.735244495'], ['17:11:43.296045244', '09:50:10.508194464', '13:26:39.023128174']] WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲' AND ck0 = -1933986024815804926 -- on node1 - * 31: SELECT * FROM ks1.tbl WHERE v1 = ({f0: false, f1: 0xc50678, f2: 514}, [00000000-0000-1700-9e00-000000000000]) PER PARTITION LIMIT 23 ALLOW FILTERING -- v1 frozen<tuple<frozen<"tOGqK49dTH9n5nZhCHxpmKOPKYO8w4I04vHtYY41ys">, vector<timeuuid, 1>>>, on node1, fetch size 1000 - * 32: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) BETWEEN token(1699976006349660742, 'ጬ葲') AND token(7137864754153440313, '뢸镝蔥') PER PARTITION LIMIT 297 LIMIT 954 -- by token range, on node1 - * 33: nodetool flush ks1 tbl - * 34: SELECT * FROM ks1.tbl WHERE pk0 = 7137864754153440313 PER PARTITION LIMIT 21 LIMIT 914 ALLOW FILTERING -- pk0 bigint, on node3, fetch size 1 - * - * Caused by: java.lang.AssertionError: Unexpected results for query: SELECT * FROM ks1.tbl WHERE pk0 = 7137864754153440313 PER PARTITION LIMIT 21 LIMIT 914 ALLOW FILTERING - * Caused by: java.lang.AssertionError: No rows returned - * Expected: - * pk0 | pk1 | ck0 | s0 | v0 | v1 - * 7137864754153440313 | '뢸镝蔥' | 7732824726196172505 | [['11:13:31.615781929', '02:03:35.298191424', '21:32:35.861361643']] | 0x0000000000004d00af00000000000000 | null - */ @Test - public void test3448511221048049990() + public void testPartialPartitionFilterWithPerPartitionLimit() { - String keyspace = "test3448511221048049990"; + String keyspace = "partial_partition_filter_per_partition_limit"; cluster.schemaChange(withKeyspace("CREATE KEYSPACE %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'", keyspace)); - cluster.schemaChange(withKeyspace("CREATE TYPE IF NOT EXISTS %s.\"tOGqK49dTH9n5nZhCHxpmKOPKYO8w4I04vHtYY41ys\" (f0 boolean, f1 blob, f2 smallint)", keyspace)); - - cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl3448511221048049990 (pk0 bigint, pk1 text, ck0 bigint, s0 frozen<list<frozen<list<time>>>> static, " + - "v0 'org.apache.cassandra.db.marshal.LexicalUUIDType', v1 frozen<tuple<frozen<\"tOGqK49dTH9n5nZhCHxpmKOPKYO8w4I04vHtYY41ys\">, vector<timeuuid, 1>>>, PRIMARY KEY ((pk0, pk1), ck0)) WITH CLUSTERING ORDER BY (ck0 DESC) AND read_repair = 'NONE'", keyspace)); - cluster.get(1).executeInternal(withKeyspace("UPDATE %s.tbl3448511221048049990 USING TIMESTAMP 2 SET s0=[['03:28:16.047802044']] WHERE pk0 = 7137864754153440313 AND pk1 = '뢸镝蔥'", keyspace)); - cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl3448511221048049990 (pk0, pk1, ck0, v0) VALUES (7137864754153440313, '뢸镝蔥', 7732824726196172505, 0x0000000000004d00af00000000000000) USING TIMESTAMP 3", keyspace)); + cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl (pk0 bigint, pk1 text, ck0 bigint, s0 frozen<list<frozen<list<time>>>> static, " + + "v0 'org.apache.cassandra.db.marshal.LexicalUUIDType', PRIMARY KEY ((pk0, pk1), ck0)) WITH CLUSTERING ORDER BY (ck0 DESC) AND read_repair = 'NONE'", keyspace)); + cluster.forEach(i -> i.nodetoolResult("disableautocompaction", keyspace, "tbl").asserts().success()); + + cluster.get(1).executeInternal(withKeyspace("UPDATE %s.tbl USING TIMESTAMP 2 SET s0=[['03:28:16.047802044']] WHERE pk0 = 7137864754153440313 AND pk1 = '뢸镝蔥'", keyspace)); + cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, v0) VALUES (7137864754153440313, '뢸镝蔥', 7732824726196172505, 0x0000000000004d00af00000000000000) USING TIMESTAMP 3", keyspace)); - cluster.get(2).executeInternal(withKeyspace("UPDATE %s.tbl3448511221048049990 USING TIMESTAMP 5 SET s0=[['01:28:35.208066780', '05:25:43.184564123'], ['16:14:58.464860367', '13:59:53.463983006', '10:32:10.674489767']] WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲'", keyspace)); - cluster.get(3).executeInternal(withKeyspace("INSERT INTO %s.tbl3448511221048049990 (pk0, pk1, s0) VALUES (7137864754153440313, '뢸镝蔥', [['11:13:31.615781929', '02:03:35.298191424', '21:32:35.861361643']]) USING TIMESTAMP 6", keyspace)); + cluster.get(2).executeInternal(withKeyspace("UPDATE %s.tbl USING TIMESTAMP 5 " + + "SET s0=[['01:28:35.208066780', '05:25:43.184564123'], ['16:14:58.464860367', '13:59:53.463983006', '10:32:10.674489767']] " + + "WHERE pk0 = 1699976006349660742 AND pk1 = 'ጬ葲'", keyspace)); - String select = withKeyspace("SELECT * FROM %s.tbl3448511221048049990 WHERE token(pk0, pk1) BETWEEN token(1699976006349660742, 'ጬ葲') AND token(7137864754153440313, '뢸镝蔥') PER PARTITION LIMIT 297 LIMIT 954", keyspace); + cluster.get(3).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, s0) VALUES (7137864754153440313, '뢸镝蔥', [['11:13:31.615781929', '02:03:35.298191424', '21:32:35.861361643']]) USING TIMESTAMP 6", keyspace)); + + String select = withKeyspace("SELECT * FROM %s.tbl WHERE token(pk0, pk1) BETWEEN token(1699976006349660742, 'ጬ葲') AND token(7137864754153440313, '뢸镝蔥') PER PARTITION LIMIT 297 LIMIT 954", keyspace); cluster.coordinator(1).execute(select, ConsistencyLevel.ALL); - select = withKeyspace("SELECT pk0, pk1, ck0 FROM %s.tbl3448511221048049990 WHERE pk0 = 7137864754153440313 PER PARTITION LIMIT 21 LIMIT 914 ALLOW FILTERING", keyspace); + select = withKeyspace("SELECT pk0, pk1, ck0 FROM %s.tbl WHERE pk0 = 7137864754153440313 PER PARTITION LIMIT 21 LIMIT 914 ALLOW FILTERING", keyspace); Iterator<Object[]> pagingResult = cluster.coordinator(3).executeWithPaging(select, ConsistencyLevel.ALL, 1); - // pk0 | pk1 | ck0 | s0 | v0 | v1 - // 7137864754153440313 | '뢸镝蔥' | 7732824726196172505 | [['11:13:31.615781929', '02:03:35.298191424', '21:32:35.861361643']] | 0x0000000000004d00af00000000000000 | null assertRows(pagingResult, row(7137864754153440313L, "뢸镝蔥", 7732824726196172505L)); } - /* - * accord.utils.Property$PropertyError: Property error detected: - * Seed = 3448512096918920638 - * Examples = 1 - * Pure = true - * Error: Unexpected results for query: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(4217, -2.2644046491088394E265) AND token(pk0, pk1) < token(-16150, 1.0086497658456055E-263) PER PARTITION LIMIT 89 LIMIT 832 - * Steps: 400 - * Values: - * State: - * Setup: - * Config: - * sstable: - * selected_format: big - * CREATE KEYSPACE IF NOT EXISTS ks1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'; - * CREATE TYPE IF NOT EXISTS ks1."6iiPTW_Oe1eyqpNyLtoSbn" ( - * f0 smallint, - * f1 uuid - * );; - * CREATE TYPE IF NOT EXISTS ks1."tjQi_gfccLmvemLRbkg" ( - * f0 uuid - * );; - * CREATE TABLE ks1.tbl ( - * pk0 smallint, - * pk1 double, - * ck0 int, - * s0 text static, - * s1 map<frozen<map<time, double>>, bigint> static, - * v0 frozen<map<timestamp, timeuuid>>, - * v1 frozen<set<uuid>>, - * v2 uuid, - * v3 frozen<tuple<vector<date, 1>, frozen<"6iiPTW_Oe1eyqpNyLtoSbn">, frozen<"tjQi_gfccLmvemLRbkg">>>, - * v4 smallint, - * PRIMARY KEY ((pk0, pk1), ck0) - * ) WITH CLUSTERING ORDER BY (ck0 ASC) - * AND read_repair = 'NONE' - * AND transactional_mode = 'off' - * AND transactional_migration_from = 'none' - * History: - * 1: DELETE s1 FROM ks1.tbl USING TIMESTAMP 1 WHERE pk0 = 4217 AND pk1 = -2.2644046491088394E265 -- on node2 - * 2: INSERT INTO ks1.tbl (pk0, pk1, s1) VALUES (-16150, 1.0086497658456055E-263, {{'07:58:45.097000261': -2.1560404491129945E225}: 588520316827010420}) USING TIMESTAMP 2 -- on node2 - * 3: SELECT * FROM ks1.tbl WHERE pk0 = -16150 AND pk1 = 1.0086497658456055E-263 PER PARTITION LIMIT 156 LIMIT 938 -- By Partition Key, on node1, fetch size 5000 - * 4: SELECT writetime(s0), writetime(s1), writetime(v0), writetime(v1), writetime(v2), writetime(v3), writetime(v4) FROM ks1.tbl - * 5: SELECT writetime(s0), writetime(s1), writetime(v0), writetime(v1), writetime(v2), writetime(v3), writetime(v4) FROM ks1.tbl - * 6: SELECT * FROM ks1.tbl PER PARTITION LIMIT 996 LIMIT 592 -- full table scan, on node1 - * 7: SELECT * FROM ks1.tbl PER PARTITION LIMIT 785 LIMIT 299 -- full table scan, on node3 - * 8: SELECT * FROM ks1.tbl WHERE pk0 = -16150 AND pk1 = 1.0086497658456055E-263 PER PARTITION LIMIT 879 LIMIT 770 -- By Partition Key, on node1, fetch size 100 - * 9: SELECT writetime(s0), writetime(s1), writetime(v0), writetime(v1), writetime(v2), writetime(v3), writetime(v4) FROM ks1.tbl - * 10: SELECT * FROM ks1.tbl WHERE pk0 = -16150 AND pk1 = 1.0086497658456055E-263 PER PARTITION LIMIT 125 LIMIT 406 -- By Partition Key, on node1, fetch size 1 - * 11: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) = token(-16150, 1.0086497658456055E-263) PER PARTITION LIMIT 999 LIMIT 939 -- by token, on node3 - * 12: SELECT writetime(s0), writetime(s1), writetime(v0), writetime(v1), writetime(v2), writetime(v3), writetime(v4) FROM ks1.tbl - * 13: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > -9223372036854775808 AND token(pk0, pk1) < -3253266623840194343 PER PARTITION LIMIT 362 LIMIT 270 -- min token range, on node1, fetch size 1 - * 14: INSERT INTO ks1.tbl (pk0, pk1, ck0, s0, s1, v0) VALUES (4217, -2.2644046491088394E265, -2077196678, '᱔惔겎꣘', null, {'1972-11-15T21:50:31.510Z': 00000000-0000-1100-aa00-000000000000, '1973-10-01T03:02:11.345Z': 00000000-0000-1900-b500-000000000000, '2053-09-18T06:21:05.430Z': 00000000-0000-1900-a100-000000000000}) USING TIMESTAMP 3 -- on node3 - * 15: SELECT writetime(s0), writetime(s1), writetime(v0), writetime(v1), writetime(v2), writetime(v3), writetime(v4) FROM ks1.tbl - * 16: SELECT writetime(s0), writetime(s1), writetime(v0), writetime(v1), writetime(v2), writetime(v3), writetime(v4) FROM ks1.tbl - * 17: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) BETWEEN -3253266623840194343 AND -9223372036854775808 PER PARTITION LIMIT 443 LIMIT 895 -- min token range, on node2, fetch size 1 - * 18: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(4217, -2.2644046491088394E265) AND token(pk0, pk1) <= token(-16150, 1.0086497658456055E-263) PER PARTITION LIMIT 747 LIMIT 23 -- by token range, on node3, fetch size 1 - * 19: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) >= -9223372036854775808 AND token(pk0, pk1) < -3253266623840194343 PER PARTITION LIMIT 995 LIMIT 950 -- min token range, on node1, fetch size 5000 - * 20: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(4217, -2.2644046491088394E265) AND token(pk0, pk1) < token(-16150, 1.0086497658456055E-263) PER PARTITION LIMIT 89 LIMIT 832 -- by token range, on node3, fetch size 10 - * - * Caused by: java.lang.AssertionError: Unexpected results for query: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(4217, -2.2644046491088394E265) AND token(pk0, pk1) < token(-16150, 1.0086497658456055E-263) PER PARTITION LIMIT 89 LIMIT 832 - * Caused by: java.lang.AssertionError: Unexpected rows found: - * pk0 | pk1 | ck0 | s0 | s1 | v0 | v1 | v2 | v3 | v4 - * 4217 | -2.2644046491088394E265 | -2077196678 | '᱔惔겎꣘' | null | {'1972-11-15T21:50:31.510Z': 00000000-0000-1100-aa00-000000000000, '1973-10-01T03:02:11.345Z': 00000000-0000-1900-b500-000000000000, '2053-09-18T06:21:05.430Z': 00000000-0000-1900-a100-000000000000} | null | null | null | null - * - * Expected: - * pk0 | pk1 | ck0 | s0 | s1 | v0 | v1 | v2 | v3 | v4 - */ @Test - public void test3448512096918920638() + public void testTokenRangeOnFullPartitionKeysWithPerPartitionLimitEmpty() { - String keyspace = "test3448512096918920638"; + String keyspace = "token_range_per_partition_limit_empty"; cluster.schemaChange(withKeyspace("CREATE KEYSPACE %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'", keyspace)); cluster.schemaChange(withKeyspace("CREATE TYPE IF NOT EXISTS %s.\"6iiPTW_Oe1eyqpNyLtoSbn\" (f0 smallint, f1 uuid)", keyspace)); cluster.schemaChange(withKeyspace("CREATE TYPE IF NOT EXISTS %s.\"tjQi_gfccLmvemLRbkg\" (f0 uuid)", keyspace)); - cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl3448512096918920638 (pk0 smallint, pk1 double, ck0 int, s0 text static, s1 map<frozen<map<time, double>>, bigint> static, " + + cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl (pk0 smallint, pk1 double, ck0 int, s0 text static, s1 map<frozen<map<time, double>>, bigint> static, " + "v0 frozen<map<timestamp, timeuuid>>, v1 frozen<set<uuid>>, v2 uuid, v3 frozen<tuple<vector<date, 1>, frozen<\"6iiPTW_Oe1eyqpNyLtoSbn\">, " + "frozen<\"tjQi_gfccLmvemLRbkg\">>>, v4 smallint, PRIMARY KEY ((pk0, pk1), ck0)) WITH CLUSTERING ORDER BY (ck0 ASC) AND read_repair = 'NONE'", keyspace)); + cluster.forEach(i -> i.nodetoolResult("disableautocompaction", keyspace, "tbl").asserts().success()); - cluster.get(2).executeInternal(withKeyspace("DELETE s1 FROM %s.tbl3448512096918920638 USING TIMESTAMP 1 WHERE pk0 = 4217 AND pk1 = -2.2644046491088394E265", keyspace)); - cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl3448512096918920638 (pk0, pk1, s1) VALUES (-16150, 1.0086497658456055E-263, {{'07:58:45.097000261': -2.1560404491129945E225}: 588520316827010420}) USING TIMESTAMP 2", keyspace)); - cluster.get(3).executeInternal(withKeyspace("INSERT INTO %s.tbl3448512096918920638 (pk0, pk1, ck0, s0, s1, v0) VALUES (4217, -2.2644046491088394E265, -2077196678, '᱔惔겎꣘', null, {'1972-11-15T21:50:31.510Z': 00000000-0000-1100-aa00-000000000000, '1973-10-01T03:02:11.345Z': 00000000-0000-1900-b500-000000000000, '2053-09-18T06:21:05.430Z': 00000000-0000-1900-a100-000000000000}) USING TIMESTAMP 3", keyspace)); + cluster.get(2).executeInternal(withKeyspace("DELETE s1 FROM %s.tbl USING TIMESTAMP 1 WHERE pk0 = 4217 AND pk1 = -2.2644046491088394E265", keyspace)); + cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, s1) VALUES (-16150, 1.0086497658456055E-263, {{'07:58:45.097000261': -2.1560404491129945E225}: 588520316827010420}) USING TIMESTAMP 2", keyspace)); + cluster.get(3).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, s0, s1, v0) " + + "VALUES (4217, -2.2644046491088394E265, -2077196678, '᱔惔겎꣘', null, {'1972-11-15T21:50:31.510Z': 00000000-0000-1100-aa00-000000000000, '1973-10-01T03:02:11.345Z': 00000000-0000-1900-b500-000000000000, '2053-09-18T06:21:05.430Z': 00000000-0000-1900-a100-000000000000}) USING TIMESTAMP 3", keyspace)); - String select = withKeyspace("SELECT * FROM %s.tbl3448512096918920638 WHERE token(pk0, pk1) >= -9223372036854775808 AND token(pk0, pk1) < -3253266623840194343 PER PARTITION LIMIT 995 LIMIT 950", keyspace); + String select = withKeyspace("SELECT * FROM %s.tbl WHERE token(pk0, pk1) >= -9223372036854775808 AND token(pk0, pk1) < -3253266623840194343 PER PARTITION LIMIT 995 LIMIT 950", keyspace); cluster.coordinator(1).executeWithPaging(select, ConsistencyLevel.ALL, 5000); - // This seems to fail only sporadically... - select = withKeyspace("SELECT * FROM %s.tbl3448512096918920638 WHERE token(pk0, pk1) > token(4217, -2.2644046491088394E265) AND token(pk0, pk1) < token(-16150, 1.0086497658456055E-263) PER PARTITION LIMIT 89 LIMIT 832", keyspace); + // TODO: This seems to fail only sporadically. It may not add value, and we could remove it after CASSANDRA-20954 if we feel there is enough coverage otherwise... + select = withKeyspace("SELECT * FROM %s.tbl WHERE token(pk0, pk1) > token(4217, -2.2644046491088394E265) AND token(pk0, pk1) < token(-16150, 1.0086497658456055E-263) PER PARTITION LIMIT 89 LIMIT 832", keyspace); Iterator<Object[]> pagingResult = cluster.coordinator(3).executeWithPaging(select, ConsistencyLevel.ALL, 10); assertRows(pagingResult); } /* - * Seed = 3448154736661599106 - * Examples = 1 - * Pure = true - * Error: An unexpected error occurred server side on /127.0.0.2:9042: java.lang.IllegalStateException: Multiple partitions received for DecoratedKey(2680073734780247800, 000253ed0000100000000000004100ba0000000000000000) - * Steps: 400 - * Values: - * State: - * Setup: - * Config: - * sstable: - * selected_format: bti - * CREATE KEYSPACE IF NOT EXISTS ks1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'; - * CREATE TABLE ks1.tbl ( - * pk0 smallint, - * pk1 uuid, - * ck0 'org.apache.cassandra.db.marshal.LexicalUUIDType', - * ck1 timeuuid, - * v0 frozen<set<vector<ascii, 2>>>, - * v1 vector<vector<inet, 2>, 1>, - * PRIMARY KEY ((pk0, pk1), ck0, ck1) - * ) WITH CLUSTERING ORDER BY (ck0 DESC, ck1 DESC) - * AND read_repair = 'NONE' - * AND transactional_mode = 'off' - * AND transactional_migration_from = 'none' - * History: - * 1: SELECT * FROM ks1.tbl -- full table scan, on node1 - * 2: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, v0, v1) VALUES (24199, 00000000-0000-4900-9c00-000000000000, 0x0000000000001800b700000000000000, 00000000-0000-1000-8f00-000000000000, {['\u0015\u001AE', '@V\u0002J:hx\u0011']}, [['34.60.146.80', 'a11e:4e06:c09f:8a8:f4f2:ba6f:683d:5e6e']]) USING TIMESTAMP 1 -- on node2 - * 3: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(24199, 00000000-0000-4900-9c00-000000000000) AND token(pk0, pk1) < token(24199, 00000000-0000-4900-9c00-000000000000) PER PARTITION LIMIT 83 -- by token range, on node1, fetch size 1 - * 4: SELECT * FROM ks1.tbl WHERE pk0 = 24199 AND pk1 = 00000000-0000-4900-9c00-000000000000 AND ck0 = 0x0000000000001800b700000000000000 AND ck1 = 00000000-0000-1000-8f00-000000000000 -- By Primary Key, on node2 - * 5: SELECT * FROM ks1.tbl LIMIT 806 -- full table scan, on node3, fetch size 1 - * 6: DELETE FROM ks1.tbl USING TIMESTAMP 2 WHERE pk0 = -16322 AND pk1 = 00000000-0000-4400-ba00-000000000000 -- on node3 - * 7: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(24199, 00000000-0000-4900-9c00-000000000000) AND token(pk0, pk1) <= token(24199, 00000000-0000-4900-9c00-000000000000) PER PARTITION LIMIT 630 -- by token range, on node2, fetch size 10 - * 8: SELECT * FROM ks1.tbl WHERE v0 <= {['\u0015\u001AE', '@V\u0002J:hx\u0011']} ALLOW FILTERING -- v0 frozen<set<vector<ascii, 2>>>, on node2, fetch size 5000 - * 9: SELECT * FROM ks1.tbl WHERE pk1 <= 00000000-0000-4900-9c00-000000000000 ALLOW FILTERING -- pk1 uuid, on node2, fetch size 1 - * 10: SELECT * FROM ks1.tbl WHERE pk1 > 00000000-0000-4900-9c00-000000000000 PER PARTITION LIMIT 796 ALLOW FILTERING -- pk1 uuid, on node3, fetch size 10 - * 11: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(24199, 00000000-0000-4900-9c00-000000000000) AND token(pk0, pk1) < token(24199, 00000000-0000-4900-9c00-000000000000) PER PARTITION LIMIT 45 LIMIT 699 -- by token range, on node3 - * 12: UPDATE ks1.tbl USING TIMESTAMP 3 SET v0={['g\u0008\u0009"u', '\u0011)\u0013'], ['zOA&', '\u00019']}, v1=[['56.79.104.226', '106.255.46.196']] WHERE pk0 = 24199 AND pk1 = 00000000-0000-4900-9c00-000000000000 AND ck0 IN (0x00000000000015008100000000000000) AND ck1 = 00000000-0000-1b00-bd00-000000000000 -- on node3 - * 13: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) > token(24199, 00000000-0000-4900-9c00-000000000000) AND token(pk0, pk1) <= token(24199, 00000000-0000-4900-9c00-000000000000) PER PARTITION LIMIT 196 LIMIT 868 -- by token range, on node3 - * 14: SELECT * FROM ks1.tbl WHERE ck1 > 00000000-0000-1b00-bd00-000000000000 PER PARTITION LIMIT 361 ALLOW FILTERING -- ck1 timeuuid (reversed), on node2, fetch size 1 - * 15: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, v0, v1) VALUES (21485, 00000000-0000-4100-ba00-000000000000, 0x0000000000004c00a900000000000000, 00000000-0000-1200-b700-000000000000, {['8[y', 'J}T,8'], ['\LPG\u0012\u0015? Q', '\u000DB?[)']}, [['5d78:5bc2:d651:9c78:91e9:a1e6:7247:73c9', '222.212.186.106']]) USING TIMESTAMP 4 -- on node1 - * 16: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) >= token(24199, 00000000-0000-4900-9c00-000000000000) AND token(pk0, pk1) <= token(21485, 00000000-0000-4100-ba00-000000000000) PER PARTITION LIMIT 139 LIMIT 587 -- by token range, on node2, fetch size 100 + INFO [node2_isolatedExecutor:1] 2025-10-21T17:32:27,840 SubstituteLogger.java:222 - ERROR [node2_isolatedExecutor:1] node2 2025-10-21T17:32:27,832 JVMStabilityInspector.java:72 - Exception in thread Thread[node2_isolatedExecutor:1,5,isolatedExecutor] + java.lang.IllegalStateException: Multiple partitions received for DecoratedKey(2680073734780247800, 000253ed0000100000000000004100ba0000000000000000) + at org.apache.cassandra.db.partitions.PartitionIterators$1.reduce(PartitionIterators.java:126) + at org.apache.cassandra.db.partitions.PartitionIterators$1.reduce(PartitionIterators.java:112) + at org.apache.cassandra.utils.MergeIterator$Candidate.consume(MergeIterator.java:439) + at org.apache.cassandra.utils.MergeIterator$ManyToOne.consume(MergeIterator.java:242) + at org.apache.cassandra.utils.MergeIterator$ManyToOne.computeNext(MergeIterator.java:186) + at org.apache.cassandra.utils.AbstractIterator.hasNext(AbstractIterator.java:47) + at org.apache.cassandra.db.partitions.PartitionIterators$2.computeNext(PartitionIterators.java:145) + at org.apache.cassandra.db.partitions.PartitionIterators$2.computeNext(PartitionIterators.java:141) */ @Test - public void test3448154736661599106() + public void testTokenRangeOnFullPartitionKeysWithPerPartitionLimitNonEmpty() { - String keyspace = "test3448154736661599106"; + String keyspace = "token_range_per_partition_limit_non_empty"; cluster.schemaChange(withKeyspace("CREATE KEYSPACE %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'", keyspace)); - cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl3448154736661599106 (pk0 smallint, pk1 uuid, ck0 'org.apache.cassandra.db.marshal.LexicalUUIDType', ck1 timeuuid, v0 frozen<set<vector<ascii, 2>>>, v1 vector<vector<inet, 2>, 1>, PRIMARY KEY ((pk0, pk1), ck0, ck1)) WITH CLUSTERING ORDER BY (ck0 DESC, ck1 DESC) AND read_repair = 'NONE'", keyspace)); - - cluster.coordinator(1).execute(withKeyspace("SELECT * FROM %s.tbl3448154736661599106", keyspace), ConsistencyLevel.ALL); - cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl3448154736661599106 (pk0, pk1, ck0, ck1, v0, v1) VALUES (24199, 00000000-0000-4900-9c00-000000000000, 0x0000000000001800b700000000000000, 00000000-0000-1000-8f00-000000000000, {['\\u0015\\u001AE', '@V\\u0002J:hx\\u0011']}, [['34.60.146.80', 'a11e:4e06:c09f:8a8:f4f2:ba6f:683d:5e6e']]) USING TIMESTAMP 1", keyspace)); + cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl (pk0 smallint, pk1 uuid, ck0 'org.apache.cassandra.db.marshal.LexicalUUIDType', ck1 timeuuid, v0 int, PRIMARY KEY ((pk0, pk1), ck0, ck1)) WITH CLUSTERING ORDER BY (ck0 DESC, ck1 DESC) AND read_repair = 'NONE'", keyspace)); + cluster.forEach(i -> i.nodetoolResult("disableautocompaction", keyspace, "tbl").asserts().success()); + + cluster.coordinator(1).execute(withKeyspace("SELECT * FROM %s.tbl", keyspace), ConsistencyLevel.ALL); + cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, ck1, v0) VALUES (24199, 00000000-0000-4900-9c00-000000000000, 0x0000000000001800b700000000000000, 00000000-0000-1000-8f00-000000000000, 1) USING TIMESTAMP 1", keyspace)); - cluster.get(3).executeInternal(withKeyspace("DELETE FROM %s.tbl3448154736661599106 USING TIMESTAMP 2 WHERE pk0 = -16322 AND pk1 = 00000000-0000-4400-ba00-000000000000", keyspace)); - cluster.get(3).executeInternal(withKeyspace("UPDATE %s.tbl3448154736661599106 USING TIMESTAMP 3 SET v0={['g\\u0008\\u0009\"u', '\\u0011)\\u0013'], ['zOA&', '\\u00019']}, v1=[['56.79.104.226', '106.255.46.196']] WHERE pk0 = 24199 AND pk1 = 00000000-0000-4900-9c00-000000000000 AND ck0 IN (0x00000000000015008100000000000000) AND ck1 = 00000000-0000-1b00-bd00-000000000000", keyspace)); + cluster.get(3).executeInternal(withKeyspace("DELETE FROM %s.tbl USING TIMESTAMP 2 WHERE pk0 = -16322 AND pk1 = 00000000-0000-4400-ba00-000000000000", keyspace)); + cluster.get(3).executeInternal(withKeyspace("UPDATE %s.tbl USING TIMESTAMP 3 SET v0=2 WHERE pk0 = 24199 AND pk1 = 00000000-0000-4900-9c00-000000000000 AND ck0 IN (0x00000000000015008100000000000000) AND ck1 = 00000000-0000-1b00-bd00-000000000000", keyspace)); - cluster.get(1).executeInternal(withKeyspace("INSERT INTO %s.tbl3448154736661599106 (pk0, pk1, ck0, ck1, v0, v1) VALUES (21485, 00000000-0000-4100-ba00-000000000000, 0x0000000000004c00a900000000000000, 00000000-0000-1200-b700-000000000000, {['8[y', 'J}T,8'], ['\\LPG\\u0012\\u0015? Q', '\\u000DB?[)']}, [['5d78:5bc2:d651:9c78:91e9:a1e6:7247:73c9', '222.212.186.106']]) USING TIMESTAMP 4", keyspace)); + cluster.get(1).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, ck1, v0) VALUES (21485, 00000000-0000-4100-ba00-000000000000, 0x0000000000004c00a900000000000000, 00000000-0000-1200-b700-000000000000, 3) USING TIMESTAMP 4", keyspace)); - String select = withKeyspace("SELECT pk0 FROM %s.tbl3448154736661599106 WHERE token(pk0, pk1) >= token(24199, 00000000-0000-4900-9c00-000000000000) AND token(pk0, pk1) <= token(21485, 00000000-0000-4100-ba00-000000000000) PER PARTITION LIMIT 139 LIMIT 587", keyspace); + String select = withKeyspace("SELECT pk0 FROM %s.tbl WHERE token(pk0, pk1) >= token(24199, 00000000-0000-4900-9c00-000000000000) AND token(pk0, pk1) <= token(21485, 00000000-0000-4100-ba00-000000000000) PER PARTITION LIMIT 139 LIMIT 587", keyspace); Iterator<Object[]> pagingResult = cluster.coordinator(2).executeWithPaging(select, ConsistencyLevel.ALL, 100); assertRows(pagingResult, row((short) 24199), row((short) 24199), row((short) 21485)); } + @Test + public void testTextRangeFilterWithHighLimit() + { + String keyspace = "text_range_filter_with_high_limit"; + cluster.schemaChange(withKeyspace("CREATE KEYSPACE %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'", keyspace)); + cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl (pk0 bigint, pk1 smallint, ck0 inet, ck1 double, v3 text, PRIMARY KEY ((pk0, pk1), ck0, ck1)) WITH CLUSTERING ORDER BY (ck0 DESC, ck1 ASC) AND read_repair = 'NONE'", keyspace)); + cluster.forEach(i -> i.nodetoolResult("disableautocompaction", keyspace, "tbl").asserts().success()); + + cluster.get(2).executeInternal(withKeyspace("DELETE FROM %s.tbl USING TIMESTAMP 1 WHERE pk0 = -3279716623783136579 AND pk1 = -25927", keyspace)); + cluster.get(1).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, ck1, v3) VALUES (3754566280912306098, -28139, '9c05:10e3:8a10:dd12:b357:6f0b:736b:c3d', 6.248336852153311E-201 * -1.711074442164963E-123, '⩭爭ᣪ흟赃') USING TIMESTAMP 3", keyspace)); + + cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, ck1, v3) " + + "VALUES (-3279716623783136579, -25927, '9191:f315:92eb:f9b8:ebbe:6456:10f4:ca6c', -1.8918823041672677E168 - -3.900839250480109E-214, '吮植' + '䛆') USING TIMESTAMP 4", keyspace)); + + cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, ck1, v3) VALUES (5882007412747503201, 3756, '4a4b:7deb:98f4:a0ab:f5d0:43f:ab2b:2628', 6.334562923798137E276 * -4.6068109424772055E-29, '㺍ັୁ' + '䝱\u000E݂ụ') USING TIMESTAMP 6", keyspace)); + + String select = withKeyspace("SELECT * FROM %s.tbl WHERE pk0 > 5882007412747503201 LIMIT 764 ALLOW FILTERING", keyspace); + cluster.coordinator(1).executeWithPaging(select, ConsistencyLevel.ALL, 1); + + select = withKeyspace("SELECT pk0, pk1 FROM %s.tbl WHERE v3 > '브ﭶ熒讘ꯄ謏??䎸锭商Ử豫羀펛葕䝆㛔' LIMIT 785 ALLOW FILTERING", keyspace); + Iterator<Object[]> pagingResult = cluster.coordinator(2).executeWithPaging(select, ConsistencyLevel.ALL, 1); + assertRows(pagingResult, row(3754566280912306098L, (short) -28139)); + } + + /* + INFO [node2_ReadStage-2] 2025-10-21T16:33:02,997 SubstituteLogger.java:222 - ERROR 11:33:02,996 Error while processing read + java.lang.NullPointerException: null + at org.apache.cassandra.service.reads.tracked.FilteredFollowupRead.lambda$start$1(FilteredFollowupRead.java:155) + at org.apache.cassandra.utils.concurrent.ListenerList$CallbackBiConsumerListener.run(ListenerList.java:267) + at org.apache.cassandra.concurrent.ImmediateExecutor.execute(ImmediateExecutor.java:140) + at org.apache.cassandra.utils.concurrent.ListenerList.safeExecute(ListenerList.java:190) + at org.apache.cassandra.utils.concurrent.ListenerList.notifyListener(ListenerList.java:181) + at org.apache.cassandra.utils.concurrent.ListenerList$CallbackBiConsumerListener.notifySelf(ListenerList.java:274) + at org.apache.cassandra.utils.concurrent.ListenerList.lambda$notifyExclusive$0(ListenerList.java:148) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:242) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:235) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:225) + at org.apache.cassandra.utils.concurrent.ListenerList.notifyExclusive(ListenerList.java:148) + at org.apache.cassandra.utils.concurrent.ListenerList.notify(ListenerList.java:113) + at org.apache.cassandra.utils.concurrent.AsyncFuture.trySet(AsyncFuture.java:102) + at org.apache.cassandra.utils.concurrent.AbstractFuture.trySuccess(AbstractFuture.java:143) + at org.apache.cassandra.utils.concurrent.FutureCombiner.trySuccess(FutureCombiner.java:189) + at org.apache.cassandra.utils.concurrent.FutureCombiner$Listener.onCompletion(FutureCombiner.java:81) + at org.apache.cassandra.utils.concurrent.FutureCombiner$Listener.operationComplete(FutureCombiner.java:76) + at org.apache.cassandra.utils.concurrent.FutureCombiner$FailFastListener.operationComplete(FutureCombiner.java:107) + at org.apache.cassandra.utils.concurrent.ListenerList.notifyListener(ListenerList.java:158) + at org.apache.cassandra.utils.concurrent.ListenerList.notifyListener(ListenerList.java:172) + at org.apache.cassandra.utils.concurrent.ListenerList$GenericFutureListenerList.notifySelf(ListenerList.java:214) + at org.apache.cassandra.utils.concurrent.ListenerList.lambda$notifyExclusive$0(ListenerList.java:148) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:242) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:235) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:225) + at org.apache.cassandra.utils.concurrent.ListenerList.notifyExclusive(ListenerList.java:148) + at org.apache.cassandra.utils.concurrent.ListenerList.notify(ListenerList.java:113) + at org.apache.cassandra.utils.concurrent.AsyncFuture.trySet(AsyncFuture.java:102) + at org.apache.cassandra.utils.concurrent.AbstractFuture.trySuccess(AbstractFuture.java:143) + at org.apache.cassandra.utils.concurrent.AsyncPromise.trySuccess(AsyncPromise.java:117) + at org.apache.cassandra.service.reads.tracked.TrackedRead.onResponse(TrackedRead.java:339) + at org.apache.cassandra.service.reads.tracked.TrackedRead.lambda$start$2(TrackedRead.java:291) + at org.apache.cassandra.utils.concurrent.ListenerList$CallbackBiConsumerListener.run(ListenerList.java:267) + at org.apache.cassandra.concurrent.ImmediateExecutor.execute(ImmediateExecutor.java:140) + at org.apache.cassandra.utils.concurrent.ListenerList.safeExecute(ListenerList.java:190) + at org.apache.cassandra.utils.concurrent.ListenerList.notifyListener(ListenerList.java:181) + at org.apache.cassandra.utils.concurrent.ListenerList$CallbackBiConsumerListener.notifySelf(ListenerList.java:274) + at org.apache.cassandra.utils.concurrent.ListenerList.lambda$notifyExclusive$0(ListenerList.java:148) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:242) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:235) + at org.apache.cassandra.utils.concurrent.IntrusiveStack.forEach(IntrusiveStack.java:225) + at org.apache.cassandra.utils.concurrent.ListenerList.notifyExclusive(ListenerList.java:148) + at org.apache.cassandra.utils.concurrent.ListenerList.notify(ListenerList.java:113) + at org.apache.cassandra.utils.concurrent.AsyncFuture.trySet(AsyncFuture.java:102) + at org.apache.cassandra.utils.concurrent.AbstractFuture.trySuccess(AbstractFuture.java:143) + at org.apache.cassandra.utils.concurrent.AsyncPromise.trySuccess(AsyncPromise.java:117) + at org.apache.cassandra.service.reads.tracked.TrackedLocalReads$Coordinator.complete(TrackedLocalReads.java:252) + */ + @Test + public void testRangeFilterOnFrozenSetNoLimit() + { + String keyspace = "range_filter_on_frozen_set_no_limit"; + cluster.schemaChange(withKeyspace("CREATE KEYSPACE %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3} AND replication_type='tracked'", keyspace)); + + cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl (pk0 int, pk1 boolean, ck0 inet, v1 int, v4 frozen<set<bigint>>, PRIMARY KEY ((pk0, pk1), ck0)) WITH CLUSTERING ORDER BY (ck0 DESC) AND read_repair = 'NONE'", keyspace)); + cluster.forEach(i -> i.nodetoolResult("disableautocompaction", keyspace, "tbl").asserts().success()); + + cluster.get(1).executeInternal(withKeyspace("UPDATE %s.tbl USING TIMESTAMP 3 SET v4={-4237118076428244729, -1815831816430314156} " + + "WHERE pk0 = -1256431887 AND pk1 = true AND ck0 IN ('c50:5c4d:35cb:1739:f958:8f83:5d95:963d', '7bf6:c19e:d3f2:8679:b3b3:377f:1ac8:1416', 'd035:5ffc:960c:1b8c:f4ed:a2cf:73f6:af9c')", keyspace)); + cluster.get(1).executeInternal(withKeyspace("INSERT INTO %s.tbl (pk0, pk1, ck0, v4) VALUES (-639885536, false, '238.234.202.249', {8383242616920701144}) USING TIMESTAMP 4", keyspace)); + + String select = withKeyspace("SELECT * FROM %s.tbl WHERE v1 = 3 ALLOW FILTERING", keyspace); + cluster.coordinator(3).executeWithPaging(select, ConsistencyLevel.ALL, 100); + + select = withKeyspace("SELECT * FROM %s.tbl WHERE v1 <= 3 LIMIT 175 ALLOW FILTERING", keyspace); + cluster.coordinator(3).executeWithPaging(select, ConsistencyLevel.ALL, 1); + + cluster.get(3).executeInternal(withKeyspace("UPDATE %s.tbl USING TIMESTAMP 7 SET v4={7721973864222015806} WHERE pk0 = -1256431887 AND pk1 = true AND ck0 = 'b318:85d4:d6a0:907:ff1e:9262:9635:ccfa'", keyspace)); + cluster.get(2).executeInternal(withKeyspace("DELETE FROM %s.tbl USING TIMESTAMP 8 WHERE pk0 = -639885536 AND pk1 = false", keyspace)); + + select = withKeyspace("SELECT pk0, pk1 FROM %s.tbl WHERE v4 > {-4237118076428244729, -1815831816430314156} ALLOW FILTERING", keyspace); + Iterator<Object[]> pagingResult = cluster.coordinator(2).executeWithPaging(select, ConsistencyLevel.ALL, 5000); + assertRows(pagingResult, row(-1256431887, true)); + } + public static String withKeyspace(String replaceIn, String keyspace) { return String.format(replaceIn, keyspace); diff --git a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java index 48fc9c259f..2cf832fb08 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java +++ b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java @@ -59,8 +59,7 @@ public class MutationTrackingUtils public static class IgnoreReasons { public static final String NO_RANGE_MOVEMENTS = "NO_RANGE_MOVEMENTS"; - - + public static final String NO_PER_PARTITION_RANGE_READ_LIMITS = "NO_PER_PARTITION_RANGE_READ_LIMITS"; } public static byte[] encodeId(MutationId id) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
