ArrayIndexOutOfBoundsException thrown when reading partially-written sstable
----------------------------------------------------------------------------

                 Key: CASSANDRA-1248
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1248
             Project: Cassandra
          Issue Type: Bug
          Components: Core
    Affects Versions: 0.6.3
         Environment: Cassandra 0.6.3
java version "1.6.0_0"
IcedTea6 1.3.1 (6b12-0ubuntu6.6) Runtime Environment (build 1.6.0_0-b12)
OpenJDK 64-Bit Server VM (build 1.6.0_0-b12, mixed mode)
Ubuntu 8.10
6 node cluster
RF==3
            Reporter: David King


A node died by running out of disk space. After growing the volume, trying to 
execute reads dies with:

{quote}
ERROR 11:02:51,957 Uncaught exception in thread Thread[ROW-READ-STAGE:10,5,main]
java.lang.ArrayIndexOutOfBoundsException
        at 
org.apache.cassandra.io.util.BufferedRandomAccessFile.read(BufferedRandomAccessFile.java:326)
        at java.io.RandomAccessFile.readFully(RandomAccessFile.java:414)
        at java.io.DataInputStream.readUTF(DataInputStream.java:609)
        at java.io.RandomAccessFile.readUTF(RandomAccessFile.java:938)
        at 
org.apache.cassandra.db.filter.SSTableSliceIterator$ColumnGroupReader.<init>(SSTableSliceIterator.java:125)
        at 
org.apache.cassandra.db.filter.SSTableSliceIterator.<init>(SSTableSliceIterator.java:59)
        at 
org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:63)
        at 
org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:859)
        at 
org.apache.cassandra.db.ColumnFamilyStore.cacheRow(ColumnFamilyStore.java:747)
        at 
org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:772)
        at 
org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:739)
        at org.apache.cassandra.db.Table.getRow(Table.java:381)
        at 
org.apache.cassandra.db.SliceByNamesReadCommand.getRow(SliceByNamesReadCommand.java:56)
        at 
org.apache.cassandra.db.ReadVerbHandler.doVerb(ReadVerbHandler.java:70)
        at 
org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:40)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:636)
{quote}

The clients then die with TimeoutExceptions.

It might be better to return an exception to the client immediately instead of 
letting them die, and it would be helpful if this exception were accompanied 
with a message indicating *which* SStable is malformed. 

This command does *not* turn up the failed table (nor does the same with 
sstablekeys):

{quote}
r...@pmc08:/cassandra/data$ for x in $(ls -t */*-Data.db); do ls -lh $x; 
/usr/local/cassandra/bin/sstable2json $x > /dev/null; done
{quote}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to