Deployment tools?

Hal Snyder hal@REDACTED
Tue Oct 26 23:36:07 CEST 2004


"Martin J. Logan" <mlogan@REDACTED> writes:

> <snip>
>> 
>> 	2) Dynamic reconfiguration.
>
> This one is not as simple as it seems. First of all your code must be
> written in such a manner as to allow a altered config to make its way
> into process state. 
>
> cant have
>
> init() -> 
>     Blah = application:get_env(blah, blah),
>     {ok, #state{blah = blah}}.
>
>
> but instead you must use get_env everywhere blah is referenced or have a
> clean way of HUPing the processes to re-read config and update state.
> Whatever way you choose it sill necessitate some stylistic changes.
>
> The solution that a few colleagues and I came up with was to wrap
> configuration with another api and include that api as part of a generic
> services application included in every release.
>
> <wrapper>:get_env(Application,  Key, DefaultValue)

You could also base things on e.g. the approach Joe offers for a
universal Client - Server with hot code swapping at
http://www.sics.se/~joe/talks/ll2_2002.pdf, page 20.


server(Fun, Data) ->
  receive
    {new_fun, Fun1} ->
      server(Fun1, Data);
    {rpc, From, ReplyAs, Q} ->
      {Reply, Data1} = Fun(Q, Data),
      From ! {ReplyAs, Reply},
      server(Fun, Data1) end.

rpc(A, B) ->
  Tag = new_ref(),
  A ! {rpc, self(), Tag, B},
  receive
    {Tag, Val} -> Val
  end.



More information about the erlang-questions mailing list