Re: Unexpected behaviour of net_kernel
Dieter Schön <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <[email protected]> |
Hi Lorenzo, I played around with nodes in the last days, my experiments showed nominal behaviour. So, no spurious nodeup/nodedown messages for not connected nodes.. Did you read the fine print in the documentation of net_kernel:monitor_nodes() ? I would suspect some kind of race condition in your code. Do you have timestamped logs which show when a node is shut down, and when nodeup/down messages arrive? Kind regards, Dieter On 01.09.21 13:00, Lorenzo Cian wrote: > Dear all, > > I am a beginner in Erlang and I'm working on a project. > I am working with nodes that need to connect and disconnect frequently > both in "visible" and "hidden" mode. > > I wonder if there is a bug in net_kernel, because I observe the > following unexpected behaviour and I'm unable to link it to any action > caused by my code. > > What happens in the execution of my program is roughly the following: > initial state: node A is connected (in visible mode) to node B, > node D is not connected to any other node > then: > 1) node A disconnects from B (using net_kernel:disconnect/1) > 2) node A connects to node D (using net_kernel:connect_node/1) > result: somehow D receives nodeup messages and connects to both A and B > expected behaviour: node D should connect to just A, while B should be > connected to no one > > Note that steps 1 and 2 are executed sequentially in the same function > so there's no way they could be concurrent. > > Could this be a bug in net_kernel? > I thought that maybe, somehow A has some messages related to > net_kernel that hang up in a way such that when step 2 happens, node A > is not yet disconnected completely from B? > Is it possible that something like that happens? If yes, how can I > avoid this? > > Even if I'm pretty confident that my code works as intended and I > tried to debug and check it several times, of course the other option > is that this could be caused by a bug in my code. > Of course there are a lot of other processes involved that I can't > explain here, but let's suppose that they don't cause any interference > with the example. > > I hope someone who knows Erlang better than me can help me clarify my > doubts. > > Thank you, > Lorenzo.