Browse Source

Ensure that callback module gets loaded when set after syn start.

Roberto Ostinelli 3 years ago
parent
commit
066c68e1b8
4 changed files with 21 additions and 22 deletions
  1. 3 1
      src/syn.erl
  2. 2 6
      src/syn_sup.erl
  3. 7 5
      test/syn_pg_SUITE.erl
  4. 9 10
      test/syn_registry_SUITE.erl

+ 3 - 1
src/syn.erl

@@ -252,7 +252,9 @@ subcluster_nodes(pg, Scope) ->
 %% '''
 -spec set_event_handler(module()) -> ok.
 set_event_handler(Module) ->
-    application:set_env(syn, event_handler, Module).
+    application:set_env(syn, event_handler, Module),
+    %% ensure event handler is loaded
+    syn_event_handler:ensure_event_handler_loaded().
 
 %% ----- \/ registry -------------------------------------------------
 %% @doc Looks up a registry entry in the specified `Scope'.

+ 2 - 6
src/syn_sup.erl

@@ -46,16 +46,12 @@ start_link() ->
 
 -spec node_scopes() -> [atom()].
 node_scopes() ->
-    %% always have a default scope for all nodes
-    case application:get_env(syn, scopes) of
-        undefined -> [];
-        {ok, Scopes} -> Scopes
-    end.
+    application:get_env(syn, scopes, []).
 
 -spec add_node_to_scope(Scope :: atom()) -> ok.
 add_node_to_scope(Scope) when is_atom(Scope) ->
     error_logger:info_msg("SYN[~s] Adding node to scope <~s>", [node(), Scope]),
-    Scopes0 = application:get_env(syn, scopes, []),
+    Scopes0 = node_scopes(),
     case lists:member(Scope, Scopes0) of
         true ->
             %% nothing to do

+ 7 - 5
test/syn_pg_SUITE.erl

@@ -1078,9 +1078,8 @@ three_nodes_custom_event_handler_joined_left(Config) ->
     SlaveNode1 = proplists:get_value(syn_slave_1, Config),
     SlaveNode2 = proplists:get_value(syn_slave_2, Config),
 
-    %% add custom handler for callbacks (using ENV and method call)
-    syn:set_event_handler(syn_test_event_handler_callbacks),
-    rpc:call(SlaveNode1, syn, set_event_handler, [syn_test_event_handler_callbacks]),
+    %% add custom handler for callbacks & scopes (using ENV)
+    rpc:call(SlaveNode2, application, set_env, [syn, scopes, [scope_all]]),
     rpc:call(SlaveNode2, application, set_env, [syn, event_handler, syn_test_event_handler_callbacks]),
 
     %% start syn on nodes
@@ -1088,10 +1087,13 @@ three_nodes_custom_event_handler_joined_left(Config) ->
     ok = rpc:call(SlaveNode1, syn, start, []),
     ok = rpc:call(SlaveNode2, syn, start, []),
 
-    %% add scopes (using ENV and method call)
+    %% add custom handler for callbacks
+    syn:set_event_handler(syn_test_event_handler_callbacks),
+    rpc:call(SlaveNode1, syn, set_event_handler, [syn_test_event_handler_callbacks]),
+
+    %% add scopes
     ok = syn:add_node_to_scopes([scope_all]),
     ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[scope_all]]),
-    rpc:call(SlaveNode2, application, set_env, [syn, scopes, [scope_all]]),
 
     %% init
     TestPid = self(),

+ 9 - 10
test/syn_registry_SUITE.erl

@@ -918,9 +918,7 @@ three_nodes_custom_event_handler_reg_unreg(Config) ->
     SlaveNode1 = proplists:get_value(syn_slave_1, Config),
     SlaveNode2 = proplists:get_value(syn_slave_2, Config),
 
-    %% add custom handler for callbacks (using ENV and method call)
-    syn:set_event_handler(syn_test_event_handler_callbacks),
-    rpc:call(SlaveNode1, syn, set_event_handler, [syn_test_event_handler_callbacks]),
+    %% add custom handler for callbacks (using ENV)
     rpc:call(SlaveNode2, application, set_env, [syn, event_handler, syn_test_event_handler_callbacks]),
 
     %% start syn on nodes
@@ -928,6 +926,10 @@ three_nodes_custom_event_handler_reg_unreg(Config) ->
     ok = rpc:call(SlaveNode1, syn, start, []),
     ok = rpc:call(SlaveNode2, syn, start, []),
 
+    %% add custom handler for callbacks (using method call)
+    syn:set_event_handler(syn_test_event_handler_callbacks),
+    rpc:call(SlaveNode1, syn, set_event_handler, [syn_test_event_handler_callbacks]),
+
     %% add scopes
     ok = syn:add_node_to_scopes([scope_all]),
     ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[scope_all]]),
@@ -1133,9 +1135,7 @@ three_nodes_custom_event_handler_conflict_resolution(Config) ->
     SlaveNode1 = proplists:get_value(syn_slave_1, Config),
     SlaveNode2 = proplists:get_value(syn_slave_2, Config),
 
-    %% add custom handler for resolution (using ENV and method call)
-    syn:set_event_handler(syn_test_event_handler_resolution),
-    rpc:call(SlaveNode1, syn, set_event_handler, [syn_test_event_handler_resolution]),
+    %% add custom handler for resolution (using ENV)
     rpc:call(SlaveNode2, application, set_env, [syn, event_handler, syn_test_event_handler_resolution]),
 
     %% start syn on nodes
@@ -1143,10 +1143,9 @@ three_nodes_custom_event_handler_conflict_resolution(Config) ->
     ok = rpc:call(SlaveNode1, syn, start, []),
     ok = rpc:call(SlaveNode2, syn, start, []),
 
-    %% add scopes (using ENV and method call)
-    ok = syn:add_node_to_scopes([scope_all]),
-    ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[scope_all, scope_bc]]),
-    rpc:call(SlaveNode2, application, set_env, [syn, scopes, [scope_all, scope_bc]]),
+    %% add custom handler for resolution (using method call)
+    syn:set_event_handler(syn_test_event_handler_resolution),
+    rpc:call(SlaveNode1, syn, set_event_handler, [syn_test_event_handler_resolution]),
 
     %% current node
     TestPid = self(),