Skip to content

Commit 03c3333

Browse files
committed
Fix issues with previous merge and cleanup some -specs
Merge of 'gh177-staged-clustering' and 'master' had a few issues. Re-add "clear member metadata on leave" logic that was removed in merge. Re-add riak_core_ring:cancel_transfers/1 that was removed in merge. Perform minor code clean-up. Fix some typespecs to make dialyzer happier (more work still needed). This finalizes integration into 'master' for #181
1 parent 8480b43 commit 03c3333

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

src/riak_core_claimant.erl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,15 @@ start_link() ->
8080
%% modifications that correspond to each resulting cluster transition
8181
%% (eg. the initial transition that applies the staged changes, and
8282
%% any additional transitions triggered by later rebalancing).
83-
-spec plan() -> legacy | {ok, [action()], [ring_transition()]}.
83+
-spec plan() -> {error, term()} | {ok, [action()], [ring_transition()]}.
8484
plan() ->
8585
gen_server:call(claimant(), plan, infinity).
8686

8787
%% @doc Commit the set of staged cluster changes, returning true on success.
8888
%% A commit is only allowed to succeed if the ring is ready and if the
8989
%% current set of changes matches those computed by the most recent
9090
%% call to plan/0.
91-
-spec commit() -> true | false.
91+
-spec commit() -> ok | {error, term()}.
9292
commit() ->
9393
gen_server:call(claimant(), commit, infinity).
9494

@@ -669,7 +669,9 @@ maybe_remove_exiting(Node, CState) ->
669669
Changed = (Exiting /= []),
670670
CState2 =
671671
lists:foldl(fun(ENode, CState0) ->
672-
riak_core_ring:set_member(Node, CState0, ENode,
672+
ClearedCS =
673+
riak_core_ring:clear_member_meta(Node, CState0, ENode),
674+
riak_core_ring:set_member(Node, ClearedCS, ENode,
673675
invalid, same_vclock)
674676
end, CState, Exiting),
675677
{Changed, CState2};
@@ -824,7 +826,6 @@ rebalance_ring(CNode, CState) ->
824826
rebalance_ring(CNode, Next, CState).
825827

826828
rebalance_ring(_CNode, [], CState) ->
827-
828829
CState2 = riak_core_claim:claim(CState),
829830
Owners1 = riak_core_ring:all_owners(CState),
830831
Owners2 = riak_core_ring:all_owners(CState2),
@@ -871,7 +872,7 @@ remove_node(CState, Node, Status, Replacing, Seed, Log) ->
871872
remove_node(CState, Node, Status, Replacing, Seed, Log, Indices).
872873

873874
%% @private
874-
remove_node(CState, _Node, _Status, _Log, _Replacing, _Seed, []) ->
875+
remove_node(CState, _Node, _Status, _Replacing, _Seed, _Log, []) ->
875876
CState;
876877
remove_node(CState, Node, Status, Replacing, Seed, Log, Indices) ->
877878
CStateT1 = riak_core_ring:change_owners(CState,

src/riak_core_ring.erl

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
pretty_print/2,
6767
all_member_status/1,
6868
update_member_meta/5,
69+
clear_member_meta/3,
6970
get_member_meta/3,
7071
add_member/3,
7172
remove_member/3,
@@ -90,6 +91,7 @@
9091
future_indices/2,
9192
future_ring/1,
9293
disowning_indices/2,
94+
cancel_transfers/1,
9395
pending_changes/1,
9496
next_owner/1,
9597
next_owner/2,
@@ -137,7 +139,7 @@
137139
meta % dict of cluster-wide other data (primarily bucket N-value, etc)
138140
}).
139141

140-
-type member_status() :: valid | invalid | leaving | exiting.
142+
-type member_status() :: joining | valid | invalid | leaving | exiting | down.
141143

142144
%% type meta_entry(). Record for each entry in #chstate.meta
143145
-record(meta_entry, {
@@ -531,7 +533,7 @@ increment_ring_version(Node, State) ->
531533
State?CHSTATE{rvsn=RVsn}.
532534

533535
%% @doc Returns the current membership status for a node in the cluster.
534-
-spec member_status(State :: chstate(), Node :: node()) -> member_status().
536+
-spec member_status(chstate() | [node()], Node :: node()) -> member_status().
535537
member_status(?CHSTATE{members=Members}, Node) ->
536538
member_status(Members, Node);
537539
member_status(Members, Node) ->
@@ -581,11 +583,28 @@ update_member_meta(Node, State, Member, Key, Val, same_vclock) ->
581583
State
582584
end.
583585

586+
clear_member_meta(Node, State, Member) ->
587+
Members = State?CHSTATE.members,
588+
case orddict:is_key(Member, Members) of
589+
true ->
590+
Members2 = orddict:update(Member,
591+
fun({Status, VC, _MD}) ->
592+
{Status,
593+
vclock:increment(Node, VC),
594+
orddict:new()}
595+
end,
596+
Members),
597+
State?CHSTATE{members=Members2};
598+
false ->
599+
State
600+
end.
601+
584602
add_member(PNode, State, Node) ->
585603
set_member(PNode, State, Node, joining).
586604

587605
remove_member(PNode, State, Node) ->
588-
set_member(PNode, State, Node, invalid).
606+
State2 = clear_member_meta(PNode, State, Node),
607+
set_member(PNode, State2, Node, invalid).
589608

590609
leave_member(PNode, State, Node) ->
591610
set_member(PNode, State, Node, leaving).
@@ -823,7 +842,11 @@ pretty_print(Ring, Opts) ->
823842
end, 1, Indices),
824843
io:format(Out, "~n", [])
825844
end.
826-
845+
846+
%% @doc Return a ring with all transfers cancelled - for claim sim
847+
cancel_transfers(Ring) ->
848+
Ring?CHSTATE{next=[]}.
849+
827850
%% ===================================================================
828851
%% Legacy reconciliation
829852
%% ===================================================================

0 commit comments

Comments
 (0)