Browse Source

Refactor function places and names.

Roberto Ostinelli 5 years ago
parent
commit
bae48f6f80
2 changed files with 19 additions and 22 deletions
  1. 14 17
      src/syn_groups.erl
  2. 5 5
      src/syn_registry.erl

+ 14 - 17
src/syn_groups.erl

@@ -281,10 +281,10 @@ handle_info({'DOWN', _MonitorRef, process, Pid, Reason}, State) ->
                 %% get process info
                 GroupName = Entry#syn_groups_table.name,
                 Meta = Entry#syn_groups_table.meta,
-                %% handle
-                handle_process_down(GroupName, Pid, Meta, Reason, State),
                 %% remove from table
                 remove_from_local_table(Entry),
+                %% handle
+                handle_process_down(GroupName, Pid, Meta, Reason, State),
                 %% multicast
                 multicast_leave(GroupName, Pid)
             end, Entries)
@@ -303,7 +303,17 @@ handle_info({nodeup, RemoteNode}, State) ->
                 "Syn(~p): Received ~p group entrie(s) from remote node ~p",
                 [node(), length(GroupTuples), RemoteNode]
             ),
-            write_group_tuples_for_node(GroupTuples, RemoteNode),
+            %% ensure that groups doesn't have any joining node's entries
+            raw_purge_group_entries_for_node(RemoteNode),
+            %% add
+            lists:foreach(fun({GroupName, RemotePid, RemoteMeta}) ->
+                case rpc:call(node(RemotePid), erlang, is_process_alive, [RemotePid]) of
+                    true ->
+                        add_to_local_table(GroupName, RemotePid, RemoteMeta, undefined);
+                    _ ->
+                        ok = rpc:call(RemoteNode, syn_registry, remove_from_local_table, [GroupName, RemotePid])
+                end
+            end, GroupTuples),
             %% exit
             error_logger:warning_msg("Syn(~p): GROUPS AUTOMERGE <---- Done for remote node ~p", [node(), RemoteNode])
         end
@@ -447,20 +457,6 @@ handle_process_down(GroupName, Pid, Meta, Reason, #state{
             syn_event_handler:do_on_group_process_exit(GroupName, Pid, Meta, Reason, CustomEventHandler)
     end.
 
--spec write_group_tuples_for_node(GroupTuples :: [syn_registry_tuple()], RemoteNode :: node()) -> ok.
-write_group_tuples_for_node(GroupTuples, RemoteNode) ->
-    %% ensure that groups doesn't have any joining node's entries
-    raw_purge_group_entries_for_node(RemoteNode),
-    %% add
-    lists:foreach(fun({GroupName, RemotePid, RemoteMeta}) ->
-        case rpc:call(node(RemotePid), erlang, is_process_alive, [RemotePid]) of
-            true ->
-                add_to_local_table(GroupName, RemotePid, RemoteMeta, undefined);
-            _ ->
-                ok = rpc:call(RemoteNode, syn_registry, remove_from_local_table, [GroupName, RemotePid])
-        end
-    end, GroupTuples).
-
 -spec raw_purge_group_entries_for_node(Node :: atom()) -> ok.
 raw_purge_group_entries_for_node(Node) ->
     %% NB: no demonitoring is done, this is why it's raw
@@ -477,6 +473,7 @@ raw_purge_group_entries_for_node(Node) ->
     Message :: any(),
     Timeout :: non_neg_integer()
 ) -> any().
+
 multi_call_and_receive(CollectorPid, Pid, Message, Timeout) ->
     MonitorRef = monitor(process, Pid),
     Pid ! {syn_multi_call, self(), Message},

+ 5 - 5
src/syn_registry.erl

@@ -288,7 +288,7 @@ handle_info({nodeup, RemoteNode}, State) ->
                 [node(), length(RegistryTuples), RemoteNode]
             ),
             %% ensure that registry doesn't have any joining node's entries (here again for race conditions)
-            purge_registry_entries_for_remote_node(RemoteNode),
+            raw_purge_registry_entries_for_remote_node(RemoteNode),
             %% loop
             F = fun({Name, RemotePid, RemoteMeta}) ->
                 %% check if same name is registered
@@ -335,7 +335,7 @@ handle_info({nodeup, RemoteNode}, State) ->
 
 handle_info({nodedown, RemoteNode}, State) ->
     error_logger:warning_msg("Syn(~p): Node ~p has left the cluster, removing registry entries on local", [node(), RemoteNode]),
-    purge_registry_entries_for_remote_node(RemoteNode),
+    raw_purge_registry_entries_for_remote_node(RemoteNode),
     {noreply, State};
 
 handle_info(Info, State) ->
@@ -552,9 +552,9 @@ resolve_conflict(
             )
     end.
 
--spec purge_registry_entries_for_remote_node(Node :: atom()) -> ok.
-purge_registry_entries_for_remote_node(Node) when Node =/= node() ->
-    %% NB: no demonitoring is done, hence why this needs to run for a remote node
+-spec raw_purge_registry_entries_for_remote_node(Node :: atom()) -> ok.
+raw_purge_registry_entries_for_remote_node(Node) when Node =/= node() ->
+    %% NB: no demonitoring is done, this is why it's raw
     %% build match specs
     MatchHead = #syn_registry_table{name = '$1', node = '$2', _ = '_'},
     Guard = {'=:=', '$2', Node},