[
https://issues.apache.org/jira/browse/CASSANDRA-2104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12998808#comment-12998808
]
Jonas Borgström commented on CASSANDRA-2104:
--------------------------------------------
I've done some more testing now and I'm ONLY able to reproduce this when using
both super columns and the TimeUUIDType column comparator.
After looking at the code TimeUUIDType seems to be the only marshaller that
would actually notice (throw an exception) if its compare() method was called
with a partial value (1-15 bytes in the case of UUIDs).
So to me it looks like the incremental compactor sometimes sends
corrupted/partial data to the marshaller, at least for super column families.
This corrupted/partial data is silently ignored unless the TimeUUIDType
marshaller is used.
> IndexOutOfBoundsException during lazy row compaction (using TimeUUID
> comparator)
> --------------------------------------------------------------------------------
>
> Key: CASSANDRA-2104
> URL: https://issues.apache.org/jira/browse/CASSANDRA-2104
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Affects Versions: 0.7.0
> Reporter: Daniel Lundin
> Assignee: Sylvain Lebresne
> Fix For: 0.7.3
>
>
> I ran into an exception when lazily compacting wide rows of TimeUUID columns.
> It seems to trigger when a row is larger than
> {{in_memory_compaction_limit_in_mb}}.
> Traceback:
> {noformat}
> INFO [CompactionExecutor:1] 2011-02-03 10:59:59,262 CompactionIterator.java
> (line 135) Compacting large row XXXXXXXXXXXXX (76999384 bytes) incrementally
> ERROR [CompactionExecutor:1] 2011-02-03 10:59:59,266
> AbstractCassandraDaemon.java (line 114) Fatal exception in thread T
> hread[CompactionExecutor:1,1,main]
> java.lang.IndexOutOfBoundsException
> at java.nio.Buffer.checkIndex(Buffer.java:514)
> at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:121)
> at
> org.apache.cassandra.db.marshal.TimeUUIDType.compareTimestampBytes(TimeUUIDType.java:56)
> at
> org.apache.cassandra.db.marshal.TimeUUIDType.compare(TimeUUIDType.java:45)
> at
> org.apache.cassandra.db.marshal.TimeUUIDType.compare(TimeUUIDType.java:29)
> at
> java.util.concurrent.ConcurrentSkipListMap$ComparableUsingComparator.compareTo(ConcurrentSkipListMap.java:606
> )
> at
> java.util.concurrent.ConcurrentSkipListMap.findPredecessor(ConcurrentSkipListMap.java:685)
> at
> java.util.concurrent.ConcurrentSkipListMap.doPut(ConcurrentSkipListMap.java:864)
> at
> java.util.concurrent.ConcurrentSkipListMap.putIfAbsent(ConcurrentSkipListMap.java:1893)
> at
> org.apache.cassandra.db.SuperColumn.addColumn(SuperColumn.java:170)
> at
> org.apache.cassandra.db.SuperColumn.putColumn(SuperColumn.java:195)
> at
> org.apache.cassandra.db.ColumnFamily.addColumn(ColumnFamily.java:221)
> at
> org.apache.cassandra.io.LazilyCompactedRow$LazyColumnIterator.reduce(LazilyCompactedRow.java:204)
> at
> org.apache.cassandra.io.LazilyCompactedRow$LazyColumnIterator.reduce(LazilyCompactedRow.java:185)
> at
> org.apache.cassandra.utils.ReducingIterator.computeNext(ReducingIterator.java:62)
> at
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:136)
> at
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:131)
> at
> com.google.common.collect.Iterators$7.computeNext(Iterators.java:604)
> at
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:136)
> at
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:131)
> at
> org.apache.cassandra.db.ColumnIndexer.serializeInternal(ColumnIndexer.java:76)
> at
> org.apache.cassandra.db.ColumnIndexer.serialize(ColumnIndexer.java:50)
> at
> org.apache.cassandra.io.LazilyCompactedRow.<init>(LazilyCompactedRow.java:88)
> at
> org.apache.cassandra.io.CompactionIterator.getCompactedRow(CompactionIterator.java:137)
> at
> org.apache.cassandra.io.CompactionIterator.getReduced(CompactionIterator.java:108)
> at
> org.apache.cassandra.io.CompactionIterator.getReduced(CompactionIterator.java:43)
> at
> org.apache.cassandra.utils.ReducingIterator.computeNext(ReducingIterator.java:73)
> at
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:136)
> at
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:131)
> at
> org.apache.commons.collections.iterators.FilterIterator.setNextObject(FilterIterator.java:183)
> at
> org.apache.commons.collections.iterators.FilterIterator.hasNext(FilterIterator.java:94)
> at
> org.apache.cassandra.db.CompactionManager.doCompaction(CompactionManager.java:426)
> at
> org.apache.cassandra.db.CompactionManager$1.call(CompactionManager.java:122)
> at
> org.apache.cassandra.db.CompactionManager$1.call(CompactionManager.java:92)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:662)
> {noformat}
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira