summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_node_monitor.erl26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl
index e3960c5c8a..43db5431e0 100644
--- a/src/rabbit_node_monitor.erl
+++ b/src/rabbit_node_monitor.erl
@@ -288,24 +288,28 @@ workaround_global_hang() ->
receive
global_sync_done ->
ok
- after 15000 ->
+ after 10000 ->
find_blocked_global_peers()
end.
find_blocked_global_peers() ->
+ Snapshot1 = snapshot_global_dict(),
+ timer:sleep(10000),
+ Snapshot2 = snapshot_global_dict(),
+ find_blocked_global_peers1(Snapshot2, Snapshot1).
+
+snapshot_global_dict() ->
{status, _, _, [Dict | _]} = sys:get_status(global_name_server),
- find_blocked_global_peers1(Dict).
+ [E || {{sync_tag_his, _}, _} = E <- Dict].
-find_blocked_global_peers1([{{sync_tag_his, Peer}, Timestamp} | Rest]) ->
- Diff = timer:now_diff(erlang:now(), Timestamp),
- if
- Diff >= 10000 -> unblock_global_peer(Peer);
- true -> ok
+find_blocked_global_peers1([{{sync_tag_his, Peer}, _} = Item | Rest],
+ OlderSnapshot) ->
+ case lists:member(Item, OlderSnapshot) of
+ true -> unblock_global_peer(Peer);
+ false -> ok
end,
- find_blocked_global_peers1(Rest);
-find_blocked_global_peers1([_ | Rest]) ->
- find_blocked_global_peers1(Rest);
-find_blocked_global_peers1([]) ->
+ find_blocked_global_peers1(Rest, OlderSnapshot);
+find_blocked_global_peers1([], _) ->
ok.
unblock_global_peer(PeerNode) ->