[erlang-questions] Distributed OTP Apps: Failover and Takeover

Andreas Pauley apauley@REDACTED
Mon Feb 11 13:31:30 CET 2013


Hi everyone,

I've made a demo app of mine distributed to test failover and
takeover, after reading the "Distributed OTP Applications" chapter in
Learn you some Erlang.

The failover and takeover works great if I kill the running beam (eg.
with kill -9).

However, I tried sending kill signals to the Pids of both my
application behavior and the top supervisor that gets started by the
application.
This crashes the VM, but failover does not happen.

Is this unsupported, or should I do something to enable failover in
this scenario?

I've done a more complete writeup with code and output here:
https://github.com/apauley/dark-overlord#when-processes-die-a-guide-to-the-afterlife

But in a nutshell, I crash the VM with the commands below, and then
automatic failover to my second node does not happen:

$ ./rel/overlord/bin/overlord console
Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:8:8]
[async-threads:0] [hipe] [kernel-poll:false] [dtrace]

14:03:20.581 overlord@REDACTED [overlord_app] <0.56.0> || Starting app: normal
14:03:20.582 overlord@REDACTED [hypnosponge_sup] <0.57.0> || Hello
from the hypnosponge supervisor
(overlord@REDACTED)1> Sup = pid(0, 57, 0).
<0.57.0>
(overlord@REDACTED)2> exit(Sup, kill).

=ERROR REPORT==== 11-Feb-2013::14:04:46 ===
** Generic server minion_supersup terminating
** Last message in was {'EXIT',<0.57.0>,killed}
** When Server state == {state,
                            {local,minion_supersup},
                            simple_one_for_one,
                            [{child,undefined,minion_makeshift_sup,
                                 {minion_makeshift_sup,start_link,[]},
                                 temporary,5000,worker,
                                 [minion_makeshift_sup]}],
                            undefined,1,3,[],minion_supersup,[]}
** Reason for termination ==
** killed
true
(overlord@REDACTED)3>
=INFO REPORT==== 11-Feb-2013::14:04:46 ===
    application: overlord
    exited: killed
    type: permanent

(overlord@REDACTED)3> {"Kernel pid
terminated",application_controller,"{application_terminated,overlord,killed}"}

Crash dump was written to: erl_crash.dump
Kernel pid terminated (application_controller)
({application_terminated,overlord,killed})

-- 
http://pauley.org.za/
http://twitter.com/apauley
http://www.meetup.com/lambda-luminaries/



More information about the erlang-questions mailing list