[erlang-questions] preserving state through a gen_server restart

Ivan Uemlianin <>
Fri Oct 19 17:03:41 CEST 2012


Dear All

I have an erlang/OTP application consisting mostly of gen_servers.  One 
repeated pattern is having a gateway/aggregate gen_server process that 
provides access (and other management) to individual gen_server 
processes, e.g.:

               my_sup
                  |
               my_lambs
              /        \      \
         my_lamb     my_lamb    my_lamb    ...

my_lambs' state variable holds a dictionary {LambName: LambPid} and 
among other functions it allows me to call lambs by name instead of my Pid.

If my_lambs terminates normally --- e.g., if the whole application is 
closing down --- its terminate/s function can call my:lamb:stop for each 
of the processes in its care.

However, if my_lambs terminates abnormally, and is restarted by my_sup, 
I think I'd like to preserve its state variable --- at least the Pids of 
the my_lamb processes --- so that it can be passed on to the new version 
of my_lambs.

I'd like to avoid losing all of the my_lamb processes, if the my_lambs 
process crashes.

Can state be passed to the supervisor, to be used when it restarts its 
child?

Could I park the state variable in some kind of holding process, so that 
the new my_lambs can retrieve it?

Or is there another way of doing this?

With thanks and best wishes

Ivan



-- 
============================================================
Ivan A. Uemlianin PhD
Llaisdy
Speech Technology Research and Development

                     
                      www.llaisdy.com
                          llaisdy.wordpress.com
               github.com/llaisdy
                      www.linkedin.com/in/ivanuemlianin

               "hilaritas excessum habere nequit"
                  (Spinoza, Ethica, IV, XLII)
============================================================



More information about the erlang-questions mailing list