[erlang-questions] (no subject)
Ulf Wiger
ulf@REDACTED
Tue Mar 15 20:24:34 CET 2016
I have made a PR for this:
https://github.com/uwiger/gproc/pull/108 <https://github.com/uwiger/gproc/pull/108>
I’m not 100% happy with it, nor does it have a test case for the previously failing case.
However, the original test suite passes, and the manual test you describe also works for me (and didn’t before).
BR,
Ulf W
> On 15 Mar 2016, at 02:31, Khitai Pang <khitai.pang@REDACTED> wrote:
>
> I have been trying to use gproc with https://github.com/garret-smith/gen_leader_revival <https://github.com/garret-smith/gen_leader_revival>. I found that registering a name which is already registered will destroy the existing registration of the name, and a remote node is unaware of this. See the following steps:
>
>
> Register node1 shell as global name 'abcde' on node1, the name is visable on node2 and sending messages from node2 shell to 'abcde' works fine:
>
> (node1)1> gproc:reg({n, g, abcde}).
> true
> (node1)2> gproc:where({n, g, abcde}).
> <0.229.0>
>
> (node2)1> gproc:where({n, g, abcde}).
> <8049.229.0>
> (node2)2> gproc:send({n, g, abcde}, hello).
> hello
>
> (node1)3> flush().
> Shell got hello
> ok
>
>
> Now on node1 shell register with the name again, it removes the existing registration:
>
> (node1)4> gproc:reg({n, g, abcde}).
> ** exception error: bad argument
> in function gproc:reg/1
> called as gproc:reg({n,g,abcde})
> (node1)5> gproc:where({n, g, abcde}).
> undefined
>
>
> But on node2 the shell still gets <8049.229.0>:
>
> (node2)3> gproc:where({n, g, abcde}).
> <8049.229.0>
>
>
> And sending message from node2 shell to 'abcde' still works 'fine', but the node1 shell doesn't get any message:
>
> (node2)4> gproc:send({n, g, abcde}, hello).
> hello
>
> (node1)6> flush().
> ok
>
>
> Now if I register node1 shell as {n, g, abcde} again, everything works fine again:
>
> (node1)7> gproc:reg({n, g, abcde}).
> true
>
> (node2)5> gproc:where({n, g, abcde}).
> <8049.268.0>
> (node2)6> gproc:send({n, g, abcde}, hello).
> hello
>
> (node1) 8> flush().
> Shell got hello
> ok
>
>
> This doesn't look right to me.
> 1) When registering with a name already registered, why doesn't gproc return something like {error, already_registered}?
> 2) After the registration is removed, why does a remove node still sees the non-existent registration?
>
>
> Thanks
> Khitai
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20160315/ff5a2c95/attachment.htm>
More information about the erlang-questions
mailing list