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 2024/12/02 19:14:00 UTC

[jira] [Commented] (CASSANDRA-20108) IndexOutOfBoundsException when accessing partition where the column was deleted

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

David Capwell commented on CASSANDRA-20108:
-------------------------------------------

another, but far more detailed, history.

{code}
accord.utils.Property$PropertyError: Property error detected:
Seed = 3447518471140609194
Examples = 10
Pure = true
Error: Cassandra failure during read query at consistency QUORUM (1 responses were required but only 0 replica responded, 1 failed)
Steps: 400
Values:
	State: 
		Setup:
		CREATE KEYSPACE "x1_SeU8qiZrWnjGfKEuBqWMWAP3" WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
		CREATE TABLE "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl (
		    pk0 'org.apache.cassandra.db.marshal.LexicalUUIDType',
		    pk1 int,
		    ck0 'org.apache.cassandra.db.marshal.LexicalUUIDType',
		    s0 ascii static,
		    s1 tinyint static,
		    v0 double,
		    PRIMARY KEY ((pk0, pk1), ck0)
		) WITH CLUSTERING ORDER BY (ck0 ASC)
		    AND additional_write_policy = '99p'
		    AND allow_auto_snapshot = true
		    AND bloom_filter_fp_chance = 0.01
		    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
		    AND cdc = false
		    AND comment = ''
		    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
		    AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
		    AND memtable = 'default'
		    AND crc_check_chance = 1.0
		    AND fast_path = 'keyspace'
		    AND default_time_to_live = 0
		    AND extensions = {}
		    AND gc_grace_seconds = 864000
		    AND incremental_backups = true
		    AND max_index_interval = 2048
		    AND memtable_flush_period_in_ms = 0
		    AND min_index_interval = 128
		    AND read_repair = 'BLOCKING'
		    AND transactional_mode = 'off'
		    AND transactional_migration_from = 'none'
		    AND speculative_retry = '99p';
		
		: org.apache.cassandra.distributed.test.SingleNodeTableWalkTest.State
	History:
		1: DELETE  FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE  pk0=0x0000000000001700ac00000000000000 AND  pk1=-535839747
		2: nodetool flush x1_SeU8qiZrWnjGfKEuBqWMWAP3 tbl
		3: DELETE  FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE  pk0=0x0000000000001d008600000000000000 AND  pk1=923072059
		4: nodetool flush x1_SeU8qiZrWnjGfKEuBqWMWAP3 tbl
		5: UPDATE "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl SET  s1=-93, s0='' + '_	_ZD', v0=8.163858081481932E49 WHERE  pk0=0x0000000000004000ae00000000000000 AND  pk1=-1106385971 AND  ck0=0x0000000000004700af00000000000000
		6: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) = token(0x0000000000004000ae00000000000000, -1106385971); -- by token
		7: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk1 > -1106385971 ALLOW FILTERING; -- pk1 int
		8: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk1 = -1106385971 ALLOW FILTERING; -- pk1 int
		9: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 AND pk1 = -1106385971; -- Whole Partition
		10: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) >= token(0x0000000000004000ae00000000000000, -1106385971) AND token(pk0, pk1) < token(0x0000000000004000ae00000000000000, -1106385971); -- by token range
		11: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE s0 >= '_	_ZD' ALLOW FILTERING; -- s0 ascii
		12: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 AND pk1 = -1106385971 AND ck0 = 0x0000000000004700af00000000000000; -- Single Row
		13: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 AND pk1 = -1106385971; -- Whole Partition
		14: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 ALLOW FILTERING; -- pk0 'org.apache.cassandra.db.marshal.LexicalUUIDType'
		15: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 AND pk1 = -1106385971 AND ck0 = 0x0000000000004700af00000000000000; -- Single Row
		16: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) > token(0x0000000000004000ae00000000000000, -1106385971) AND token(pk0, pk1) <= token(0x0000000000004000ae00000000000000, -1106385971); -- by token range
		17: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE ck0 <= 0x0000000000004700af00000000000000 ALLOW FILTERING; -- ck0 'org.apache.cassandra.db.marshal.LexicalUUIDType'
		18: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE v0 = 8.163858081481932E49 ALLOW FILTERING; -- v0 double
		19: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) > token(0x0000000000004000ae00000000000000, -1106385971) AND token(pk0, pk1) < token(0x0000000000004000ae00000000000000, -1106385971); -- by token range
		20: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE ck0 = 0x0000000000004700af00000000000000 ALLOW FILTERING; -- ck0 'org.apache.cassandra.db.marshal.LexicalUUIDType'
		21: DELETE s1, s0, v0 FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE  pk0=0x0000000000001700ac00000000000000 AND  pk1=-535839747 AND  ck0=0x0000000000001a009700000000000000
		22: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 <= 0x0000000000004000ae00000000000000 ALLOW FILTERING; -- pk0 'org.apache.cassandra.db.marshal.LexicalUUIDType'
		23: DELETE  FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE  pk0=0x0000000000001700ac00000000000000 AND  pk1=-535839747 AND  ck0=0x0000000000004f00a900000000000000
		24: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) > token(0x0000000000004000ae00000000000000, -1106385971) AND token(pk0, pk1) < token(0x0000000000004000ae00000000000000, -1106385971); -- by token range
		25: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) = token(0x0000000000004000ae00000000000000, -1106385971); -- by token
		26: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE s0 <= '_	_ZD' ALLOW FILTERING; -- s0 ascii
		27: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE ck0 > 0x0000000000004700af00000000000000 ALLOW FILTERING; -- ck0 'org.apache.cassandra.db.marshal.LexicalUUIDType'
		28: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) >= token(0x0000000000004000ae00000000000000, -1106385971) AND token(pk0, pk1) < token(0x0000000000004000ae00000000000000, -1106385971); -- by token range
		29: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) = token(0x0000000000004000ae00000000000000, -1106385971); -- by token
		30: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) > token(0x0000000000004000ae00000000000000, -1106385971) AND token(pk0, pk1) <= token(0x0000000000004000ae00000000000000, -1106385971); -- by token range
		31: nodetool flush x1_SeU8qiZrWnjGfKEuBqWMWAP3 tbl
		32: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE s0 = '_	_ZD' ALLOW FILTERING; -- s0 ascii
		33: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 AND pk1 = -1106385971; -- Whole Partition
		34: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) = token(0x0000000000004000ae00000000000000, -1106385971); -- by token
		35: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE token(pk0, pk1) > token(0x0000000000004000ae00000000000000, -1106385971) AND token(pk0, pk1) < token(0x0000000000004000ae00000000000000, -1106385971); -- by token range
		36: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 AND pk1 = -1106385971 AND ck0 = 0x0000000000004700af00000000000000; -- Single Row
		37: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE pk0 = 0x0000000000004000ae00000000000000 AND pk1 = -1106385971; -- Whole Partition
		38: SELECT * FROM "x1_SeU8qiZrWnjGfKEuBqWMWAP3".tbl WHERE s1 < -93 ALLOW FILTERING; -- s1 tinyint


	at accord.utils.Property$StatefulBuilder.check(Property.java:504)
	at org.apache.cassandra.distributed.test.SingleNodeTableWalkTest.test(SingleNodeTableWalkTest.java:295)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
	Suppressed: org.apache.cassandra.distributed.shared.ShutdownException: Uncaught exceptions were thrown during test
		at org.apache.cassandra.distributed.impl.AbstractCluster.checkAndResetUncaughtExceptions(AbstractCluster.java:1184)
		at org.apache.cassandra.distributed.impl.AbstractCluster.close(AbstractCluster.java:1169)
		at org.apache.cassandra.distributed.test.SingleNodeTableWalkTest.test(SingleNodeTableWalkTest.java:290)
		... 26 more
		Suppressed: java.lang.RuntimeException: java.lang.IndexOutOfBoundsException
			at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2989)
			at org.apache.cassandra.concurrent.ExecutionFailure$2.run(ExecutionFailure.java:163)
			at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:143)
			at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
			at java.base/java.lang.Thread.run(Thread.java:829)
		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$2.isSatisfiedBy(Operator.java:130)
			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.db.partitions.UnfilteredPartitionIterators$Serializer.serialize(UnfilteredPartitionIterators.java:334)
			at org.apache.cassandra.db.ReadResponse$LocalDataResponse.build(ReadResponse.java:208)
			at org.apache.cassandra.db.ReadResponse$LocalDataResponse.<init>(ReadResponse.java:193)
			at org.apache.cassandra.db.ReadResponse.createDataResponse(ReadResponse.java:50)
			at org.apache.cassandra.db.ReadCommand.createResponse(ReadCommand.java:401)
			at org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:2587)
			at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:2985)
			... 4 more
{code}

> IndexOutOfBoundsException when accessing partition where the column was deleted
> -------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-20108
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-20108
>             Project: Apache Cassandra
>          Issue Type: Bug
>          Components: Legacy/CQL
>            Reporter: David Capwell
>            Assignee: Sunil Ramchandra Pawar
>            Priority: Normal
>             Fix For: 5.x
>
>
> {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: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org