[erlang-questions] Takeover failure

Tyron Zerafa tyron.zerafa@REDACTED
Sun Dec 1 17:19:25 CET 2013

Hi all,

    I am trying to understand how to implement takeover in Erlang by
following the example presented
Basically, I am creating the application's supervisor as follows;

start(normal, []) ->
start({takeover, _OtherNode}, []) ->

*Supervisor init code:*
start_link() ->
supervisor:start_link({global,?MODULE}, ?MODULE, []).

*Supervisor child Specification:*
{one_for_one, 1, 10},
{m8ball_server, start_link, []},

*Child (m8ball_server) Initialization*
start_link() ->
gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).

Consider the following scenario; an Erlang cluster is composed of two nodes
A and B with application m8ball running on A.
Failover works perfect, I'm managing to kill node A and see the application
running on the next node, B.
However, when I try to put back up node A (which have a higher priority
then B) and init the app, I am getting the following error. I'm assuming
that this occurs because node B already contains a supervisor globally
registered with that name.
*Log on Node A *

=INFO REPORT==== 1-Dec-2013::16:17:32 ===
    application: m8ball
    exited: {{already_started,<2832.61.0>},

*Log on Node B*
=INFO REPORT==== 1-Dec-2013::16:24:55 ===
    application: m8ball
    exited: stopped
    type: temporary

When I tried registering the supervisor locally, I got a similar exception
failing to initializing the worker process. However, if I also register
this as local, I would not be able to call it from any node using the app
name (since it would not be globally registered).

*Log on Node A **(Supervisor Registered Locally)*

Any pointers?

Best Regards,
Tyron Zerafa
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20131201/20eec86a/attachment.htm>

More information about the erlang-questions mailing list