Details
-
Bug
-
Status: Open
-
Normal
-
Resolution: Unresolved
-
None
-
None
-
Normal
Description
Issue CASSANDRA-12127 changed the way the reversed comparator behaves. Before scrubbing tables with reversed clustering keys, requests with CAS won't apply (even if the condition is true).
Below is a simple scenario to reproduce it:
- use C* 2.1.14/2.2.6
- create the schema
CREATE KEYSPACE IF NOT EXISTS test_ks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}; USE test_ks; CREATE TABLE IF NOT EXISTS test_cf ( pid text, total int static, sid uuid, amount int, PRIMARY KEY ((pid), sid) ) WITH CLUSTERING ORDER BY (sid DESC);
- insert data
INSERT INTO test_cf (pid, sid, amount) VALUES ('1', b2495ad2-9b64-4aab-b000-2ed20dda60ab, 2); INSERT INTO test_cf (pid, total) VALUES ('1', 2);
- nodetool flush (this is necessary for the scenario to show the problem)
- upgrade to C* 2.1.20/2.2.12
- execute the following queries:
UPDATE test_cf SET total = 3 WHERE pid = '1' IF total = 2; UPDATE test_cf SET amount = 3 WHERE pid = '1' AND sid = b2495ad2-9b64-4aab-b000-2ed20dda60ab IF amount = 2;
Both statements won't be applied while they should be applied.
It seems related to the min/maxColumn sstable checks (before the scrubbing, the min is an empty array, after it is no more) which filter too many sstables.
The SliceQueryFilter.shouldInclude method filter too many SSTables.
Note: When doing a simple "SELECT total FROM test_cf WHERE pid ='1';" works well because the selected slices are different (and thus do not filter the sstables).
Note: This does not seem to affect the 3.0.X versions
Attachments
Attachments
Issue Links
- is related to
-
CASSANDRA-12127 Queries with empty ByteBuffer values in clustering column restrictions fail for non-composite compact tables
- Resolved