memtable flush during index build causes AssertionError
-------------------------------------------------------

                 Key: CASSANDRA-2747
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-2747
             Project: Cassandra
          Issue Type: Bug
          Components: Core
    Affects Versions: 0.8.0
            Reporter: Aaron Morton
            Assignee: Aaron Morton


Noticed when loading a lot of rows and then creating secondary indexes using 
update CF via the CLI. 

{code:java}
ERROR 18:56:25,008 Fatal exception in thread Thread[FlushWriter:3,5,main]
java.lang.AssertionError
        at org.apache.cassandra.io.sstable.SSTable.<init>(SSTable.java:91)
        at 
org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:71)
        at 
org.apache.cassandra.db.ColumnFamilyStore.createFlushWriter(ColumnFamilyStore.java:2124)
        at 
org.apache.cassandra.db.Memtable.writeSortedContents(Memtable.java:246)
        at org.apache.cassandra.db.Memtable.access$400(Memtable.java:49)
        at org.apache.cassandra.db.Memtable$3.runMayThrow(Memtable.java:270)
        at 
org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
        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)
{code}

Table.IndexBuilder.build() calls cfs.maybeSwitchMemtable() with writeCommitLog 
false. So a null ReplayPosition is eventually passed to 
Memtable.writeSortedContents(). 

SSTableRead.open() checks Descriptor.hasReplayPosition() and it looks like any 
0.8 stats file should have a ReplayPosition. 

Looks like cfs.maybeSwitchMemtable() should use ReplayPosition.NONE rather than 
null. Patch looks easy, will also try to write a test.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to