Browse Source

Fix no clause when updating a process with same metadata.

Roberto Ostinelli 3 years ago
parent
commit
4375936a1e
4 changed files with 16 additions and 2 deletions
  1. 4 1
      src/syn_pg.erl
  2. 4 1
      src/syn_registry.erl
  3. 4 0
      test/syn_pg_SUITE.erl
  4. 4 0
      test/syn_registry_SUITE.erl

+ 4 - 1
src/syn_pg.erl

@@ -177,6 +177,9 @@ join_or_update(Scope, GroupName, Pid, MetaOrFun) ->
                 {ok, {_, Meta, _, _, _}} ->
                     {ok, {Pid, Meta}};
 
+                {noop, Meta} ->
+                    {ok, {Pid, Meta}};
+
                 {{error, Reason}, _} ->
                     {error, Reason}
             end
@@ -338,7 +341,7 @@ handle_call({'3.0', join_or_update_on_node, RequesterNode, GroupName, Pid, MetaO
 
                 {{_, _}, MetaOrFun, _, _, _} ->
                     %% re-joined with same meta
-                    {reply, {ok, noop}, State};
+                    {reply, {noop, MetaOrFun}, State};
 
                 {{_, _}, _, _, MRef, _} ->
                     %% re-joined with different meta

+ 4 - 1
src/syn_registry.erl

@@ -128,6 +128,9 @@ register_or_update(Scope, Name, Pid, MetaOrFun) ->
                 {ok, {_, Meta, _, _, _}} ->
                     {ok, {Pid, Meta}};
 
+                {noop, Meta} ->
+                    {ok, {Pid, Meta}};
+
                 {{error, Reason}, _} ->
                     {error, Reason}
             end
@@ -248,7 +251,7 @@ handle_call({'3.0', register_or_update_on_node, RequesterNode, Name, Pid, MetaOr
 
                 {Name, Pid, MetaOrFun, _, _, _} ->
                     %% same pid, same meta
-                    {reply, {ok, noop}, State};
+                    {reply, {noop, MetaOrFun}, State};
 
                 {Name, Pid, _, _, MRef, _} ->
                     %% same pid, different meta

+ 4 - 0
test/syn_pg_SUITE.erl

@@ -1674,6 +1674,10 @@ three_nodes_member_and_update(Config) ->
     %% join
     ok = syn:join(scope_all, "my-group", Pid, {recipient, TestPid, 10}),
 
+    %% rejoin with same data
+    ok = syn:join(scope_all, "my-group", Pid, {recipient, TestPid, 10}),
+    ok = rpc:call(SlaveNode1, syn, join, [scope_all, "my-group", Pid, {recipient, TestPid, 10}]),
+
     %% retrieve
     {Pid, {recipient, TestPid, 10}} = syn:member(scope_all, "my-group", Pid),
     undefined = syn:member(scope_all, "my-group", PidOn1),

+ 4 - 0
test/syn_registry_SUITE.erl

@@ -1527,6 +1527,10 @@ three_nodes_update(Config) ->
     %% register
     ok = syn:register(scope_all, "my-proc", Pid, {recipient, TestPid, 10}),
 
+    %% re-register with same data
+    ok = syn:register(scope_all, "my-proc", Pid, {recipient, TestPid, 10}),
+    ok = rpc:call(SlaveNode1, syn, register, [scope_all, "my-proc", Pid, {recipient, TestPid, 10}]),
+
     %% add custom handler for resolution (using method call)
     syn:set_event_handler(syn_test_event_handler_callbacks),
     rpc:call(SlaveNode1, syn, set_event_handler, [syn_test_event_handler_callbacks]),