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

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

Just outlining some more options:

* The current approach is the most permissive approach, in that we clean up a 
transaction even if some final files are missing (because a disk was removed 
for example). My reasoning is that from the transaction point of view, it did 
complete or abort and so it should not keep old files if the new files have 
been removed for another reason, or should it?

* If we instead wrote all sstable files to all log files we could detect if 
some final files are missing and refuse to clean-up. This would be safer but it 
does however have the disadvantage that we could delete files in a folder even 
if in that folder there is no txn log. Currently this is incompatible with 
listing temporary files as we only look at the txn file in the current folder. 
So this could be counter-intuitive in that an operator might delete the txn log 
file in a folder, confirm with {{sstableutil}} that the stables in that folder 
are not temporary, and yet we delete those files on startup. So if we went down 
this route we'd have to extend listing as well, at least when offline.

* There is one more approach, the most pessimistic, which is to refuse to clean 
up a transaction if any log files are  missing. This we could detect by 
counting the number of records or log files and adding this number to the final 
record, protected by the checksum. It would however mean that if a user removed 
a disk, we would not clean-up the leftovers on a different disk but we could 
stash them or let the operation handle them manually by printing out all 
necessary information (CASSANDRA-10112).

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

Reply via email to