You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "David Capwell (Jira)" <ji...@apache.org> on 2025/02/04 18:28:00 UTC

[jira] [Commented] (CASSANDRA-20243) ALLOW FILTERING and SAI returned data that doesn't match the single column condition.

    [ https://issues.apache.org/jira/browse/CASSANDRA-20243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17923797#comment-17923797 ] 

David Capwell commented on CASSANDRA-20243:
-------------------------------------------

trying to shrink the history, here are my findings

Limiting to only the impacted partitions
{code}
    6: UPDATE ks1.tbl SET v0=00000000-0000-4f00-9700-000000000000, v1=true, v2=1105511709 * 1520454163, v3=0x88, v4='129.18.80.135' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4400-8900-000000000000 AND  ck1 = -3.9780536E-4 + -551104.9 -- on node2
    23: DELETE s0 FROM ks1.tbl WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 -- on node3
    26: UPDATE ks1.tbl SET v0=00000000-0000-4c00-ae00-000000000000, v2=-312382809 - 763152782, v3=0xb2e7b85d948c, v4='93fe:2b06:9d34:1be2:4962:5092:69ba:c21e', s0=-1.9764135E38 WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4a00-bd00-000000000000 AND  ck1 = -8.377661E27 -- on node1
    27: UPDATE ks1.tbl SET s0=8.537083E-17 - -2.6627855E-26, v0=00000000-0000-4100-8700-000000000000, v1=true, v2=1209803352, v3=0xc6, v4='dc5f:1749:6e74:509a:a3c5:9f4a:b1c3:3ccc' WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4700-9400-000000000000 AND  ck1 = 2.0577075E20 + -0.0016678165 -- on node3
    54: UPDATE ks1.tbl SET v4='222.121.87.71' WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4900-bc00-000000000000 AND  ck1 = -1.2753527E-34 -- on node2
    69: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0, v1, v2, v3, v4) VALUES (0x3db7b69ecdd6a6, -1459423004, 00000000-0000-4500-b300-000000000000, 2.4983933E23 - 2.8502192E28, -3.275344E-28 + -5.8791391E15, 00000000-0000-4200-9d00-000000000000, true, 1406841687 * 526394795, 0x66b2ed189ce7, '3e5d:1d00:c9b2:9060:6caa:c1fb:a03f:64fd') -- on node1
    85: UPDATE ks1.tbl SET s0=1.633698E-20 * 5.06841239E14, v0=00000000-0000-4300-ad00-000000000000, v1=true, v2=-897091260, v3=0x7f, v4='39.210.109.161' WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4600-8400-000000000000 AND  ck1 = -2.4864038E-13 -- on node2
    94: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0, v1, v2, v3, v4) VALUES (0x3db7b69ecdd6a6, -1459423004, 00000000-0000-4000-bd00-000000000000, -5.461435E-33, -1.3257327E-5, 00000000-0000-4100-bf00-000000000000, true, -479061530, 0xc095c6e222, '90dc:dac5:b94:b2b1:4821:9df9:b21a:8f0a') -- on node1
    130: DELETE FROM ks1.tbl WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 -- on node3
    135: DELETE FROM ks1.tbl WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 -- on node2
    160: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0, v1, v2, v4) VALUES (0x3db7b69ecdd6a6, -1459423004, 00000000-0000-4d00-bf00-000000000000, 7.572559E-7, 2.4385695E-27, 00000000-0000-4b00-b100-000000000000, true, -2094450079 - 1697550453, '376d:2dac:d441:3759:6736:1ee5:b60c:71be') -- on node1
    179: UPDATE ks1.tbl SET v3=0xe53fe39f, s0=-2.0550165E34 WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4400-9200-000000000000 AND  ck1 = 8.0946107E-38 -- on node3
    183: DELETE FROM ks1.tbl WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 -- on node2
    192: UPDATE ks1.tbl SET s0=-2.379433E-9, v0=00000000-0000-4f00-a500-000000000000, v1=true, v2=-1700713109 * -1608141439, v3=0x5d, v4='33.54.24.0' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4200-b600-000000000000 AND  ck1 = 2.3472485E-29 -- on node3
    203: UPDATE ks1.tbl SET s0=-2.59839216E17, v0=00000000-0000-4700-ac00-000000000000, v1=false, v2=1758201503, v3=0xdf, v4='40a5:cfbf:23ef:c168:de52:4ac4:c56d:6795' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4800-b200-000000000000 AND  ck1 = -2.8721284E-31 + 0.02575966 -- on node3
    245: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0, v1) VALUES (0x3027b5aa00a577, -652702739, 00000000-0000-4b00-8400-000000000000, -1.1792862E33, -1.7311013E-30, 00000000-0000-4a00-9b00-000000000000, false) -- on node3
    249: UPDATE ks1.tbl SET v1=false, s0=-2.1365409E-8 WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4c00-9a00-000000000000 AND  ck1 = 2.291301E19 + -7.706793E37 -- on node1
    280: DELETE FROM ks1.tbl WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4e00-b600-000000000000 AND  ck1 = -0.014325934 - -1.5835502E-24 -- on node2
    284: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, v1, v3, v4) VALUES (0x3db7b69ecdd6a6, -1459423004, 00000000-0000-4a00-8400-000000000000, -8.5766152E7 - -4.2274656E7, true, 0x9c50, '230.216.82.197') -- on node1
    287: DELETE FROM ks1.tbl WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4100-8700-000000000000 AND  ck1 = -2.7329296E32 * -4.3014748E-35 -- on node1
    316: DELETE FROM ks1.tbl WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4100-a300-000000000000 AND  ck1 = -1.17564762E9 - -3.8797236E-7 -- on node1
    317: UPDATE ks1.tbl SET v0=00000000-0000-4a00-b700-000000000000, v4='168.70.3.14' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4f00-a100-000000000000 AND  ck1 = 1.5297076E32 * -1.7596395E-37 -- on node2
    330: DELETE v0, v1, v2, v4 FROM ks1.tbl WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4c00-8500-000000000000 AND  ck1 = -0.3712973 -- on node2
    332: UPDATE ks1.tbl SET v1=true, v3=0x290b6b, v4='132.71.82.154', s0=4.2286161E16 WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4c00-8d00-000000000000 AND  ck1 = -7.529702E25 -- on node1
    340: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0, v1, v2, v3, v4) VALUES (0x3027b5aa00a577, -652702739, 00000000-0000-4b00-b700-000000000000, -1.3971943E28 - 1.7235932E-18, -0.48479807 * 14961.616, 00000000-0000-4b00-ab00-000000000000, false, -307641927 + 1912882892, 0x17, '184.107.134.42') -- on node3
    341: UPDATE ks1.tbl SET v1=false, v2=950206744, v3=0x1eabc8eb8f6b, v4='b7ed:26ed:ef02:6906:ee4b:f40:597:4b6b', s0=-8.0146734E18 WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4a00-af00-000000000000 AND  ck1 = 5.3815134E-12 -- on node3
    360: INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0, v1, v2, v3, v4) VALUES (0x3027b5aa00a577, -652702739, 00000000-0000-4300-8f00-000000000000, -1.02680205E24 - 4.461203E-29, -2.7431481E-8, 00000000-0000-4200-af00-000000000000, true, -1602192398, 0x14015b5702bec1d3ee, 'c4:1a6a:45b3:a542:e070:8684:b15d:4e14') -- on node3
    393: UPDATE ks1.tbl SET v3=0x003c, v4='126.229.32.3' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4600-9f00-000000000000 AND  ck1 = -3.854987E34 -- on node3
{code}

