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

Blake Eggleston commented on CASSANDRA-12888:
---------------------------------------------

+1 on the design doc, or at least a comment thoroughly explaining the approach, 
since this seems to be a bit different from what was discussed above. Paulo, 
you're correct about #9143, we're going to need to preserve the pendingRepair 
value as well.

At a high level though, I think the patch, and some of the solutions discussed, 
are approaching the problem from the wrong direction. Having to bend and 
repurpose storage system components like this to make streaming and repair work 
properly, to me, indicates there’s a problem in the MV implementation. 
Specifically, we shouldn't have to rewrite data that was just streamed. I think 
it would be better to focus on fixing those problems, instead of adding 
complexity to the storage layer to work around them. The contents of Mutations 
and UnfilteredRowIterators are pretty similar, decoupling the MV code from the 
write path should make it possible to apply the MV logic to sstable data 
without having to run it through the entire write path.

> Incremental repairs broken for MVs and CDC
> ------------------------------------------
>
>                 Key: CASSANDRA-12888
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-12888
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Streaming and Messaging
>            Reporter: Stefan Podkowinski
>            Assignee: Benjamin Roth
>             Fix For: 3.0.x, 3.11.x
>
>
> SSTables streamed during the repair process will first be written locally and 
> afterwards either simply added to the pool of existing sstables or, in case 
> of existing MVs or active CDC, replayed on mutation basis:
> As described in {{StreamReceiveTask.OnCompletionRunnable}}:
> {quote}
> We have a special path for views and for CDC.
> For views, since the view requires cleaning up any pre-existing state, we 
> must put all partitions through the same write path as normal mutations. This 
> also ensures any 2is are also updated.
> For CDC-enabled tables, we want to ensure that the mutations are run through 
> the CommitLog so they can be archived by the CDC process on discard.
> {quote}
> Using the regular write path turns out to be an issue for incremental 
> repairs, as we loose the {{repaired_at}} state in the process. Eventually the 
> streamed rows will end up in the unrepaired set, in contrast to the rows on 
> the sender site moved to the repaired set. The next repair run will stream 
> the same data back again, causing rows to bounce on and on between nodes on 
> each repair.
> See linked dtest on steps to reproduce. An example for reproducing this 
> manually using ccm can be found 
> [here|https://gist.github.com/spodkowinski/2d8e0408516609c7ae701f2bf1e515e8]



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to