You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jonathan Ellis (JIRA)" <ji...@apache.org> on 2010/10/01 19:26:35 UTC

[jira] Updated: (CASSANDRA-1330) AssertionError: discard at CommitLogContext(file=...) is not after last flush at ...

     [ https://issues.apache.org/jira/browse/CASSANDRA-1330?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jonathan Ellis updated CASSANDRA-1330:
--------------------------------------

    Attachment: 1330.txt

This really is essentially the same scenario as CASSANDRA-936.  (See my 3rd-from-the-bottom comment for background and a diagram.)

The part my analysis in 936 is missing is that the CL holds mutations from many columnfamilies, so the position from the first turnOn in a given CF may be arbitrarily high depending on how many mutations happened to other CFs first.  (Similarly, the flush context may also be arbitrarily high, although it's more likely to be low because this scenario can't occur once each CF has been flushed once in the new segment.)

Given the turnOn-for-first-write-to-CF-in-new-segment behavior (which is what keeps us from having to replay the entirety of any not-completely-flushed segement), I don't think we can usefully assert anything about the flush context vs the dirty position.  This patch removes it -- and changes CLS.lastFlushedAt to CLS.cfDirtiedAt (which is what it has already been renamed to in 0.7) to make it more clear that flushing isn't the only thing that affects the header positions.

> AssertionError: discard at CommitLogContext(file=...) is not after last flush at  ...
> -------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-1330
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1330
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 0.6.3
>         Environment: Java 1.6 / Linux
>            Reporter: Viliam Holub
>            Assignee: Matthew F. Dennis
>             Fix For: 0.6.6, 0.7.0
>
>         Attachments: 1330.txt
>
>
> Looks related to CASSANDRA-936?
> ERROR [MEMTABLE-POST-FLUSHER:1] 2010-07-28 11:39:36,909 CassandraDaemon.java (line 83) Uncaught exception in thread Thread[MEMTABLE-POST-FLUSHER:1,5,main]
> java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.AssertionError: discard at CommitLogContext(file='/srv/cassandra/commitlog/CommitLog-1280331567364.log', position=181) is not after last flush at 563
>         at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
>         at java.util.concurrent.FutureTask.get(FutureTask.java:111)
>         at org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor.afterExecute(DebuggableThreadPoolExecutor.java:86)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1118)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:636)
> Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.AssertionError: discard at CommitLogContext(file='/srv/cassandra/commitlog/CommitLog-1280331567364.log', position=181) is not after last flush at 563
>         at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:34)
>         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>         ... 2 more
> Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.AssertionError: discard at CommitLogContext(file='/srv/cassandra/commitlog/CommitLog-1280331567364.log', position=181) is not after last flush at 563
>         at org.apache.cassandra.db.commitlog.CommitLog.discardCompletedSegments(CommitLog.java:373)
>         at org.apache.cassandra.db.ColumnFamilyStore$1.runMayThrow(ColumnFamilyStore.java:371)
>         at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
>         ... 6 more
> Caused by: java.util.concurrent.ExecutionException: java.lang.AssertionError: discard at CommitLogContext(file='/srv/cassandra/commitlog/CommitLog-1280331567364.log', position=181) is not after last flush at 563
>         at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
>         at java.util.concurrent.FutureTask.get(FutureTask.java:111)
>         at org.apache.cassandra.db.commitlog.CommitLog.discardCompletedSegments(CommitLog.java:365)
>         ... 8 more
> Caused by: java.lang.AssertionError: discard at CommitLogContext(file='/srv/cassandra/commitlog/CommitLog-1280331567364.log', position=181) is not after last flush at 563
>         at org.apache.cassandra.db.commitlog.CommitLog.discardCompletedSegmentsInternal(CommitLog.java:394)
>         at org.apache.cassandra.db.commitlog.CommitLog.access$300(CommitLog.java:70)
>         at org.apache.cassandra.db.commitlog.CommitLog$6.call(CommitLog.java:359)
>         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>         at org.apache.cassandra.db.commitlog.PeriodicCommitLogExecutorService$1.runMayThrow(PeriodicCommitLogExecutorService.java:52)
>         at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
>         ... 1 more

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