[erlang-questions] Reconnect to nodes

Serge Aleynikov serge@REDACTED
Fri Apr 22 14:59:26 CEST 2016


You can take a look at this app that handles detection of network splits
and auto-reconnecting:

https://github.com/saleyn/netmon

Serge

On Fri, Apr 22, 2016 at 7:42 AM, Roberto Ostinelli <roberto@REDACTED>
wrote:

> Thank you both for confirming.
> Hence I guess some kind of a basic reconnection manager might be helpful
> here.
>
> Thanks!
>
> r.
>
> On Fri, Apr 22, 2016 at 12:35 PM, Serge Aleynikov <serge@REDACTED>
> wrote:
>
>> Roberto,
>>
>> This is the expected behavior. Note that the nodes will automatically
>> reconnect by default when either node has a process that sends a message to
>> a process on the remote node.  This reconnection behavior can be modified
>> by setting the kernel's 'dist_auto_connect' option.
>>
>> Other applications (such as mnesia) may require custom recovery from a
>> network split, which is one of the reasons why automatic reconnection may
>> not be desirable.
>>
>> Regards,
>>
>> Serge
>>
>> On Fri, Apr 22, 2016 at 5:39 AM, Roberto Ostinelli <roberto@REDACTED>
>> wrote:
>>
>>> Dear list,
>>> A simple question: am I correct that, when a node is removed because of
>>> a net split, you need to have your own application logic to reconnect to
>>> it, and nothing in the VM will try doing that for you?
>>>
>>> Let me show you an example. I have two nodes: 1@REDACTED and
>>> 2@REDACTED that are connected to each other:
>>>
>>> (1@REDACTED)1> nodes().
>>> ['2@REDACTED']
>>>
>>> On node 2 I listen for nodedown events of node 1:
>>>
>>> (2@REDACTED)1> monitor_node('1@REDACTED', true).
>>> true
>>>
>>> On node 1, I simulate a net splits with the best option I've found until
>>> now, i.e suspending the net_kernel process:
>>>
>>> (1@REDACTED)2> sys:suspend(net_kernel).
>>> ok
>>>
>>> After ~60 seconds on node 2 I get:
>>>
>>> =ERROR REPORT==== 22-Apr-2016::11:28:21 ===
>>> ** Node '1@REDACTED' not responding **
>>> ** Removing (timedout) connection **
>>> (2@REDACTED)2> flush().
>>> Shell got {nodedown,'1@REDACTED'}
>>>
>>> Now the two nodes are disconnected:
>>>
>>> (1@REDACTED)3> nodes().
>>> []
>>>
>>> (2@REDACTED)3> nodes().
>>> []
>>>
>>> Even when I resume the net_kernel process:
>>>
>>> (1@REDACTED)4> sys:resume(net_kernel).
>>> ok
>>>
>>> The nodes do not reconnect:
>>>
>>> (1@REDACTED)5> nodes().
>>> []
>>>
>>> I'm ok with this, though I would like to confirm that my understanding
>>> is correct.
>>> If so, does everyone just implement some standard connection manager
>>> that does only reconnections?
>>>
>>> Thank you,
>>> r.
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20160422/b7ecc5da/attachment.htm>


More information about the erlang-questions mailing list