[
https://issues.apache.org/jira/browse/CASSANDRA-2324?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sylvain Lebresne updated CASSANDRA-2324:
----------------------------------------
Attachment: 0001-Make-repair-operate-over-a-node-token-range.patch
Attached patch modify repair to operate on one token range at a time. Nodetool
repair schedule as many repair session than the node have ranges to perform a
full node repair. Note that this is more efficient than previously, since the
neighbors of the node will only do a validation compaction on the range they
have in common with the node coordinating the repair (instead of validating
everything).
This moreover makes it trivial to add an option to nodetool so that the node
only repair it's primary range. That way, you can repair a full cluster by
calling this operation on every node and there is no duplication of work. The
patch doesn't add this option yet though.
The patch is against trunk. Because the way we construct the merkleTree is
fundamentally different, the trees created by 0.7 cannot be compared to the
ones created with this patch. The strategy this patch adopts with respect to
talking to 0.7 nodes is this:
* If a 0.7 node asks for a merkleTree, since we are still able to do a full
compaction validation, we do it and answer with that.
* Since a 0.7 node cannot do a merkleTree that would be ok for us, we simply
exclude 0.7 nodes from the endpoints we ask merkleTree from.
I don't feel this is a trivially enough patch to go to the 0.7 branch.
> Repair transfers more data than necessary
> -----------------------------------------
>
> Key: CASSANDRA-2324
> URL: https://issues.apache.org/jira/browse/CASSANDRA-2324
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Affects Versions: 0.7.0
> Reporter: Brandon Williams
> Assignee: Sylvain Lebresne
> Fix For: 0.7.5
>
> Attachments: 0001-Make-repair-operate-over-a-node-token-range.patch
>
>
> To repro: 3 node cluster, stress.java 1M rows with -x KEYS and -l 2. The
> index is enough to make some mutations drop (about 20-30k total in my tests).
> Repair afterwards will repair a large amount of ranges the first time.
> However, each subsequent run will repair the same set of small ranges every
> time. INDEXED_RANGE_SLICE in stress never fully works. Counting rows with
> sstablekeys shows there are 2M rows total as expected, however when trying to
> count the indexed keys, I get exceptions like:
> {noformat}
> Exception in thread "main" java.io.IOException: Key out of order!
> DecoratedKey(101571366040797913119296586470838356016,
> 0707ab782c5b5029d28a5e6d508ef72f0222528b5e28da3b7787492679dc51b96f868e0746073e54bc173be927049d0f51e25a6a95b3268213b8969abf40cea7d7)
> > DecoratedKey(12639574763031545147067490818595764132,
> 0bc414be3093348a2ad389ed28f18f0cc9a044b2e98587848a0d289dae13ed0ad479c74654900eeffc6236)
> at
> org.apache.cassandra.tools.SSTableExport.enumeratekeys(SSTableExport.java:206)
> at
> org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:388)
> {noformat}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira