We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 420b9bc commit d76a7fcCopy full SHA for d76a7fc
lib/elixir/lib/kernel/cli.ex
@@ -400,23 +400,22 @@ defmodule Kernel.CLI do
400
# Explicitly connect the node in case the rpc node was started with --sname/--name undefined.
401
_ = :net_kernel.connect_node(node)
402
403
- case :rpc.call(node, __MODULE__, :rpc_eval, [expr]) do
404
- :ok ->
405
- :ok
406
-
407
- {:badrpc, {:EXIT, exit}} ->
408
- Process.exit(self(), exit)
409
410
- {:badrpc, reason} ->
411
- if reason == :nodedown and :net_kernel.nodename() == :ignored do
+ try do
+ :erpc.call(node, __MODULE__, :rpc_eval, [expr])
+ catch
+ :error, {:erpc, reason} ->
+ if reason == :noconnection and :net_kernel.nodename() == :ignored do
412
{:error,
413
"--rpc-eval : Cannot run --rpc-eval if the node is not alive (set --name or --sname)"}
414
else
415
{:error, "--rpc-eval : RPC failed with reason #{inspect(reason)}"}
416
end
417
418
- {kind, error, stack} ->
419
- :erlang.raise(kind, error, stack)
+ :exit, {kind, exit} when kind in [:exception, :signal] ->
+ Process.exit(self(), exit)
+ else
+ :ok -> :ok
+ {kind, reason, stack} -> :erlang.raise(kind, reason, stack)
420
421
422
lib/iex/lib/iex/autocomplete.ex
@@ -27,9 +27,10 @@ defmodule IEx.Autocomplete do
27
"""
28
def remsh(node) do
29
fn e ->
30
- case :rpc.call(node, IEx.Autocomplete, :expand, [e, IEx.Broker.shell()]) do
31
- {:badrpc, _} -> {:no, ~c"", []}
32
- r -> r
+ :erpc.call(node, IEx.Autocomplete, :expand, [e, IEx.Broker.shell()])
33
+ _, _ -> {:no, ~c"", []}
34
35
36
lib/iex/lib/iex/broker.ex
@@ -180,8 +180,11 @@ defmodule IEx.Broker do
180
181
defp local_or_remote_shell() do
182
Enum.find_value([node() | Node.list()], fn node ->
183
- server = :rpc.call(node, IEx.Broker, :shell, [])
184
- if is_pid(server), do: server
+ :erpc.call(node, IEx.Broker, :shell, [])
185
186
+ _, _ -> nil
187
+ end
188
end)
189
190
lib/iex/lib/iex/helpers.ex
@@ -1458,15 +1458,14 @@ defmodule IEx.Helpers do
1458
def nl(nodes \\ Node.list(), module) when is_list(nodes) and is_atom(module) do
1459
case get_beam_and_path(module) do
1460
{bin, beam_path} ->
1461
+ call = :erpc.multicall(nodes, :code, :load_binary, [module, beam_path, bin])
1462
+
1463
results =
- for node <- nodes do
- case :rpc.call(node, :code, :load_binary, [module, beam_path, bin]) do
1464
- {:module, _} -> {node, :loaded, module}
1465
- {:badrpc, message} -> {node, :badrpc, message}
1466
- {:error, message} -> {node, :error, message}
1467
- unexpected -> {node, :error, unexpected}
1468
- end
1469
+ Enum.zip_with(nodes, call, fn
+ node, {:ok, {:module, _}} -> {node, :loaded, module}
+ node, {:ok, {:error, reason}} -> {node, :error, reason}
+ node, {:error, {:erpc, reason}} -> {node, :badrpc, reason}
+ end)
1470
1471
{:ok, results}
1472
lib/iex/lib/iex/info.ex
@@ -346,7 +346,11 @@ defimpl IEx.Info, for: PID do
346
347
def info(pid) do
348
extra_info =
349
- case :rpc.pinfo(pid, @keys) do
350
+ :erpc.call(node(pid), :erlang, :process_info, [pid, @keys])
351
352
+ _, _ -> [{"Alive", false}]
353
354
[_ | _] = info ->
355
[
356
{"Alive", true},
@@ -382,11 +386,19 @@ end
382
386
383
387
defimpl IEx.Info, for: Port do
384
388
def info(port) do
385
- connected = :rpc.call(node(port), :erlang, :port_info, [port, :connected])
389
+ open? =
390
391
+ :erpc.call(node(port), :erlang, :port_info, [port, :connected])
392
393
+ _, _ -> false
394
395
+ {:connected, _} -> true
396
+ _ -> false
397
398
399
{"Data type", "Port"},
- {"Open", match?({:connected, _}, connected)},
+ {"Open", open?},
{"Reference modules", "Port"}
]
lib/iex/test/iex/helpers_test.exs
@@ -1294,9 +1294,12 @@ defmodule IEx.HelpersTest do
1294
@tag :capture_log
1295
test "loads a given module on the given nodes" do
1296
assert nl([node()], :lists) == {:ok, [{:nonode@nohost, :error, :sticky_directory}]}
1297
- assert nl(:nonexistent_module) == {:error, :nofile}
1298
- assert nl([:nosuchnode@badhost], Enum) == {:ok, [{:nosuchnode@badhost, :badrpc, :nodedown}]}
1299
assert nl([node()], Enum) == {:ok, [{:nonode@nohost, :loaded, Enum}]}
+ assert nl(:nonexistent_module) == {:error, :nofile}
1300
1301
+ assert nl([:nosuchnode@badhost], Enum) ==
1302
+ {:ok, [{:nosuchnode@badhost, :badrpc, :noconnection}]}
1303
1304
1305
0 commit comments