David Capwell created CASSANDRA-20261:
-----------------------------------------

             Summary: 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


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]

Reply via email to