[erlang-questions] 19.x <-> 18.x wire protocol incompatibility ?
Alexandre Snarskii
snar@REDACTED
Thu Oct 13 17:47:23 CEST 2016
On Wed, Oct 12, 2016 at 07:54:53PM +0200, Sverker Eriksson wrote:
> This is a bug. ei_connect_xinit() should do that masking for you.
Thanks for clarification.
https://github.com/erlang/otp/pull/1202
> The idea was to introduce larger creation values in a stepwise
> protocol compatible way. OTP 19 should understand and forward
> ERL_NEW_PID_EXT's but never create them. And then in some future
> major release start using large creation values encoded
> with ERL_NEW_PID_EXT.
>
> From the release notes of 19.0:
>
> OTP-13488 Application(s): erl_interface, erts, jinterface
>
> Handle terms (pids,ports and refs) from nodes with a
> 'creation' value larger than 3. This is a preparation
> of the distribution protocol to allow OTP 19 nodes to
> correctly communicate with future nodes (20 or higher).
> The 'creation' value differentiates different
> incarnations of the same node (name).
>
>
> /Sverker, Erlang/OTP
>
>
> On 10/12/2016 07:11 PM, Alexandre Snarskii wrote:
> > Hi!
> >
> > Got into interesting 'does not work' situation while connecting newly
> > deployed c-node (compiled with otp 19.0 libraries) with older 18.3
> > erlang node: nodes were unable to communicate with messages
> >
> > 2016-10-12 18:43:28.404 [warning] emulator '<erlang node name>' got a
> > corrupted external term from '<c-node name>' on distribution channel ...
> >
> > logged on erlang side.
> >
> > After some research, root cause was isolated: C-node was initialized using
> > ei_connect_xinit with random() % 16 for its creation id. In 18.x, Pid of
> > C-node was encoded as ERL_PID_EXT and used only two lower bits of creation id.
> > However, in 19.x there is a new Pid wire presentation, ERL_NEW_PID_EXT, which
> > encodes all 32 bits of creation id. Worse yet, this presentation is
> > automatically selected for encoding any Pid with creation id > 3, and,
> > as this presentation is not known by older 18.x nodes, this leads to
> > connection drop.
> >
> > Solution: if you expect your C-nodes to communicate with pre-19.x erlang
> > nodes, you may use only values 0..3 for creation id. In my case I just
> > replaced random() % 16 with random() % 4.
> >
> > Question: may be it makes sense to document this wire protocol incompatibility
> > somewhere ?
> >
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> >
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
More information about the erlang-questions
mailing list