Extending location awareness for general join/leave support
Background information:
- The [original problems with the old algorithm](https://github.com/infinityworks/riak_core/blob/mas-claimv2issues/docs/ring_claim.md);
- The [fix to the claim/join algorithm](https://github.com/basho/riak_core/blob/develop/docs/claim-fixes.md);
- The [PR to fix the leave algorithm](https://github.com/basho/riak_core/pull/972);
- The [original rack awareness PR](https://github.com/basho/riak_core/pull/967).
When joining a node, the following algorithms are attempted:
1 - A basic attempt to satisfy wants (vnodes required by the joining node) by asking node-by-node which vnodes can be passed on without breaking `target_n_val` (the `claim_v2` algortihm).
2 - If Step 1 is unsuccessful, then attempt to stripe the all vnodes across all nodes (the `sequential_claim` algorithm).
3 - If Step 2 creates tail violations (i.e. if 0 < RingSize rem NodeCount < TargetNVal), resolve through the `solve_tail_violations` [algorithm](https://github.com/basho/riak_core/blob/develop/docs/claim-fixes.md#tail-violations).
When leaving a node, the following algorithms are attempted:
1 - A basic attempt to perform a `simple_transfer` (vnodes are passed in turn to nodes that would not break `target_n_val`).
2 - Use `sequential_claim` as in join.
3 - Use `solve_tail_violations` extension to `sequential_claim` as in join
Ideally, in both cases Step 1 should succeed - as Step 2 will inevitable lead to a full cluster reorganisation (and hence a large volume of transfers).
As part of https://github.com/basho/riak_core/pull/967 location awareness was added to the `sequential_claim` algorithm (Step 2).
This issue is to document an ongoing investigation to these three problems:
- Under what conditions does the `sequential_claim` algorithm (both with and without the need for the `solve_tail_volationa` algorithm provide a location safe cluster;
- Can the `claim_v2` (Step 1 for joins) and `simple_transfer` (Step 1 for leave) algorithms be extended to be location aware;
- Can the `claim_v2` and `simple_transfer` algorithms be extended to reduce the scenarios in which cluster changes fallback to `sequential_claim`.
2 条评论