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

Charlie Groves commented on CASSANDRA-5351:
-------------------------------------------

bq. 3. Do not compact tables which have never been repaired with tables that 
have had repairs done. This will prevent new sstables from blowing away the 
fact that older tables are all repaired when intersecting ranges per step 2.

What about sstables that share ranges but have different repaired states? They 
can't be combined since that would screw up the repaired state one way or the 
other. Every new sstable written after starting a repair on the ring will lack 
some of the repaired ranges from the start of the repair, so until another 
complete repair is performed, more and more uncombinable sstables will 
accumulate.

I was worried about how this kind of repair would affect compaction in general, 
for a couple reasons:

1. sstables being repaired like this would need to be excluded from compaction 
while the repair was going on. Otherwise when repair completes, the sstables 
could have been compacted into other sstables in the meantime and the repaired 
ranges couldn't be marked.
2. I think this would also require waiting to mark ranges as repaired until 
streaming was ack'd as complete by all the participating nodes. If they were 
marked as repaired before then and one of the nodes crashed before the 
streaming completes, that node would never get the ranges already marked as 
repaired.

Those two conditions together mean there'd be a longish window where a 
significant number of sstables couldn't be combined. That would degrade read 
performance while the repair is going on, and lead to a large compaction when 
it finishes. I didn't get far enough along to figure out how large an impact 
either would have, but that kind of IO variability seemed like a bad thing to 
mix in with repair.
                
> Avoid repairing already-repaired data by default
> ------------------------------------------------
>
>                 Key: CASSANDRA-5351
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-5351
>             Project: Cassandra
>          Issue Type: Task
>          Components: Core
>            Reporter: Jonathan Ellis
>              Labels: repair
>             Fix For: 2.1
>
>
> Repair has always built its merkle tree from all the data in a columnfamily, 
> which is guaranteed to work but is inefficient.
> We can improve this by remembering which sstables have already been 
> successfully repaired, and only repairing sstables new since the last repair. 
>  (This automatically makes CASSANDRA-3362 much less of a problem too.)
> The tricky part is, compaction will (if not taught otherwise) mix repaired 
> data together with non-repaired.  So we should segregate unrepaired sstables 
> from the repaired ones.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to