SSTable doesn't handle corrupt (empty) tmp files
------------------------------------------------

                 Key: CASSANDRA-1904
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1904
             Project: Cassandra
          Issue Type: Bug
    Affects Versions: 0.7.0 rc 2
            Reporter: Timo Nentwig
             Fix For: 0.7.0


Applies to 0.7rc3 as well, but not yet selectable in Jira.

cassandra stumbles upons empty Data files and crashes during startup rather 
than ignoring these files:

java.lang.ArithmeticException: / by zero
        at 
org.apache.cassandra.io.sstable.SSTable.estimateRowsFromIndex(SSTable.java:233)
        at 
org.apache.cassandra.io.sstable.SSTableReader.load(SSTableReader.java:284)
        at 
org.apache.cassandra.io.sstable.SSTableReader.open(SSTableReader.java:200)
        at 
org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:225)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:448)
        at 
org.apache.cassandra.db.ColumnFamilyStore.addIndex(ColumnFamilyStore.java:305)
        at 
org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:246)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:448)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:436)
        at org.apache.cassandra.db.Table.initCf(Table.java:360)
        at org.apache.cassandra.db.Table.<init>(Table.java:290)
        at org.apache.cassandra.db.Table.open(Table.java:107)
        at 
org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:138)
        at 
org.apache.cassandra.thrift.CassandraDaemon.setup(CassandraDaemon.java:55)
        at 
org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:216)
        at 
org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:134)
Exception encountered during startup.
java.lang.ArithmeticException: / by zero
        at 
org.apache.cassandra.io.sstable.SSTable.estimateRowsFromIndex(SSTable.java:233)
        at 
org.apache.cassandra.io.sstable.SSTableReader.load(SSTableReader.java:284)
        at 
org.apache.cassandra.io.sstable.SSTableReader.open(SSTableReader.java:200)
        at 
org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:225)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:448)
        at 
org.apache.cassandra.db.ColumnFamilyStore.addIndex(ColumnFamilyStore.java:305)
        at 
org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:246)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:448)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:436)
        at org.apache.cassandra.db.Table.initCf(Table.java:360)
        at org.apache.cassandra.db.Table.<init>(Table.java:290)
        at org.apache.cassandra.db.Table.open(Table.java:107)
        at 
org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:138)
        at 
org.apache.cassandra.thrift.CassandraDaemon.setup(CassandraDaemon.java:55)
        at 
org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:216)
        at 
org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:134)

The empty Data/Index tmp files were in my case created and left over when I 
attempted to create a secondary index at runtime which crashed the JVM due to 
OOM.

SSTable handles IOExceptions so it should be an easy fix: in 
SSTable.estimateRowsFromIndex() just check for ifile.length() 
==ifile.getFilePointer()==keys==0 and throw an IOException.

-- 
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