Erlang Central

Difference between revisions of "Remote Code Load"

From ErlangCentral Wiki

m (Fix invocation of load_binary)
Line 12:Line 12:
 
%% and load it on all connected nodes including this one;  
 
%% and load it on all connected nodes including this one;  
 
%% the next time the code is called it will be using the new version
 
%% the next time the code is called it will be using the new version
{Replies, _} = rpc:multicall(code, load_binary, [Mod, Bin, File,]),
+
{Replies, _} = rpc:multicall(code, load_binary, [Mod, File, Bin]),
  
 
%% if this node were the "master/admin" node
 
%% if this node were the "master/admin" node
 
%% then to push to everything but this node use:
 
%% then to push to everything but this node use:
%% {Replies, _} = rpc:multicall(nodes(), code, load_binary, [Mod, Bin, File,]),
+
%% {Replies, _} = rpc:multicall(nodes(), code, load_binary, [Mod, File, Bin]),
  
 
%% and then maybe check the Replies list.
 
%% and then maybe check the Replies list.

Revision as of 14:05, 17 October 2009

Problem

Remote Load New Code to All Nodes

Solution

Solution attribution: this example is buried in erlang rpc multicall doc.

%% Find object code for module Mod 
{Mod, Bin, File} = code:get_object_code(Mod), 

%% and load it on all connected nodes including this one; 
%% the next time the code is called it will be using the new version
{Replies, _} = rpc:multicall(code, load_binary, [Mod, File, Bin]),

%% if this node were the "master/admin" node
%% then to push to everything but this node use:
%% {Replies, _} = rpc:multicall(nodes(), code, load_binary, [Mod, File, Bin]),

%% and then maybe check the Replies list.

Discussion

This sort of change is tedious within other network infrastructures. see erlang.org rpc multicall doc for further details.