[erlang-questions] Looking for info on hot code updates

Thomas Lindgren <>
Thu Nov 1 13:51:52 CET 2007


--- David Mitchell <> wrote:

> Hello all,
> 
> Pure and simple - I'm looking for a pointer to info
> on doing hot code
> updates (i.e. update code while a server is running)
> in Erlang.  I've
> seen lots of talk about it, but nothing on:
> - how to do it
> - pros/cons/caveats/assumptions
> - what happens when that code is currently being
> executed by a running process
> 
> If there's some magic combination of keywords
> that'll get me this info
> in Google, I can't work out what it is. 

Look for "erlang hot code loading". See also the
code(3) documentation and the OTP docs for
applications, releases, gen_* and so on. I think the
old Erlang book (available from erlang.org) has a bit
about this.

The low-level principles are these:

1. There can be up to two versions of a module loaded
at a given time, the 'old' version and the 'latest'
version. (The terminology is not quite standardized.)

2. Remote calls, m:f(...) always invoke the latest
version of a module. Thus, you often switch to "the
new code" by making a remote tail-call to yourself.
Local calls f(...) remain in the same module.

3. When a new version of a module is loaded, the
'latest' version becomes the 'old' version and the old
version is purged from the system/VM. When a module
version is purged, all processes referring to it are
killed (to avoid dead return addresses).

OTP and the gen_* framework then builds functionality
on top of this, e.g., "formal" upgrades and downgrades
and so on.

Best,
Thomas


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 



More information about the erlang-questions mailing list