Skip to content

Commit a3622b5

Browse files
gomoripetimichaelklishin
authored andcommitted
Add rabbit_misc:process_info/2 that also works for remote PIDs
(cherry picked from commit 7b7708f) (cherry picked from commit e777c0b)
1 parent 8001363 commit a3622b5

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

deps/rabbit_common/src/rabbit_misc.erl

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050
build_acyclic_graph/3]).
5151
-export([const/1]).
5252
-export([ntoa/1, ntoab/1]).
53-
-export([is_process_alive/1]).
53+
-export([is_process_alive/1,
54+
process_info/2]).
5455
-export([pget/2, pget/3, pupdate/3, pget_or_die/2, pmerge/3, pset/3, plmerge/2]).
5556
-export([deep_pget/2, deep_pget/3]).
5657
-export([format_message_queue/2]).
@@ -812,6 +813,23 @@ is_process_alive(Pid) ->
812813
lists:member(Node, [node() | nodes(connected)]) andalso
813814
rpc:call(Node, erlang, is_process_alive, [Pid]) =:= true.
814815

816+
%% Get process info of a prossibly remote process.
817+
%% We try to avoid reconnecting to down nodes.
818+
-spec process_info(pid(), ItemSpec) -> Result| undefined | {badrpc, term()}
819+
when
820+
ItemSpec :: atom() | list() | tuple(),
821+
Result :: {atom() | tuple(), term()} | [{atom() | tuple(), term()}].
822+
process_info(Pid, Items) when node(Pid) =:= node() ->
823+
erlang:process_info(Pid, Items);
824+
process_info(Pid, Items) ->
825+
Node = node(Pid),
826+
case lists:member(Node, [node() | nodes(connected)]) of
827+
true ->
828+
rpc:call(Node, erlang, process_info, [Pid, Items]);
829+
_ ->
830+
{badrcp, nodedown}
831+
end.
832+
815833
-spec pget(term(), list() | map()) -> term().
816834
pget(K, M) when is_map(M) ->
817835
maps:get(K, M, undefined);

0 commit comments

Comments
 (0)