cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Whittington (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CASSANDRA-7898) IndexOutOfBoundsException comparing incompatible reversed types in DynamicCompositeType
Date Mon, 08 Sep 2014 21:10:31 GMT

     [ https://issues.apache.org/jira/browse/CASSANDRA-7898?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Tim Whittington updated CASSANDRA-7898:
---------------------------------------
    Attachment: cassandra-2.0-7898.txt

Original patch lost ordering of compatible ReversedType(X) in a dynamic composite - updated
patch fixes this and adds additional testing for preservation of order in reversed types.

> IndexOutOfBoundsException comparing incompatible reversed types in DynamicCompositeType
> ---------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-7898
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7898
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>            Reporter: Tim Whittington
>         Attachments: cassandra-2.0-7898.txt, cassandra-2.0-7898.txt
>
>
> In the following setup, an IndexOutOfBoundsException is often observed:
> * A DynamicCompositeType value is used in a column name (e.g. in a CQL3 cluster key)
> * Two incompatible types (e.g. Int32Type and DoubleType) are used in the dynamic composite
value in their reversed form (e.g. ReversedType(Int32Type) and ReversedType(DoubleType) 
> * Values for the incompatible types are inserted
> * One of various scenarios occurs that trigger comparison of the column names
> The exception can be variously observed (sometimes not immediately) during query execution,
memtable flushing, commit log replay etc. In some cases this can prevent Cassandra server
startup (e.g. during commit log replay).
> Typical stack traces follow:
> {noformat}
> java.lang.RuntimeException: java.lang.IndexOutOfBoundsException
> 	at org.apache.cassandra.service.StorageProxy$LocalMutationRunnable.run(StorageProxy.java:1968)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.IndexOutOfBoundsException
> 	at java.nio.Buffer.checkIndex(Buffer.java:538)
> 	at java.nio.HeapByteBuffer.getDouble(HeapByteBuffer.java:512)
> 	at org.apache.cassandra.utils.ByteBufferUtil.toDouble(ByteBufferUtil.java:431)
> 	at org.apache.cassandra.serializers.DoubleSerializer.deserialize(DoubleSerializer.java:33)
> 	at org.apache.cassandra.serializers.DoubleSerializer.deserialize(DoubleSerializer.java:25)
> 	at org.apache.cassandra.db.marshal.AbstractType.compose(AbstractType.java:142)
> 	at org.apache.cassandra.db.marshal.DoubleType.compare(DoubleType.java:45)
> 	at org.apache.cassandra.db.marshal.DoubleType.compare(DoubleType.java:28)
> 	at org.apache.cassandra.db.marshal.ReversedType.compare(ReversedType.java:73)
> 	at org.apache.cassandra.db.marshal.ReversedType.compare(ReversedType.java:30)
> 	at org.apache.cassandra.db.marshal.AbstractType.compareCollectionMembers(AbstractType.java:279)
> 	at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:64)
> 	at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:36)
> 	at org.apache.cassandra.db.marshal.AbstractType.compareCollectionMembers(AbstractType.java:279)
> 	at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:64)
> 	at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:36)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap$1.compareTo(SnapTreeMap.java:538)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap.attemptUpdate(SnapTreeMap.java:1108)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap.attemptUpdate(SnapTreeMap.java:1192)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap.attemptUpdate(SnapTreeMap.java:1192)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap.attemptUpdate(SnapTreeMap.java:1192)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap.updateUnderRoot(SnapTreeMap.java:1059)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap.update(SnapTreeMap.java:1023)
> 	at edu.stanford.ppl.concurrent.SnapTreeMap.putIfAbsent(SnapTreeMap.java:985)
> 	at org.apache.cassandra.db.AtomicSortedColumns$Holder.addColumn(AtomicSortedColumns.java:319)
> 	at org.apache.cassandra.db.AtomicSortedColumns.addAllWithSizeDelta(AtomicSortedColumns.java:191)
> 	at org.apache.cassandra.db.Memtable.resolve(Memtable.java:226)
> 	at org.apache.cassandra.db.Memtable.put(Memtable.java:173)
> 	at org.apache.cassandra.db.ColumnFamilyStore.apply(ColumnFamilyStore.java:900)
> 	at org.apache.cassandra.db.Keyspace.apply(Keyspace.java:374)
> 	at org.apache.cassandra.db.Keyspace.apply(Keyspace.java:339)
> 	at org.apache.cassandra.db.RowMutation.apply(RowMutation.java:211)
> 	at org.apache.cassandra.service.StorageProxy$7.runMayThrow(StorageProxy.java:952)
> 	at org.apache.cassandra.service.StorageProxy$LocalMutationRunnable.run(StorageProxy.java:1964)
> {noformat}
> {noformat}
> java.lang.IndexOutOfBoundsException
>         at java.nio.Buffer.checkIndex(Buffer.java:538)
>         at java.nio.HeapByteBuffer.getDouble(HeapByteBuffer.java:512)
>         at org.apache.cassandra.utils.ByteBufferUtil.toDouble(ByteBufferUtil.java:431)
>         at org.apache.cassandra.serializers.DoubleSerializer.deserialize(DoubleSerializer.java:33)
>         at org.apache.cassandra.serializers.DoubleSerializer.deserialize(DoubleSerializer.java:25)
>         at org.apache.cassandra.db.marshal.AbstractType.compose(AbstractType.java:142)
>         at org.apache.cassandra.db.marshal.DoubleType.compare(DoubleType.java:45)
>         at org.apache.cassandra.db.marshal.DoubleType.compare(DoubleType.java:28)
>         at org.apache.cassandra.db.marshal.ReversedType.compare(ReversedType.java:73)
>         at org.apache.cassandra.db.marshal.ReversedType.compare(ReversedType.java:30)
>         at org.apache.cassandra.db.marshal.AbstractType.compareCollectionMembers(AbstractType.java:279)
>         at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:64)
>         at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:36)
>         at org.apache.cassandra.io.sstable.ColumnNameHelper.max(ColumnNameHelper.java:159)
>         at org.apache.cassandra.io.sstable.ColumnNameHelper.mergeMax(ColumnNameHelper.java:245)
>         at org.apache.cassandra.io.sstable.SSTableMetadata$Collector.updateMaxColumnNames(SSTableMetadata.java:346)
>         at org.apache.cassandra.io.sstable.SSTableMetadata$Collector.update(SSTableMetadata.java:327)
>         at org.apache.cassandra.io.sstable.SSTableWriter.append(SSTableWriter.java:194)
>         at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:397)
>         at org.apache.cassandra.db.Memtable$FlushRunnable.runWith(Memtable.java:350)
>         at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48)
>         at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}
> {noformat}
> java.lang.RuntimeException: java.lang.IndexOutOfBoundsException
>         at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1931)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.IndexOutOfBoundsException
>         at java.nio.Buffer.checkIndex(Buffer.java:538)
>         at java.nio.HeapByteBuffer.getDouble(HeapByteBuffer.java:512)
>         at org.apache.cassandra.utils.ByteBufferUtil.toDouble(ByteBufferUtil.java:431)
>         at org.apache.cassandra.serializers.DoubleSerializer.deserialize(DoubleSerializer.java:33)
>         at org.apache.cassandra.serializers.DoubleSerializer.deserialize(DoubleSerializer.java:25)
>         at org.apache.cassandra.db.marshal.AbstractType.compose(AbstractType.java:142)
>         at org.apache.cassandra.db.marshal.DoubleType.compare(DoubleType.java:45)
>         at org.apache.cassandra.db.marshal.DoubleType.compare(DoubleType.java:28)
>         at org.apache.cassandra.db.marshal.ReversedType.compare(ReversedType.java:73)
>         at org.apache.cassandra.db.marshal.ReversedType.compare(ReversedType.java:30)
>         at org.apache.cassandra.db.marshal.AbstractType.compareCollectionMembers(AbstractType.java:279)
>         at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:64)
>         at org.apache.cassandra.db.marshal.AbstractCompositeType.compare(AbstractCompositeType.java:36)
>         at org.apache.cassandra.db.marshal.CompositeType.compare(CompositeType.java:310)
>         at org.apache.cassandra.db.marshal.CompositeType.intersects(CompositeType.java:275)
>         at org.apache.cassandra.db.filter.SliceQueryFilter.shouldInclude(SliceQueryFilter.java:342)
>         at org.apache.cassandra.db.filter.QueryFilter.shouldInclude(QueryFilter.java:234)
>         at org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:236)
>         at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:53)
>         at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1547)
>         at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1376)
>         at org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:333)
>         at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:65)
>         at org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:1363)
>         at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1927)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message