Capture and log crashes on the stream coordinator machine

This commit is contained in:
dcorbacho 2021-04-21 13:00:04 +02:00
parent b5ed4e7ca1
commit eabdd8cdc1
1 changed files with 79 additions and 68 deletions

View File

@ -842,7 +842,18 @@ make_ra_conf(Node, Nodes) ->
ra_event_formatter => Formatter}.
update_stream(#{system_time := _} = Meta,
update_stream(Meta, Cmd, Stream) ->
try
update_stream0(Meta, Cmd, Stream)
catch
_:E:Stacktrace ->
rabbit_log:warning(
"~s failed to update stream:~n~p~n~p",
[?MODULE, E, Stacktrace]),
Stream
end.
update_stream0(#{system_time := _} = Meta,
{new_stream, StreamId, #{leader_node := LeaderNode,
queue := Q}}, undefined) ->
#{nodes := Nodes} = Conf = amqqueue:get_type_state(Q),
@ -867,7 +878,7 @@ update_stream(#{system_time := _} = Meta,
conf = Conf,
members = Members,
reply_to = maps:get(from, Meta, undefined)};
update_stream(#{system_time := _Ts} = _Meta,
update_stream0(#{system_time := _Ts} = _Meta,
{delete_stream, _StreamId, #{}},
#stream{members = Members0,
target = _} = Stream0) ->
@ -878,7 +889,7 @@ update_stream(#{system_time := _Ts} = _Meta,
Stream0#stream{members = Members,
% reply_to = maps:get(from, Meta, undefined),
target = deleted};
update_stream(#{system_time := _Ts} = _Meta,
update_stream0(#{system_time := _Ts} = _Meta,
{add_replica, _StreamId, #{node := Node}},
#stream{members = Members0,
epoch = Epoch,
@ -895,7 +906,7 @@ update_stream(#{system_time := _Ts} = _Meta,
Stream0#stream{members = Members,
nodes = lists:sort([Node | Nodes])}
end;
update_stream(#{system_time := _Ts} = _Meta,
update_stream0(#{system_time := _Ts} = _Meta,
{delete_replica, _StreamId, #{node := Node}},
#stream{members = Members0,
epoch = _Epoch,
@ -917,7 +928,7 @@ update_stream(#{system_time := _Ts} = _Meta,
false ->
Stream0
end;
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{member_started, _StreamId,
#{epoch := E,
index := Idx,
@ -942,7 +953,7 @@ update_stream(#{system_time := _Ts},
[?MODULE, Args, Member]),
Stream0
end;
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{member_deleted, _StreamId, #{node := Node}},
#stream{nodes = Nodes,
members = Members0} = Stream0) ->
@ -959,7 +970,7 @@ update_stream(#{system_time := _Ts},
%% epochs?
Stream0
end;
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{member_stopped, _StreamId,
#{node := Node,
index := Idx,
@ -1046,7 +1057,7 @@ update_stream(#{system_time := _Ts},
_Member ->
Stream0
end;
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{mnesia_updated, _StreamId, #{epoch := E}},
Stream0) ->
%% reset mnesia state
@ -1056,7 +1067,7 @@ update_stream(#{system_time := _Ts},
_ ->
Stream0#stream{mnesia = {updated, E}}
end;
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{retention_updated, _StreamId, #{node := Node}},
#stream{members = Members0,
conf = Conf} = Stream0) ->
@ -1065,11 +1076,11 @@ update_stream(#{system_time := _Ts},
conf = Conf}
end, Members0),
Stream0#stream{members = Members};
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{action_failed, _StreamId, #{action := updating_mnesia}},
#stream{mnesia = {_, E}} = Stream0) ->
Stream0#stream{mnesia = {updated, E}};
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{action_failed, _StreamId,
#{node := Node,
index := Idx,
@ -1094,7 +1105,7 @@ update_stream(#{system_time := _Ts},
_ ->
Stream0#stream{members = Members1}
end;
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{down, Pid, Reason},
#stream{epoch = E,
members = Members0} = Stream0) ->
@ -1128,10 +1139,10 @@ update_stream(#{system_time := _Ts},
_ ->
Stream0
end;
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{down, _Pid, _Reason}, undefined) ->
undefined;
update_stream(#{system_time := _Ts} = _Meta,
update_stream0(#{system_time := _Ts} = _Meta,
{nodeup, Node},
#stream{members = Members0} = Stream0) ->
Members = maps:map(
@ -1143,13 +1154,13 @@ update_stream(#{system_time := _Ts} = _Meta,
M
end, Members0),
Stream0#stream{members = Members};
update_stream(#{system_time := _Ts},
update_stream0(#{system_time := _Ts},
{policy_changed, _StreamId, #{queue := Q}},
#stream{conf = Conf0,
members = _Members0} = Stream0) ->
Conf = rabbit_stream_queue:update_stream_conf(Q, Conf0),
Stream0#stream{conf = Conf};
update_stream(_Meta, _Cmd, undefined) ->
update_stream0(_Meta, _Cmd, undefined) ->
undefined.
eval_listeners(#stream{listeners = Listeners0,