You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Vovodroid (JIRA)" <ji...@apache.org> on 2015/10/02 05:48:26 UTC
[jira] [Updated] (CASSANDRA-10377) AssertionError: attempted to
delete non-existing file CommitLog
[ https://issues.apache.org/jira/browse/CASSANDRA-10377?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vovodroid updated CASSANDRA-10377:
----------------------------------
Attachment: 10377.patch
It seems I found reason for issue. Function *recycleSegment* is called from different threads, then it removes segment from activeSegments queue and then it queues segment deletion task, even if segment not found in activeSegments queue.
Due to racing it possible that *recycleSegment* will be called twice and thus two identical deletion task will be queued.
Proposed patch check remove from activeSegments queue result and delete segment only if it found in queue.
> AssertionError: attempted to delete non-existing file CommitLog
> ---------------------------------------------------------------
>
> Key: CASSANDRA-10377
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10377
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Environment: CentOS 7.1/x64
> Reporter: Vovodroid
> Priority: Critical
> Attachments: 10377.patch
>
>
> After several hours of script tests (create and drop users, keyspaces and tables) exception is thrown:
> {code}
> ERROR 02:58:39 Failed managing commit log segments. Commit disk failure policy is stop; terminating thread
> java.lang.AssertionError: attempted to delete non-existing file CommitLog-5-1442599226756.log
> at org.apache.cassandra.io.util.FileUtils.deleteWithConfirm(FileUtils.java:122) ~[main/:na]
> at org.apache.cassandra.io.util.FileUtils.deleteWithConfirm(FileUtils.java:149) ~[main/:na]
> at org.apache.cassandra.db.commitlog.CommitLogSegment.discard(CommitLogSegment.java:314) ~[main/:na]
> at org.apache.cassandra.db.commitlog.CommitLogSegmentManager$2.run(CommitLogSegmentManager.java:374) ~[main/:na]
> at org.apache.cassandra.db.commitlog.CommitLogSegmentManager$1.runMayThrow(CommitLogSegmentManager.java:155) ~[main/:na]
> at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) [main/:na]
> at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
> {code}
> I added some logs to *deleteWithConfirm* and it showed that this file really was deleted by previous delete action, i.e. it was second attempt to delete the same log. Commit log with next number exists in the same time, so log was switched.
> I disabled assert and it seems to have no no bad effect.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)