I removed all DELETE, the test still failed.  I removed all UPDATE and the test passed... so removed all INSERT and the test failed, here is the UPDATE only history 

{code}
    6: UPDATE ks1.tbl SET v0=00000000-0000-4f00-9700-000000000000, v1=true, v2=1105511709 * 1520454163, v3=0x88, v4='129.18.80.135' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4400-8900-000000000000 AND  ck1 = -3.9780536E-4 + -551104.9 -- on node2
    26: UPDATE ks1.tbl SET v0=00000000-0000-4c00-ae00-000000000000, v2=-312382809 - 763152782, v3=0xb2e7b85d948c, v4='93fe:2b06:9d34:1be2:4962:5092:69ba:c21e', s0=-1.9764135E38 WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4a00-bd00-000000000000 AND  ck1 = -8.377661E27 -- on node1
    27: UPDATE ks1.tbl SET s0=8.537083E-17 - -2.6627855E-26, v0=00000000-0000-4100-8700-000000000000, v1=true, v2=1209803352, v3=0xc6, v4='dc5f:1749:6e74:509a:a3c5:9f4a:b1c3:3ccc' WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4700-9400-000000000000 AND  ck1 = 2.0577075E20 + -0.0016678165 -- on node3
    54: UPDATE ks1.tbl SET v4='222.121.87.71' WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4900-bc00-000000000000 AND  ck1 = -1.2753527E-34 -- on node2
    85: UPDATE ks1.tbl SET s0=1.633698E-20 * 5.06841239E14, v0=00000000-0000-4300-ad00-000000000000, v1=true, v2=-897091260, v3=0x7f, v4='39.210.109.161' WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4600-8400-000000000000 AND  ck1 = -2.4864038E-13 -- on node2
    179: UPDATE ks1.tbl SET v3=0xe53fe39f, s0=-2.0550165E34 WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4400-9200-000000000000 AND  ck1 = 8.0946107E-38 -- on node3
    192: UPDATE ks1.tbl SET s0=-2.379433E-9, v0=00000000-0000-4f00-a500-000000000000, v1=true, v2=-1700713109 * -1608141439, v3=0x5d, v4='33.54.24.0' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4200-b600-000000000000 AND  ck1 = 2.3472485E-29 -- on node3
    203: UPDATE ks1.tbl SET s0=-2.59839216E17, v0=00000000-0000-4700-ac00-000000000000, v1=false, v2=1758201503, v3=0xdf, v4='40a5:cfbf:23ef:c168:de52:4ac4:c56d:6795' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4800-b200-000000000000 AND  ck1 = -2.8721284E-31 + 0.02575966 -- on node3
    249: UPDATE ks1.tbl SET v1=false, s0=-2.1365409E-8 WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4c00-9a00-000000000000 AND  ck1 = 2.291301E19 + -7.706793E37 -- on node1
    317: UPDATE ks1.tbl SET v0=00000000-0000-4a00-b700-000000000000, v4='168.70.3.14' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4f00-a100-000000000000 AND  ck1 = 1.5297076E32 * -1.7596395E-37 -- on node2
    332: UPDATE ks1.tbl SET v1=true, v3=0x290b6b, v4='132.71.82.154', s0=4.2286161E16 WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4c00-8d00-000000000000 AND  ck1 = -7.529702E25 -- on node1
    341: UPDATE ks1.tbl SET v1=false, v2=950206744, v3=0x1eabc8eb8f6b, v4='b7ed:26ed:ef02:6906:ee4b:f40:597:4b6b', s0=-8.0146734E18 WHERE  pk0 = 0x3027b5aa00a577 AND  pk1 = -652702739 AND  ck0 = 00000000-0000-4a00-af00-000000000000 AND  ck1 = 5.3815134E-12 -- on node3
    393: UPDATE ks1.tbl SET v3=0x003c, v4='126.229.32.3' WHERE  pk0 = 0x3db7b69ecdd6a6 AND  pk1 = -1459423004 AND  ck0 = 00000000-0000-4600-9f00-000000000000 AND  ck1 = -3.854987E34 -- on node3
{code}

