diff options
| author | Diana Corbacho <diana@rabbitmq.com> | 2017-03-06 15:57:19 +0000 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2017-03-22 23:38:00 +0300 |
| commit | 9848921cf6d82fb6bb0e5aa3c3dae48d8d0f8107 (patch) | |
| tree | d79bf2fd507a525c5d37fc244de0c1d64de6d8c0 | |
| parent | 4bd85f52a5c585b4827fff62409288480ec99d51 (diff) | |
| download | rabbitmq-server-git-9848921cf6d82fb6bb0e5aa3c3dae48d8d0f8107.tar.gz | |
Check process aliveness on remote nodes
| -rw-r--r-- | src/rabbit_core_metrics_gc.erl | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/rabbit_core_metrics_gc.erl b/src/rabbit_core_metrics_gc.erl index e0d7781796..c2f9b1c271 100644 --- a/src/rabbit_core_metrics_gc.erl +++ b/src/rabbit_core_metrics_gc.erl @@ -103,7 +103,7 @@ gc_process(Table) -> end, none, Table). gc_process(Pid, Table, Key) -> - case erlang:is_process_alive(Pid) of + case is_process_alive_in_cluster(Pid) of true -> none; false -> @@ -151,7 +151,7 @@ gc_process_and_entity(Table, GbSet) -> end, none, Table). gc_process_and_entity(Id, Pid, Table, Key, GbSet) -> - case erlang:is_process_alive(Pid) orelse gb_sets:is_member(Id, GbSet) of + case is_process_alive_in_cluster(Pid) orelse gb_sets:is_member(Id, GbSet) of true -> none; false -> @@ -166,3 +166,18 @@ gc_process_and_entities(Table, QueueGbSet, ExchangeGbSet) -> gc_entity(Q, Table, Key, QueueGbSet), gc_entity(X, Table, Key, ExchangeGbSet) end, none, Table). + +is_process_alive_in_cluster(Pid) -> + Local = node(), + case node(Pid) of + Local -> + is_process_alive(Pid); + Remote -> + case rabbit_misc:rpc_call(Remote, erlang, is_process_alive, [Pid]) of + Bool when is_boolean(Bool) -> + Bool; + {badrpc, _} -> + %% If the node is unreachable, the process might be dead + false + end + end. |
