From ab30f84548c05d550ce503a78444ca838f42bc0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20K=C5=82osko?= Date: Sun, 22 Aug 2021 00:52:19 +0200 Subject: [PATCH] Improve error message when attaching to a remote node with different ERTS version (#511) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improve error message when attaching to a remote node with different ERTS version * Make the error more specific * Update lib/livebook/runtime/erl_dist.ex Co-authored-by: José Valim * Update lib/livebook/runtime/erl_dist.ex * Update lib/livebook/runtime/erl_dist.ex * Update lib/livebook/runtime/erl_dist.ex Co-authored-by: José Valim --- lib/livebook/runtime/erl_dist.ex | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/livebook/runtime/erl_dist.ex b/lib/livebook/runtime/erl_dist.ex index 7c9460284..300c8f0a0 100644 --- a/lib/livebook/runtime/erl_dist.ex +++ b/lib/livebook/runtime/erl_dist.ex @@ -57,7 +57,23 @@ defmodule Livebook.Runtime.ErlDist do defp load_required_modules(node) do for module <- @required_modules do {_module, binary, filename} = :code.get_object_code(module) - {:module, _} = :rpc.call(node, :code, :load_binary, [module, filename, binary]) + + case :rpc.call(node, :code, :load_binary, [module, filename, binary]) do + {:module, _} -> + :ok + + {:error, reason} -> + local_otp = :erlang.system_info(:otp_release) + remote_otp = :rpc.call(node, :erlang, :system_info, [:otp_release]) + + if local_otp != remote_otp do + raise RuntimeError, + "failed to load #{inspect(module)} module into the remote node, potentially due to Erlang/OTP version mismatch, reason: #{inspect(reason)} (local #{local_otp} != remote #{remote_otp})" + else + raise RuntimeError, + "failed to load #{inspect(module)} module into the remote node, reason: #{inspect(reason)}" + end + end end end