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

Stefania commented on CASSANDRA-7066:
-------------------------------------

[~benedict] thank you for your comments. I've updated the description and 
implemented the incremental checksum checks. You may want to review all 
together later or take a quick look at what we do when a check fails, which is 
not much, just leave the files there and log an error, not sure what a panic 
error is exactly?

bq. Perhaps we should offer a tool, like sstablelister, to offline complete any 
transaction log files, which can be specified as prep-work for backup restore

sstablelister will return all tx logs as well as temporary files: 
{{sstablelister -o -t tmp ks table}}, so they can delete tx logs and tmp files 
with one command, which is equivalent to offline complete.

I still need clarifications regarding the last point:

bq. I agree about individual files over-complicating things, however we _could 
_ perhaps take the maximum last modified of all files with that descriptor, and 
then delete the files in ascending order of last modified. This would just help 
the log files be robust to backups being copied in with these files still 
present and referencing them as old, and also to some potential effects of 
problems like CASSANDRA-9908.

Here we are talking about old files only, right? Because new files haven't even 
been created yet when trackNew() is called and it must be like so to ensure we 
don't have any window where physical temporary files exist that are not 
tracked. So we would take the last modified of all files with that descriptor 
when obsoleted is called and log this time along with the descriptor? Then when 
it's time to delete old files we refuse to delete any more recent files, do I 
understand this correctly?

[~nickmbailey] your points are well noted:

bq. The snapshot command should create a full backup of a keyspace/table on the 
node. The directories created from the snapshot should be all that is required 
to restore that keyspace/table on that node to the point in time that the 
snapshot was taken.

The snapshot command creates hard links to the sstable files, it won't look at 
transaction log files. The new lifecycle transaction ensures the sstables live 
for a cfs are valid and not temporary.

bq. A snapshot should be restorable either via the sstableloader tool or by 
manually copying the files from the snapshot in to place (given the same 
schema/topology). If copying the files into place manually, restarting the node 
or making an additional call to load the sstables may be required.

If copying the files manually users will have to remove any partial transaction 
log files and their temporary files. This can be done via sstablelister with 
one command, for example {{for x in $(sstablelister -o -t tmp ks table); do rm 
$x; done)}}. sstable loader is implemented via streaming so the uploaded 
sstables will automatically get a new generation and won't clash with older 
sstables involved in transactions.

bq. When using the sstableloader tool I should be able to restore data taken 
from a snapshot regardless of what data exists on the node or is currently 
being written.

As per above, this should be the case.



> Simplify (and unify) cleanup of compaction leftovers
> ----------------------------------------------------
>
>                 Key: CASSANDRA-7066
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7066
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Benedict
>            Assignee: Stefania
>            Priority: Minor
>              Labels: benedict-to-commit, compaction
>             Fix For: 3.0 alpha 1
>
>         Attachments: 7066.txt
>
>
> Currently we manage a list of in-progress compactions in a system table, 
> which we use to cleanup incomplete compactions when we're done. The problem 
> with this is that 1) it's a bit clunky (and leaves us in positions where we 
> can unnecessarily cleanup completed files, or conversely not cleanup files 
> that have been superceded); and 2) it's only used for a regular compaction - 
> no other compaction types are guarded in the same way, so can result in 
> duplication if we fail before deleting the replacements.
> I'd like to see each sstable store in its metadata its direct ancestors, and 
> on startup we simply delete any sstables that occur in the union of all 
> ancestor sets. This way as soon as we finish writing we're capable of 
> cleaning up any leftovers, so we never get duplication. It's also much easier 
> to reason about.



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

Reply via email to