[
https://issues.apache.org/jira/browse/CASSANDRA-20261?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
David Capwell updated CASSANDRA-20261:
--------------------------------------
Bug Category: Parent values: Correctness(12982)Level 1 values: Transient
Incorrect Response(12987)
Complexity: Normal
Discovered By: Fuzz Test
Fix Version/s: 5.x
Severity: Critical
Status: Open (was: Triage Needed)
> Accord interop missing data when using token BETWEEN clause with paging
> -----------------------------------------------------------------------
>
> Key: CASSANDRA-20261
> URL: https://issues.apache.org/jira/browse/CASSANDRA-20261
> Project: Apache Cassandra
> Issue Type: Bug
> Components: Accord
> Reporter: David Capwell
> Assignee: Ariel Weisberg
> Priority: Normal
> Fix For: 5.x
>
>
> This was found by CASSANDRA-20156
> The error seen is
> {code}
> History:
> 27: SELECT * FROM ks1.tbl WHERE token(pk0, pk1) BETWEEN token(-32122,
> 7789509855040785323) AND token(28586, -689252365883560887) — on node1, fetch
> size 1
> Caused by: java.lang.AssertionError: Missing rows:
> pk0 | pk1 | ck0 | ck1 | s0
> | v0 | v1
> | v2 | v3 | v4
> 28586 | -689252365883560887 | 381940688 | '01:49:42.520527694' |
> '1976-09-08T16:06:37.234Z' | '=\u0019Z\u0004\u007F\u00029\u0011SF\u0009' |
> '08:14:46.465399615' | '03:07:03.151389558' | -17377 |
> 0x00000000000016009900000000000000
> Expected:
> pk0 | pk1 | ck0 | ck1 | s0
> | v0 | v1
> | v2 | v3 | v4
> 28586 | -689252365883560887 | 381940688 | '01:49:42.520527694' |
> '1976-09-08T16:06:37.234Z' | '=\u0019Z\u0004\u007F\u00029\u0011SF\u0009' |
> '08:14:46.465399615' | '03:07:03.151389558' | -17377 |
> 0x00000000000016009900000000000000
> -32122 | 7789509855040785323 | -273245539 | '22:57:17.784557626' |
> '2020-08-10T10:02:26.981Z' | null |
> null | null | null | null
> {code}
> Here is a test that repos the issue
> {code}
> /*
> * Licensed to the Apache Software Foundation (ASF) under one
> * or more contributor license agreements. See the NOTICE file
> * distributed with this work for additional information
> * regarding copyright ownership. The ASF licenses this file
> * to you under the Apache License, Version 2.0 (the
> * "License"); you may not use this file except in compliance
> * with the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
> package org.apache.cassandra.distributed.test.cql3;
> import java.io.IOException;
> import java.util.function.Consumer;
> import org.junit.Test;
> import com.datastax.driver.core.SimpleStatement;
> import org.apache.cassandra.distributed.Cluster;
> import org.apache.cassandra.distributed.api.ConsistencyLevel;
> import org.apache.cassandra.distributed.test.JavaDriverUtils;
> import org.apache.cassandra.service.consensus.TransactionalMode;
> import org.assertj.core.api.Assertions;
> public class AccordInteropRepoTest extends StatefulASTBase
> {
> @Test
> public void test() throws IOException
> {
> ConsistencyLevel selectCl = ConsistencyLevel.QUORUM;
> ConsistencyLevel mutationCl = ConsistencyLevel.QUORUM;
> try (Cluster cluster = createCluster(1, i -> {
> });
> var driver = JavaDriverUtils.create(cluster);
> var session = driver.connect())
> {
> cluster.schemaChange("CREATE KEYSPACE IF NOT EXISTS ks1 WITH
> replication = {'class': 'SimpleStrategy', 'replication_factor': 1};");
> cluster.schemaChange("CREATE TABLE ks1.tbl (\n" +
> "\t\t pk0 smallint,\n" +
> "\t\t pk1 bigint,\n" +
> "\t\t ck0 int,\n" +
> "\t\t ck1 time,\n" +
> "\t\t s0 timestamp static,\n" +
> "\t\t v0 ascii,\n" +
> "\t\t v1 time,\n" +
> "\t\t v2 time,\n" +
> "\t\t v3 smallint,\n" +
> "\t\t v4
> 'org.apache.cassandra.db.marshal.LexicalUUIDType',\n" +
> "\t\t PRIMARY KEY ((pk0, pk1), ck0,
> ck1)\n" +
> "\t\t) WITH CLUSTERING ORDER BY (ck0 DESC,
> ck1 DESC) AND " + TransactionalMode.full.asCqlParam());
> cluster.schemaChange("CREATE INDEX tbl_pk0 ON ks1.tbl(pk0) USING
> 'SAI';");
> cluster.schemaChange("CREATE CUSTOM INDEX tbl_pk1 ON ks1.tbl(pk1)
> USING 'StorageAttachedIndex';");
> cluster.schemaChange("CREATE CUSTOM INDEX tbl_ck0 ON ks1.tbl(ck0)
> USING 'StorageAttachedIndex';");
> cluster.schemaChange("CREATE CUSTOM INDEX tbl_ck1 ON ks1.tbl(ck1)
> USING 'StorageAttachedIndex';");
> cluster.schemaChange("CREATE CUSTOM INDEX tbl_s0 ON ks1.tbl(s0)
> USING 'StorageAttachedIndex';");
> cluster.schemaChange("CREATE CUSTOM INDEX tbl_v0 ON ks1.tbl(v0)
> USING 'StorageAttachedIndex';");
> cluster.schemaChange("CREATE INDEX tbl_v1 ON ks1.tbl(v1) USING
> 'SAI';");
> cluster.schemaChange("CREATE CUSTOM INDEX tbl_v2 ON ks1.tbl(v2)
> USING 'StorageAttachedIndex';");
> cluster.schemaChange("CREATE CUSTOM INDEX tbl_v3 ON ks1.tbl(v3)
> USING 'StorageAttachedIndex';");
> cluster.forEach(i -> i.nodetoolResult("disableautocompaction",
> "ks1", "tbl").asserts().success());
> Consumer<String> write = cql ->
> cluster.coordinator(1).execute(cql, mutationCl);
> write.accept("INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0,
> v1, v2, v3, v4) VALUES (-17452, -6103194810008652995, -354072026 +
> 1793215453, '23:19:05.460737920', '2014-01-21T10:53:28.054Z',
> '\\u001BH\\u007F', '07:17:36.531643764', '06:45:54.792974856', -1158 + 19412,
> 0x0000000000004c00a200000000000000)");
> write.accept("INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0,
> v1, v2, v3, v4) VALUES (26923, -8466366874082863244, 1879756201 * 419234983,
> '11:47:28.493772899', '2022-08-28T18:51:39.439Z',
> '?T0\\u000Fw\\u000C7\\u0010`', '20:26:38.241088346', '20:23:19.706516131',
> -9817, 0x00000000000011008600000000000000)");
> write.accept("UPDATE ks1.tbl SET s0='2063-02-08T21:19:42.290Z',
> v0='Nk0D\\u0012\\u0004', v1='01:25:12.540180030', v2='16:26:46.736998227',
> v3=28123, v4=0x0000000000004e00bf00000000000000 WHERE pk0 = -8659 AND pk1 =
> 8543055738605711691 AND ck0 = -1156127192 * -1114559982 AND ck1 =
> '20:39:13.541952208'");
> write.accept("DELETE FROM ks1.tbl WHERE pk0 = 26923 AND pk1 =
> -8466366874082863244 AND ck0 = -1585009096 - 582726325 AND ck1 =
> '06:37:47.310859750'");
> write.accept("DELETE FROM ks1.tbl WHERE pk0 = -2508 AND pk1 =
> -5268494056692095125");
> write.accept("DELETE FROM ks1.tbl WHERE pk0 = 28586 AND pk1 =
> -689252365883560887");
> write.accept("DELETE FROM ks1.tbl WHERE pk0 = -17452 AND pk1 =
> -6103194810008652995");
> write.accept("INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, v0, v1,
> v2) VALUES (-8659, 8543055738605711691, -965580267 - -349362501,
> '13:13:21.358675464', '\\u0013P' + ')0R\\u0008[U\\u0002\\u000C',
> '00:22:58.129668768', '19:49:09.962483656')");
> write.accept("INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0, v0,
> v1, v2, v3, v4) VALUES (-8659, 8543055738605711691, -1879407340,
> '20:38:24.079426657', '1976-06-15T16:22:29.714Z', '\\u0001' +
> '\\u0002g8\\u0017\\u0000kl', '23:44:14.518757788', '02:54:00.877709004',
> -26658, 0x0000000000001200b300000000000000)");
> write.accept("UPDATE ks1.tbl SET s0='2033-12-12T19:40:35.649Z',
> v0='v`.?\\u0000\\u0014' + '[1M\\u0019eF7', v1='09:28:48.224043017',
> v2='14:44:17.130879183', v3=-8918, v4=0x0000000000004600ae00000000000000
> WHERE pk0 = -8659 AND pk1 = 8543055738605711691 AND ck0 = 388614112 AND
> ck1 = '03:05:25.312567300'");
> write.accept("UPDATE ks1.tbl SET v1='09:36:18.985071344' WHERE
> pk0 = 15987 AND pk1 = 5017545377567663076 AND ck0 = -1647371007 +
> -564597002 AND ck1 = '18:07:46.525252651'");
> write.accept("INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, s0) VALUES
> (-32122, 7789509855040785323, -273245539, '22:57:17.784557626',
> '2020-08-10T10:02:26.981Z')");
> write.accept("INSERT INTO ks1.tbl (pk0, pk1, ck0, ck1, v0) VALUES
> (26923, -8466366874082863244, -1931533321 - 392089785, '02:30:47.533658323',
> 'fL\" ')");
> write.accept("UPDATE ks1.tbl SET v0=',''.\\u0009' + '}',
> v1='03:06:20.331155886', v2='19:12:05.972164203', v3=21166 * 22367,
> v4=0x0000000000001500b200000000000000, s0='2055-12-07T12:03:29.428Z' WHERE
> pk0 = -14794 AND pk1 = 8575482787026083770 AND ck0 = -1572042742 *
> 1166090660 AND ck1 = '13:31:07.217959809'");
> write.accept("UPDATE ks1.tbl SET v0='kC^\\u001A2' +
> '\\u001C66nw7/', v1='00:14:42.540873077', v2='13:40:25.648481128', v3=-31029
> * -24644, v4=0x0000000000004a009200000000000000,
> s0='2059-07-29T20:06:04.031Z' WHERE pk0 = 26923 AND pk1 =
> -8466366874082863244 AND ck0 = 1632828752 AND ck1 = '22:24:59.313920070'");
> write.accept("UPDATE ks1.tbl SET v0='=\\u0019Z' +
> '\\u0004\\u007F\\u00029\\u0011SF\\u0009', v1='08:14:46.465399615',
> v2='03:07:03.151389558', v3=-28611 + 11234,
> v4=0x00000000000016009900000000000000, s0='1976-09-08T16:06:37.234Z' WHERE
> pk0 = 28586 AND pk1 = -689252365883560887 AND ck0 = 381940688 AND ck1 =
> '01:49:42.520527694'");
> write.accept("DELETE FROM ks1.tbl WHERE pk0 = -14794 AND pk1 =
> 8575482787026083770 AND ck0 = -1969142593 * -1928185285 AND ck1 =
> '06:27:48.954717326'");
> write.accept("DELETE FROM ks1.tbl WHERE pk0 = 28586 AND pk1 =
> -689252365883560887 AND ck0 = 397777120 - -1843773161 AND ck1 =
> '23:32:54.375819231'");
> SimpleStatement stmt = new SimpleStatement("SELECT * FROM ks1.tbl
> WHERE token(pk0, pk1) BETWEEN token(-32122, 7789509855040785323) AND
> token(28586, -689252365883560887)");
> stmt.setConsistencyLevel(JavaDriverUtils.toDriverCL(selectCl));
> stmt.setFetchSize(1);
> var result =
> StatefulASTBase.BaseState.getRowsAsByteBuffer(session.execute(stmt));
> /*
> Caused by: java.lang.AssertionError: Missing rows:
> pk0 | pk1 | ck0 | ck1 | s0
> | v0 | v1
> | v2 | v3 | v4
> 28586 | -689252365883560887 | 381940688 | '01:49:42.520527694' |
> '1976-09-08T16:06:37.234Z' | '=\u0019Z\u0004\u007F\u00029\u0011SF\u0009' |
> '08:14:46.465399615' | '03:07:03.151389558' | -17377 |
> 0x00000000000016009900000000000000
> Expected:
> pk0 | pk1 | ck0 | ck1 | s0
> | v0 | v1
> | v2 | v3 | v4
> 28586 | -689252365883560887 | 381940688 | '01:49:42.520527694' |
> '1976-09-08T16:06:37.234Z' | '=\u0019Z\u0004\u007F\u00029\u0011SF\u0009' |
> '08:14:46.465399615' | '03:07:03.151389558' | -17377 |
> 0x00000000000016009900000000000000
> -32122 | 7789509855040785323 | -273245539 | '22:57:17.784557626' |
> '2020-08-10T10:02:26.981Z' | null |
> null | null | null | null
> */
> Assertions.assertThat(result).hasDimensions(2, 10);
> }
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]