Bugfix: wow, a chain state transition sanity check bug
This commit is contained in:
parent
8df7d58365
commit
a0c129c16d
2 changed files with 11 additions and 8 deletions
|
@ -112,7 +112,7 @@
|
||||||
-export([make_chmgr_regname/1, projection_transitions_are_sane/2,
|
-export([make_chmgr_regname/1, projection_transitions_are_sane/2,
|
||||||
simple_chain_state_transition_is_sane/3,
|
simple_chain_state_transition_is_sane/3,
|
||||||
simple_chain_state_transition_is_sane/5,
|
simple_chain_state_transition_is_sane/5,
|
||||||
chain_state_transition_is_sane/5]).
|
chain_state_transition_is_sane/6]).
|
||||||
%% Exports so that EDoc docs generated for these internal funcs.
|
%% Exports so that EDoc docs generated for these internal funcs.
|
||||||
-export([mk/3]).
|
-export([mk/3]).
|
||||||
|
|
||||||
|
@ -1575,7 +1575,7 @@ react_to_env_C100(P_newprop,
|
||||||
if Sane == true -> ok; true -> ?V("~w-insane-~w-~w:~w:~w,", [?LINE, MyName, P_newprop#projection_v1.epoch_number, P_newprop#projection_v1.upi, P_newprop#projection_v1.repairing]) end, %%% DELME!!!
|
if Sane == true -> ok; true -> ?V("~w-insane-~w-~w:~w:~w,", [?LINE, MyName, P_newprop#projection_v1.epoch_number, P_newprop#projection_v1.upi, P_newprop#projection_v1.repairing]) end, %%% DELME!!!
|
||||||
react_to_env_C110(P_latest, S);
|
react_to_env_C110(P_latest, S);
|
||||||
true ->
|
true ->
|
||||||
?REACT({c100, ?LINE, [sane]}),
|
?REACT({c100, ?LINE, [{sane,get(why2)}]}),
|
||||||
if Sane == true -> ok; true -> ?V("~w-insane-~w-~w:~w:~w@~w,", [?LINE, MyName, P_newprop#projection_v1.epoch_number, P_newprop#projection_v1.upi, P_newprop#projection_v1.repairing, ?LINE]) end, %%% DELME!!!
|
if Sane == true -> ok; true -> ?V("~w-insane-~w-~w:~w:~w@~w,", [?LINE, MyName, P_newprop#projection_v1.epoch_number, P_newprop#projection_v1.upi, P_newprop#projection_v1.repairing, ?LINE]) end, %%% DELME!!!
|
||||||
|
|
||||||
V = case file:read_file("/tmp/bugbug."++atom_to_list(S#ch_mgr.name)) of {ok,_} -> true; _ -> false end,
|
V = case file:read_file("/tmp/bugbug."++atom_to_list(S#ch_mgr.name)) of {ok,_} -> true; _ -> false end,
|
||||||
|
@ -2011,7 +2011,8 @@ projection_transition_is_sane_except_si_epoch(
|
||||||
UPI_list2w = UPI_list2 -- Witness_list2,
|
UPI_list2w = UPI_list2 -- Witness_list2,
|
||||||
?RETURN2(
|
?RETURN2(
|
||||||
chain_state_transition_is_sane(AuthorServer1, UPI_list1w,Repairing_list1,
|
chain_state_transition_is_sane(AuthorServer1, UPI_list1w,Repairing_list1,
|
||||||
AuthorServer2, UPI_list2w))
|
AuthorServer2, UPI_list2w,
|
||||||
|
RelativeToServer))
|
||||||
catch
|
catch
|
||||||
_Type:_Err ->
|
_Type:_Err ->
|
||||||
?RETURN2(oops),
|
?RETURN2(oops),
|
||||||
|
@ -2386,7 +2387,8 @@ simple_chain_state_transition_is_sane(_Author1, UPI1, Repair1, Author2, UPI2) ->
|
||||||
%% functions) are the only functions (throughout all of the chain state
|
%% functions) are the only functions (throughout all of the chain state
|
||||||
%% transition sanity checking functions) that is allowed to return `false'.
|
%% transition sanity checking functions) that is allowed to return `false'.
|
||||||
|
|
||||||
chain_state_transition_is_sane(Author1, UPI1, Repair1, Author2, UPI2) ->
|
chain_state_transition_is_sane(Author1, UPI1, Repair1, Author2, UPI2,
|
||||||
|
RelativeToServer) ->
|
||||||
ToSelfOnly_p = if UPI2 == [Author2] -> true;
|
ToSelfOnly_p = if UPI2 == [Author2] -> true;
|
||||||
true -> false
|
true -> false
|
||||||
end,
|
end,
|
||||||
|
@ -2402,9 +2404,10 @@ chain_state_transition_is_sane(Author1, UPI1, Repair1, Author2, UPI2) ->
|
||||||
Disjoint_UPIs ->
|
Disjoint_UPIs ->
|
||||||
%% The transition from UPI1 -> UPI2 where the two are
|
%% The transition from UPI1 -> UPI2 where the two are
|
||||||
%% disjoint/no FLUs in common.
|
%% disjoint/no FLUs in common.
|
||||||
%% For AP mode, this transition is always safe (though not
|
%% For AP mode, this transition is safe (though not
|
||||||
%% always optimal for highest availability).
|
%% always optimal for highest availability) if I am not
|
||||||
?RETURN2(true);
|
%% a member of the new UPI.
|
||||||
|
?RETURN2(not lists:member(RelativeToServer, UPI2));
|
||||||
true ->
|
true ->
|
||||||
?RETURN2(
|
?RETURN2(
|
||||||
simple_chain_state_transition_is_sane(Author1, UPI1, Repair1,
|
simple_chain_state_transition_is_sane(Author1, UPI1, Repair1,
|
||||||
|
|
|
@ -230,7 +230,7 @@ prop_compare_legacy_with_v2_chain_transition_check(Style) ->
|
||||||
case Style of
|
case Style of
|
||||||
primitive ->
|
primitive ->
|
||||||
New_res = ?MGR:chain_state_transition_is_sane(
|
New_res = ?MGR:chain_state_transition_is_sane(
|
||||||
Author1, UPI1, Repair1, Author2, UPI2),
|
Author1, UPI1, Repair1, Author2, UPI2, Author2),
|
||||||
New_p = case New_res of true -> true;
|
New_p = case New_res of true -> true;
|
||||||
_ -> false
|
_ -> false
|
||||||
end;
|
end;
|
||||||
|
|
Loading…
Reference in a new issue