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]