David Capwell created CASSANDRA-20108:
-----------------------------------------

             Summary: IndexOutOfBoundsException when accessing partition where 
the column was deleted
                 Key: CASSANDRA-20108
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-20108
             Project: Cassandra
          Issue Type: Bug
          Components: Legacy/CQL
            Reporter: David Capwell


{code}
Caused by: java.lang.IndexOutOfBoundsException
        at java.base/java.nio.Buffer.checkIndex(Buffer.java:687)
        at java.base/java.nio.HeapByteBuffer.get(HeapByteBuffer.java:169)
        at 
org.apache.cassandra.db.marshal.ByteBufferAccessor.getByte(ByteBufferAccessor.java:184)
        at 
org.apache.cassandra.db.marshal.ByteBufferAccessor.getByte(ByteBufferAccessor.java:42)
        at 
org.apache.cassandra.db.marshal.ByteType.compareCustom(ByteType.java:51)
        at 
org.apache.cassandra.db.marshal.AbstractType.compare(AbstractType.java:216)
        at 
org.apache.cassandra.db.marshal.AbstractType.compare(AbstractType.java:211)
        at 
org.apache.cassandra.db.marshal.AbstractType.compareForCQL(AbstractType.java:269)
        at org.apache.cassandra.cql3.Operator$1.isSatisfiedBy(Operator.java:73)
        at 
org.apache.cassandra.db.filter.RowFilter$SimpleExpression.isSatisfiedBy(RowFilter.java:725)
        at 
org.apache.cassandra.db.filter.RowFilter$1.applyToPartition(RowFilter.java:227)
        at 
org.apache.cassandra.db.transform.BasePartitions.hasNext(BasePartitions.java:94)
        at 
org.apache.cassandra.cql3.statements.SelectStatement.process(SelectStatement.java:1045)
        at 
org.apache.cassandra.cql3.statements.SelectStatement.processResults(SelectStatement.java:629)
        at 
org.apache.cassandra.cql3.statements.SelectStatement.executeInternal(SelectStatement.java:665)
        at 
org.apache.cassandra.cql3.statements.SelectStatement.executeLocally(SelectStatement.java:635)
        at 
org.apache.cassandra.cql3.statements.SelectStatement.executeLocally(SelectStatement.java:151)
{code}

Table

{code}
CREATE TABLE keyspace_test_00."3W56TBuMmC11vPVxalpse84eS" (
                    pk0 date,
                    pk1 double,
                    ck0 int,
                    ck1 inet,
                    s0 tinyint static,
                    v0 int,
                    v1 varint,
                    v2 varint,
                    v3 timestamp,
                    PRIMARY KEY ((pk0, pk1), ck0, ck1)
                ) WITH CLUSTERING ORDER BY (ck0 DESC, ck1 ASC)
{code}

The query

{code}
SELECT *
FROM keyspace_test_00."3W56TBuMmC11vPVxalpse84eS"
WHERE s0 = ? —- value is "(byte) -113"
ALLOW FILTERING
{code}

The issue is that we see the delete, but don’t properly handle null data

{code}
ByteBuffer foundValue = getValue(metadata, partitionKey, row);
// value is java.nio.HeapByteBuffer[pos=0 lim=0 cap=0]; aka null (empty)
{code}

History of operations on this partition

{code}
        History:
                1: UPDATE pd0
                2: Select Whole Partition pd0
                4: Select Whole Partition pd0
                6: Delete COLUMN [s0, v0, v1, v2, v3] pd0
                7: Select Whole Partition pd0
                10: Select Whole Partition pd0
                12: Select Row pd0
                17: Delete COLUMN [s0, v0, v1, v2, v3] pd0
                20: INSERT pd0
                27: UPDATE pd0
                38: INSERT pd0
                41: Select Row pd0
                56: Select Row pd0
                66: Delete COLUMN [s0, v0, v1, v2, v3] pd0
                67: Search on column s0
{code}

Here we see an insert was done so liveness info is generated, but we do delete 
on all columns leaving only the partition/clustering keys around...



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