cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefania (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-10421) Potential issue with LogTransaction as it only checks in a single directory for files
Date Fri, 23 Oct 2015 00:43:27 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-10421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14970203#comment-14970203
] 

Stefania commented on CASSANDRA-10421:
--------------------------------------

bq. Can you update the Windows branch so we can see how it does on Windows before committing?

Windows branch updated and jobs are scheduled:

http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-10421-windows-3.0-utest_win32/
http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-10421-windows-3.0-dtest_win32/

bq. The first was the bad assumption in LogRecord.getExistingFiles, which caused it to throw,
which exposed the missing exception handling in Memtable (leaking the transaction) which exposed
the fact that leaked transactions when cleaned up by the garbage collector fail to cleanup
due to an incorrect assertion.

Your 100% correct. This once again highlights how beneficial testing this component with failure
injection would be. Another example is CASSANDRA-10538.

bq. So when you fixed the assertion you call abort. What happens if a transaction commits,
but isn't closed and that leads to the commit followed by an abort? Or is closing the only
way to get a commit?

If a transaction commits then it is completed and we will not call abort. I think the only
risk is if we throw an exception in the commit operation _after writing to file and before
updating the records in memory_, in which case we would end up with a corrupt file as you
said. But after CASSANDRA-10538 is applied, we will update the records just after writing
to file, so this should be safe.

> Potential issue with LogTransaction as it only checks in a single directory for files
> -------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-10421
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-10421
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Marcus Eriksson
>            Assignee: Stefania
>            Priority: Blocker
>             Fix For: 3.0.0
>
>
> When creating a new LogTransaction we try to create the new logfile in the same directory
as the one we are writing to, but as we use {{[directories.getDirectoryForNewSSTables()|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java#L125]}}
this might end up in "any" of the configured data directories. If it does, we will not be
able to clean up leftovers as we check for files in the same directory as the logfile was
created: https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/lifecycle/LogRecord.java#L163
> cc [~Stefania]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message