[ 
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


Reply via email to