upgrade of supervisors child specifications

Bengt Kleberg eleberg@REDACTED
Fri Apr 25 17:06:24 CEST 2003


how do i change (when doing an upgrade) the contents of a supervisors
child specifications?


there exists a supervisor with its children. the output of
supervisor:which_children(my_supervisor) => [{Id, Child,Type,Modules},

due to reasons it has been decided to change Id to OtherId during
upgrade. i have identified the other places where Id is stored
(ets/mnesia tables) and successfully transformed these tables. now i
need to change the contents of my_supervisor's child specifications.

the code in supervisor.erl hints at a tantelising possiblity:

code_change(_, State, _) ->
    case apply(State#state.module, init,
	       [State#state.args]) of
	{ok, {SupFlags, StartSpec}} ->
	    case catch check_flags(SupFlags) of
		ok ->
		    update_childspec(State, StartSpec);

as one can see StartSpec is returned from
<my_supervisors_module>:init/1. is this possible to use? how? (ie,
when/why is supervisor:code_change/3 called)
it is fine to just point me to the right place in the documentation.


More information about the erlang-questions mailing list