Erlang Central

Difference between revisions of "Remote Code Load"

From ErlangCentral Wiki

 
Line 10:Line 10:
 
{Mod, Bin, File} = code:get_object_code(Mod),  
 
{Mod, Bin, File} = code:get_object_code(Mod),  
  
%% and load it on all 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, Bin, File,]),
 +
 +
%% 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, Bin, File,]),
  
 
%% and then maybe check the Replies list.
 
%% and then maybe check the Replies list.

Revision as of 20:32, 11 January 2007

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, Bin, File,]),

%% 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, Bin, File,]),

%% 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.