Bugfix: allow none proj to re-emerge from flapping (more)
See comments added in this commit at A40. So far, I've been doing CP mode testing with a handful of (very useful) network partition combinations using: machi_chain_manager1_converge_demo:t(3, [{private_write_verbose,true}, {consistency_mode, cp_mode}, {witnesses, [a]}]). Next steps: * Expand number & types of partitions * Expand to chain lengths of 5 and beyond
This commit is contained in:
parent
ee19a0856b
commit
94394d3429
2 changed files with 15 additions and 9 deletions
|
@ -1641,6 +1641,7 @@ react_to_env_A40(Retries, P_newprop, P_latest, LatestUnanimousP,
|
||||||
|
|
||||||
true ->
|
true ->
|
||||||
?REACT({a40, ?LINE, [true]}),
|
?REACT({a40, ?LINE, [true]}),
|
||||||
|
CurrentZerfInStatus_p = has_make_zerf_annotation(P_current),
|
||||||
GoTo50_p =
|
GoTo50_p =
|
||||||
case inner_projection_exists(P_current) andalso
|
case inner_projection_exists(P_current) andalso
|
||||||
inner_projection_exists(P_newprop) andalso
|
inner_projection_exists(P_newprop) andalso
|
||||||
|
@ -1664,8 +1665,20 @@ react_to_env_A40(Retries, P_newprop, P_latest, LatestUnanimousP,
|
||||||
true
|
true
|
||||||
end;
|
end;
|
||||||
false ->
|
false ->
|
||||||
|
?REACT({a40, ?LINE, [{currentzerfinstatus_p,CurrentZerfInStatus_p}]}),
|
||||||
|
if CurrentZerfInStatus_p andalso
|
||||||
|
P_newprop#projection_v1.upi /= [] ->
|
||||||
|
%% One scenario here: we are waking up after
|
||||||
|
%% a slumber with the none proj and need to
|
||||||
|
%% send P_newprop (which has non/empty UPI)
|
||||||
|
%% through the process to continue chain
|
||||||
|
%% recovery.
|
||||||
|
?REACT({a40, ?LINE, []}),
|
||||||
|
false;
|
||||||
|
true ->
|
||||||
?REACT({a40, ?LINE, []}),
|
?REACT({a40, ?LINE, []}),
|
||||||
true
|
true
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
if GoTo50_p ->
|
if GoTo50_p ->
|
||||||
?REACT({a40, ?LINE, []}),
|
?REACT({a40, ?LINE, []}),
|
||||||
|
@ -1692,10 +1705,6 @@ react_to_env_A50(P_latest, FinalProps, #ch_mgr{proj=P_current}=S) ->
|
||||||
?REACT({a50, ?LINE, [{current_epoch, P_current#projection_v1.epoch_number},
|
?REACT({a50, ?LINE, [{current_epoch, P_current#projection_v1.epoch_number},
|
||||||
{latest_epoch, P_latest#projection_v1.epoch_number},
|
{latest_epoch, P_latest#projection_v1.epoch_number},
|
||||||
{final_props, FinalProps}]}),
|
{final_props, FinalProps}]}),
|
||||||
V = case file:read_file("/tmp/moomoo") of {ok, _} -> true; _ -> false end,
|
|
||||||
if V,S#ch_mgr.name == b -> io:format(user, "A50: ~p: ~p\n", [S#ch_mgr.name, get(react)]); true -> ok end,
|
|
||||||
%% if V andalso (S#ch_mgr.name == b orelse S#ch_mgr.name == c) -> io:format(user, "A50: ~p: ~p\n", [S#ch_mgr.name, get(react)]); true -> ok end,
|
|
||||||
%% io:format(user, "Debug A50: ~w P_current outer ~w ~w ~w\n", [S#ch_mgr.name, P_current#projection_v1.epoch_number,P_current#projection_v1.upi,P_current#projection_v1.repairing]),
|
|
||||||
{{no_change, FinalProps, P_current#projection_v1.epoch_number}, S}.
|
{{no_change, FinalProps, P_current#projection_v1.epoch_number}, S}.
|
||||||
|
|
||||||
react_to_env_B10(Retries, P_newprop, P_latest, LatestUnanimousP,
|
react_to_env_B10(Retries, P_newprop, P_latest, LatestUnanimousP,
|
||||||
|
|
|
@ -254,10 +254,8 @@ convergence_demo_testfun(NumFLUs, MgrOpts0) ->
|
||||||
AllPs = make_partition_list(All_list),
|
AllPs = make_partition_list(All_list),
|
||||||
PartitionCounts = lists:zip(AllPs, lists:seq(1, length(AllPs))),
|
PartitionCounts = lists:zip(AllPs, lists:seq(1, length(AllPs))),
|
||||||
MaxIters = NumFLUs * (NumFLUs + 1) * 6,
|
MaxIters = NumFLUs * (NumFLUs + 1) * 6,
|
||||||
os:cmd("rm -f /tmp/moomoo"),
|
|
||||||
[begin
|
[begin
|
||||||
machi_partition_simulator:always_these_partitions(Partition),
|
machi_partition_simulator:always_these_partitions(Partition),
|
||||||
%% if Partition==[] -> os:cmd("touch /tmp/moomoo"); true -> ok end,
|
|
||||||
io:format(user, "\nSET partitions = ~w (~w of ~w) at ~w\n",
|
io:format(user, "\nSET partitions = ~w (~w of ~w) at ~w\n",
|
||||||
[Partition, Count, length(AllPs), time()]),
|
[Partition, Count, length(AllPs), time()]),
|
||||||
true = lists:foldl(
|
true = lists:foldl(
|
||||||
|
@ -318,7 +316,6 @@ os:cmd("rm -f /tmp/moomoo"),
|
||||||
end || {Partition, Count} <- PartitionCounts
|
end || {Partition, Count} <- PartitionCounts
|
||||||
],
|
],
|
||||||
|
|
||||||
os:cmd("touch /tmp/moomoo"),
|
|
||||||
io:format(user, "\nSET partitions = []\n", []),
|
io:format(user, "\nSET partitions = []\n", []),
|
||||||
io:format(user, "We should see convergence to 1 correct chain.\n", []),
|
io:format(user, "We should see convergence to 1 correct chain.\n", []),
|
||||||
machi_partition_simulator:no_partitions(),
|
machi_partition_simulator:no_partitions(),
|
||||||
|
|
Loading…
Reference in a new issue