[erlang-questions] C-Node breakage with git master

Andreas Schultz aschultz@REDACTED
Tue Nov 21 16:31:38 CET 2017


----- On Nov 21, 2017, at 4:23 PM, Andreas Schultz aschultz@REDACTED wrote:

> Hi,
> 
> Something in the C-node handling changed between otp-20.1.3 and
> today git master branch.

Did sent to early, the behavior was changed by this commit:

https://github.com/erlang/otp/commit/17e198d6ee60f7dec9abfed272cf4226aea44535

I think the removal of the DFLAG_DIST_MONITOR and DFLAG_DIST_MONITOR_NAME
in that cset is a mistake.

Also, the removed DFLAG_DIST_MONITOR test proves IMHO that a
C-Node should not set that flag.

Comments?

Regards
Andreas

> 
> I have a C-node that implements the remote end of net_adm:ping/1.
> To do that, it needs to answer to
> 
>  gen:call({net_kernel, Node}, '$gen_call', {is_auth, node()}, infinity)
> 
> Code is at [1].
> 
> In 20.1.3, the call is send as a plain message. With today's git master
> it first attempts to setup a monitor (a ERL_MONITOR_P message is sent).
> 
> Monitors are not supported by C-node and ei_xreceive_msg therefor returns
> an error, causing a connection abort.
> 
> Reading through some the distribution code and gen.erl code, it seems
> that the C-node support is somewhat broken to begin with. There is
> a comment in gen.erl [2] that suggests that a attempting to setup a
> monitor on a C-node should return with an error. However, this would
> need to be done on sending side. ei_xreceive_msg has no support to
> deal with it and the error code would not allow the consumer to
> implement proper handling.
> 
> There are two flags in the distribution protocol (DFLAG_DIST_MONITOR and
> DFLAG_DIST_MONITOR_NAME). C-Nodes do set the DFLAG_DIST_MONITOR, but not
> the DFLAG_DIST_MONITOR_NAME flag. This seems to be wrong, IMHO the
> DFLAG_DIST_MONITOR should be cleared.
> 
> But, I also can't find the place where erlang:monitor/1 would actually
> check and honor those flags. The monitor BIF seems to always send a
> monitor request regardless of the node flags.
> 
> So my questions are:
> 
> 1. Has anyone an idea what changed to cause the ping/is_auth change?
> 2. What is the correct way to implement a gen_server in a C-Node or
>   is it in deed currently not possible/broken?
> 
> Regards
> Andreas
> 
> [1]: https://github.com/travelping/capwap-dp/blob/master/src/capwap-dp.c#L943
> [2]: https://github.com/erlang/otp/blob/master/lib/stdlib/src/gen.erl#L184
> --
> Dipl.-Inform. Andreas Schultz
> 
> email: as@REDACTED
> phone: +49-391-819099-224
> 
> ----------------------- enabling your networks ----------------------
> 
> Travelping GmbH                     phone:  +49-391-81 90 99 0
> Roentgenstr.  13                    fax:    +49-391-81 90 99 299
> 39108 Magdeburg                     email:  info@REDACTED
> GERMANY                             web:    http://www.travelping.com
> 
> Company Registration: Amtsgericht Stendal        Reg No.:   HRB 10578
> Geschaeftsfuehrer: Holger Winkelmann          VAT ID No.: DE236673780
> ---------------------------------------------------------------------
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list