[erlang-questions] upgrade path from R14B02 to OTP 17.5

Fred Hebert mononcqc@REDACTED
Mon Jun 15 19:16:34 CEST 2015

On 06/15, Tanguay, Luc (A584369) wrote:
>We have a Erlang/OTP distributed system running on R14B02 Windows 2008 
>(32-bit).  We plan to upgrade to OTP 17.5 (64-bit).   The system 
>involves one big server that distribute files to up to 40 smaller 
>clients, three OTP applications, many TCP links between server and 
>clients, a small mnesia database, many calls to erlang:open_port/2 to 
>execute native Windows programs, etc.
>What is the safest upgrade path?  Go straight to OTP 17.5 or something 
>else.   Do I have to read all READMEs from R14B03 to OTP 17.5?

Hi Luc, there's a few interesting things to consider when going for such 
a plan.

The idea of going through a single big jump or many smaller ones will 
depend on a few things:

- Do you have a single big server? If so, what's the failover/takeover 
  story for this one? what are the requirements for uptime?
- Do you make use of OTP releases, or is it more of an ad-hoc deployment 
  system? How do you go about it?
- Do you have proper testing/staging servers to try things on?
- Do you have Erlang engineers on hand to handle this, or are you in the 
  (sadly somewhat common) situation where nobody knows the language, but 
  you still have to upgrade things?

Upgrading code itself can be done easily from small to larger versions 
by testing it locally and reading the READMEs for incompatible changes.

All in all, though, hot code loading works on Erlang code and NIFs, but 
doesn't work on the VM itself. While you can move from small release to 
small release (and also reload most standard libraries without much of a 
problem with relups and whatnot), the VM itself will need to go down and 
back up to upgrade the runtime system.

The safest upgrade path would be to be able to boot a second well-tested 
VM on a new code version on the side, and progressively move out 
responsibilities to this one until the old one is dead. The most brutal 
way to do it would just be to shut down the old node and boot the new 
one after.

Everything else is likely going to be a gradient in between those, in my 


More information about the erlang-questions mailing list