If FLU is wedged by a newer client epoch ID, kick the chain manager to react

This commit is contained in:
Scott Lystig Fritchie 2015-07-03 02:17:01 +09:00
parent ff66638eb3
commit c6870a1c86

View file

@ -209,9 +209,6 @@ start_append_server(S, AckPid) ->
FluPid = self(), FluPid = self(),
proc_lib:spawn_link(fun() -> run_append_server(FluPid, AckPid, S) end). proc_lib:spawn_link(fun() -> run_append_server(FluPid, AckPid, S) end).
%% start_projection_server(S) ->
%% spawn_link(fun() -> run_projection_server(S) end).
run_listen_server(#state{flu_name=FluName, tcp_port=TcpPort}=S) -> run_listen_server(#state{flu_name=FluName, tcp_port=TcpPort}=S) ->
register(make_listener_regname(FluName), self()), register(make_listener_regname(FluName), self()),
SockOpts = ?PB_PACKET_OPTS ++ SockOpts = ?PB_PACKET_OPTS ++
@ -244,7 +241,7 @@ listen_server_loop(LSock, S) ->
listen_server_loop(LSock, S). listen_server_loop(LSock, S).
append_server_loop(FluPid, #state{data_dir=DataDir, wedged=Wedged_p, append_server_loop(FluPid, #state{data_dir=DataDir, wedged=Wedged_p,
epoch_id=OldEpochId}=S) -> epoch_id=OldEpochId, flu_name=FluName}=S) ->
AppendServerPid = self(), AppendServerPid = self(),
receive receive
{seq_append, From, _Prefix, _Chunk, _CSum, _Extra, _EpochID} {seq_append, From, _Prefix, _Chunk, _CSum, _Extra, _EpochID}
@ -257,9 +254,15 @@ append_server_loop(FluPid, #state{data_dir=DataDir,wedged=Wedged_p,
DataDir, AppendServerPid) end), DataDir, AppendServerPid) end),
append_server_loop(FluPid, S); append_server_loop(FluPid, S);
{wedge_myself, WedgeEpochId} -> {wedge_myself, WedgeEpochId} ->
if WedgeEpochId == OldEpochId -> if not Wedged_p andalso WedgeEpochId == OldEpochId ->
true = ets:insert(S#state.etstab, true = ets:insert(S#state.etstab,
{epoch, {true, OldEpochId}}), {epoch, {true, OldEpochId}}),
%% Tell my chain manager that it might want to react to
%% this new world.
Chmgr = machi_chain_manager1:make_chmgr_regname(FluName),
spawn(fun() ->
catch machi_chain_manager:test_react_to_env(Chmgr)
end),
append_server_loop(FluPid, S#state{wedged=true}); append_server_loop(FluPid, S#state{wedged=true});
true -> true ->
append_server_loop(FluPid, S) append_server_loop(FluPid, S)