> ALLOW FILTERING and SAI returned data that doesn't match the single column condition.
> -------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-20243
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-20243
>             Project: Apache Cassandra
>          Issue Type: Bug
>          Components: Consistency/Coordination
>            Reporter: David Capwell
>            Assignee: Caleb Rackliffe
>            Priority: Normal
>             Fix For: 5.x
>
>
> This was found by CASSANDRA-20156
> The following history returns extra data that doesn’t match the condition
> {code}
> 	History:
> 		19: INSERT INTO ks1.tbl (pk0, ck0, ck1, v0, v2) VALUES ('滲魶潁ꧏ', '㳩륓彫澳炬ᔕ?', 0x00000000000014008f00000000000000, 'a559:fe1:d87b:25:c95e:9029:44e5:6ad2', 1.85573747E16 + 1.3498884E31) -- on node2
> 		21: INSERT INTO ks1.tbl (pk0, ck0, ck1, s0, s1, v0, v1, v2) VALUES ('滲魶潁ꧏ', '᱓흩窡' + '㯪?竲翐尞绸봧헑ꑖ', 0x0000000000004800a900000000000000, 00000000-0000-4900-b600-000000000000, 00000000-0000-1900-ac00-000000000000, '170.247.202.199', 7538904746043055610 + 7400846939126123242, -5.0338443E-27) -- on node3
> 		22: SELECT * FROM ks1.tbl WHERE ck1 = 0x0000000000004800a900000000000000 ALLOW FILTERING -- ck1 'org.apache.cassandra.db.marshal.LexicalUUIDType' (reversed), on node1, fetch size 100
> {code}
> This fails with
> {code}
> Caused by: java.lang.AssertionError: Unexpected rows found:
> pk0     | ck0          | ck1                                | s0                                   | s1                                   | v0                                     | v1   | v2          
> '滲魶潁ꧏ' | '㳩륓彫澳炬ᔕ?' | 0x00000000000014008f00000000000000 | 00000000-0000-4900-b600-000000000000 | 00000000-0000-1900-ac00-000000000000 | 'a559:fe1:d87b:25:c95e:9029:44e5:6ad2' | null | 1.3498884E31
> Expected:
> pk0     | ck0             | ck1                                | s0                                   | s1                                   | v0                | v1                   | v2            
> '滲魶潁ꧏ' | '᱓흩窡㯪?竲翐尞绸봧헑ꑖ' | 0x0000000000004800a900000000000000 | 00000000-0000-4900-b600-000000000000 | 00000000-0000-1900-ac00-000000000000 | '170.247.202.199' | -3506992388540372764 | -5.0338443E-27
> {code}
> Took this and created a non-fuzz test to repo
> {code}
> public class RepoTest extends TestBaseImpl
> {
>     private static final Logger logger = LoggerFactory.getLogger(RepoTest.class);
>     @Test
>     public void test() throws IOException
>     {
>         boolean singleNode = false;
>         try (Cluster cluster = Cluster.build(singleNode ? 1 : 3).start())
>         {
>             schemaChanges(cluster, "\t\tCREATE KEYSPACE IF NOT EXISTS ks1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': "+(singleNode ? 1 : 3)+"};\n" +
>                                    "\t\tCREATE TABLE ks1.tbl (\n" +
>                                    "\t\t    pk0 text,\n" +
>                                    "\t\t    ck0 text,\n" +
>                                    "\t\t    ck1 'org.apache.cassandra.db.marshal.LexicalUUIDType',\n" +
>                                    "\t\t    s0 uuid static,\n" +
>                                    "\t\t    s1 timeuuid static,\n" +
>                                    "\t\t    v0 inet,\n" +
>                                    "\t\t    v1 bigint,\n" +
>                                    "\t\t    v2 float,\n" +
>                                    "\t\t    PRIMARY KEY (pk0, ck0, ck1)\n" +
>                                    "\t\t) WITH CLUSTERING ORDER BY (ck0 DESC, ck1 DESC)\n" +
>                                    "\t\t    AND additional_write_policy = '99p'\n" +
>                                    "\t\t    AND allow_auto_snapshot = true\n" +
>                                    "\t\t    AND bloom_filter_fp_chance = 0.01\n" +
>                                    "\t\t    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}\n" +
>                                    "\t\t    AND cdc = false\n" +
>                                    "\t\t    AND comment = ''\n" +
>                                    "\t\t    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}\n" +
>                                    "\t\t    AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}\n" +
>                                    "\t\t    AND memtable = 'default'\n" +
>                                    "\t\t    AND crc_check_chance = 1.0\n" +
>                                    "\t\t    AND fast_path = 'keyspace'\n" +
>                                    "\t\t    AND default_time_to_live = 0\n" +
>                                    "\t\t    AND extensions = {}\n" +
>                                    "\t\t    AND gc_grace_seconds = 864000\n" +
>                                    "\t\t    AND incremental_backups = true\n" +
>                                    "\t\t    AND max_index_interval = 2048\n" +
>                                    "\t\t    AND memtable_flush_period_in_ms = 0\n" +
>                                    "\t\t    AND min_index_interval = 128\n" +
>                                    "\t\t    AND read_repair = 'BLOCKING'\n" +
>                                    "\t\t    AND transactional_mode = 'off'\n" +
>                                    "\t\t    AND transactional_migration_from = 'none'\n" +
>                                    "\t\t    AND speculative_retry = '99p';\n"
>             );
>             cluster.get(singleNode ? 1 : 2).executeInternal("INSERT INTO ks1.tbl (pk0, ck0, ck1, v0, v2) VALUES ('滲魶\uE2F7潁ꧏ', '㳩륓\uE799彫澳\uF38E炬\uEC9Dᔕ?', 0x00000000000014008f00000000000000, 'a559:fe1:d87b:25:c95e:9029:44e5:6ad2', 1.85573747E16 + 1.3498884E31)");
>             cluster.get(singleNode ? 1 : 3).executeInternal("INSERT INTO ks1.tbl (pk0, ck0, ck1, s0, s1, v0, v1, v2) VALUES ('滲魶\uE2F7潁ꧏ', '᱓흩窡' + '㯪?竲\uEE38翐尞绸봧헑ꑖ', 0x0000000000004800a900000000000000, 00000000-0000-4900-b600-000000000000, 00000000-0000-1900-ac00-000000000000, '170.247.202.199', 7538904746043055610 + 7400846939126123242, -5.0338443E-27)");
>             var qr = cluster.get(1).coordinator().executeWithResult("SELECT * FROM ks1.tbl WHERE ck1 = 0x0000000000004800a900000000000000 ALLOW FILTERING", ConsistencyLevel.ALL);
>             AssertUtils.assertRows(qr, QueryResults.builder()
>                                                    .row("滲魶\uE2F7潁ꧏ", // pk0
>                                                         "᱓흩窡㯪?竲\uEE38翐尞绸봧헑ꑖ", // ck0
>                                                         UUID.fromString("00000000-0000-4800-a900-000000000000"), // ck1.  The CQL literal is "0x0000000000004800a900000000000000" as this is a LexicalUUIDType, but jvm-dtest converts this to a UUID in the resultset
>                                                         UUID.fromString("00000000-0000-4900-b600-000000000000"), // s0
>                                                         UUID.fromString("00000000-0000-1900-ac00-000000000000"), // s1
>                                                         InetAddress.getByName("170.247.202.199"), // v0
>                                                         -3506992388540372764L, // v1
>                                                         -5.0338443E-27F // v2
>                                                    )
>                                                    .build());
>         }
>     }
>     private static void schemaChanges(Cluster cluster, String cql)
>     {
>         for (String change : Splitter.on(';').omitEmptyStrings().trimResults().splitToList(cql))
>         {
>             logger.warn("Schema change: {}", change);
>             cluster.schemaChange(change);
>         }
>     }
> }
> {code}
> This fails because the first write (which doesn’t match the condition) got returned… only the second write is expected.
> I ran the test with single node and multi node, and this looks to only fail when on multi node



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org