|
@@ -37,7 +37,8 @@
|
|
three_nodes_discover_custom_scope/1,
|
|
three_nodes_discover_custom_scope/1,
|
|
three_nodes_register_unregister_and_monitor_default_scope/1,
|
|
three_nodes_register_unregister_and_monitor_default_scope/1,
|
|
three_nodes_register_unregister_and_monitor_custom_scope/1,
|
|
three_nodes_register_unregister_and_monitor_custom_scope/1,
|
|
- three_nodes_cluster_changes_and_conflicts/1
|
|
|
|
|
|
+ three_nodes_cluster_changes/1,
|
|
|
|
+ three_nodes_cluster_conflicts/1
|
|
]).
|
|
]).
|
|
|
|
|
|
%% include
|
|
%% include
|
|
@@ -75,11 +76,12 @@ all() ->
|
|
groups() ->
|
|
groups() ->
|
|
[
|
|
[
|
|
{three_nodes_process_registration, [shuffle], [
|
|
{three_nodes_process_registration, [shuffle], [
|
|
-%% three_nodes_discover_default_scope,
|
|
|
|
-%% three_nodes_discover_custom_scope,
|
|
|
|
-%% three_nodes_register_unregister_and_monitor_default_scope,
|
|
|
|
-%% three_nodes_register_unregister_and_monitor_custom_scope,
|
|
|
|
- three_nodes_cluster_changes_and_conflicts
|
|
|
|
|
|
+ three_nodes_discover_default_scope,
|
|
|
|
+ three_nodes_discover_custom_scope,
|
|
|
|
+ three_nodes_register_unregister_and_monitor_default_scope,
|
|
|
|
+ three_nodes_register_unregister_and_monitor_custom_scope,
|
|
|
|
+ three_nodes_cluster_changes,
|
|
|
|
+ three_nodes_cluster_conflicts
|
|
]}
|
|
]}
|
|
].
|
|
].
|
|
%% -------------------------------------------------------------------
|
|
%% -------------------------------------------------------------------
|
|
@@ -172,11 +174,12 @@ three_nodes_discover_default_scope(Config) ->
|
|
%% get slaves
|
|
%% get slaves
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
|
|
+
|
|
%% start syn on nodes
|
|
%% start syn on nodes
|
|
ok = syn:start(),
|
|
ok = syn:start(),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check
|
|
%% check
|
|
assert_scope_subcluster(node(), default, [SlaveNode1, SlaveNode2]),
|
|
assert_scope_subcluster(node(), default, [SlaveNode1, SlaveNode2]),
|
|
@@ -187,7 +190,7 @@ three_nodes_discover_default_scope(Config) ->
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, disconnect_node, [SlaveNode2]),
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, disconnect_node, [SlaveNode2]),
|
|
syn_test_suite_helper:disconnect_node(SlaveNode1),
|
|
syn_test_suite_helper:disconnect_node(SlaveNode1),
|
|
syn_test_suite_helper:disconnect_node(SlaveNode2),
|
|
syn_test_suite_helper:disconnect_node(SlaveNode2),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check
|
|
%% check
|
|
assert_scope_subcluster(node(), default, []),
|
|
assert_scope_subcluster(node(), default, []),
|
|
@@ -212,7 +215,7 @@ three_nodes_discover_default_scope(Config) ->
|
|
|
|
|
|
%% crash the scope process on local
|
|
%% crash the scope process on local
|
|
syn_test_suite_helper:kill_process(syn_registry_default),
|
|
syn_test_suite_helper:kill_process(syn_registry_default),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check, it should have rebuilt after supervisor restarts it
|
|
%% check, it should have rebuilt after supervisor restarts it
|
|
assert_scope_subcluster(node(), default, [SlaveNode1, SlaveNode2]),
|
|
assert_scope_subcluster(node(), default, [SlaveNode1, SlaveNode2]),
|
|
@@ -221,7 +224,7 @@ three_nodes_discover_default_scope(Config) ->
|
|
|
|
|
|
%% crash scopes supervisor on local
|
|
%% crash scopes supervisor on local
|
|
syn_test_suite_helper:kill_process(syn_scopes_sup),
|
|
syn_test_suite_helper:kill_process(syn_scopes_sup),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check
|
|
%% check
|
|
assert_scope_subcluster(node(), default, [SlaveNode1, SlaveNode2]),
|
|
assert_scope_subcluster(node(), default, [SlaveNode1, SlaveNode2]),
|
|
@@ -232,18 +235,19 @@ three_nodes_discover_custom_scope(Config) ->
|
|
%% get slaves
|
|
%% get slaves
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
|
|
+
|
|
%% start syn on nodes
|
|
%% start syn on nodes
|
|
ok = syn:start(),
|
|
ok = syn:start(),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% add custom scopes
|
|
%% add custom scopes
|
|
ok = syn:add_node_to_scope(custom_scope_ab),
|
|
ok = syn:add_node_to_scope(custom_scope_ab),
|
|
ok = syn:add_node_to_scope(custom_scope_all),
|
|
ok = syn:add_node_to_scope(custom_scope_all),
|
|
ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[custom_scope_ab, custom_scope_bc, custom_scope_all]]),
|
|
ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[custom_scope_ab, custom_scope_bc, custom_scope_all]]),
|
|
ok = rpc:call(SlaveNode2, syn, add_node_to_scopes, [[custom_scope_bc, custom_scope_c, custom_scope_all]]),
|
|
ok = rpc:call(SlaveNode2, syn, add_node_to_scopes, [[custom_scope_bc, custom_scope_c, custom_scope_all]]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check
|
|
%% check
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
@@ -262,7 +266,7 @@ three_nodes_discover_custom_scope(Config) ->
|
|
|
|
|
|
%% disconnect node 2 (node 1 can still see node 2)
|
|
%% disconnect node 2 (node 1 can still see node 2)
|
|
syn_test_suite_helper:disconnect_node(SlaveNode2),
|
|
syn_test_suite_helper:disconnect_node(SlaveNode2),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check
|
|
%% check
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
@@ -287,7 +291,7 @@ three_nodes_discover_custom_scope(Config) ->
|
|
|
|
|
|
%% crash a scope process on 2
|
|
%% crash a scope process on 2
|
|
rpc:call(SlaveNode2, syn_test_suite_helper, kill_process, [syn_registry_custom_scope_bc]),
|
|
rpc:call(SlaveNode2, syn_test_suite_helper, kill_process, [syn_registry_custom_scope_bc]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check
|
|
%% check
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
@@ -301,7 +305,7 @@ three_nodes_discover_custom_scope(Config) ->
|
|
|
|
|
|
%% crash scopes supervisor on local
|
|
%% crash scopes supervisor on local
|
|
syn_test_suite_helper:kill_process(syn_scopes_sup),
|
|
syn_test_suite_helper:kill_process(syn_scopes_sup),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% check
|
|
%% check
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
assert_scope_subcluster(node(), custom_scope_ab, [SlaveNode1]),
|
|
@@ -317,11 +321,12 @@ three_nodes_register_unregister_and_monitor_default_scope(Config) ->
|
|
%% get slaves
|
|
%% get slaves
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
|
|
+
|
|
%% start syn on nodes
|
|
%% start syn on nodes
|
|
ok = syn:start(),
|
|
ok = syn:start(),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% start processes
|
|
%% start processes
|
|
Pid = syn_test_suite_helper:start_process(),
|
|
Pid = syn_test_suite_helper:start_process(),
|
|
@@ -351,7 +356,7 @@ three_nodes_register_unregister_and_monitor_default_scope(Config) ->
|
|
ok = syn:register({"my proc alias"}, Pid), %% same pid, different name
|
|
ok = syn:register({"my proc alias"}, Pid), %% same pid, different name
|
|
ok = syn:register(<<"my proc with meta">>, PidWithMeta, {meta, <<"meta">>}), %% pid with meta
|
|
ok = syn:register(<<"my proc with meta">>, PidWithMeta, {meta, <<"meta">>}), %% pid with meta
|
|
ok = syn:register({remote_pid_on, slave_1}, PidRemoteOn1), %% remote on slave 1
|
|
ok = syn:register({remote_pid_on, slave_1}, PidRemoteOn1), %% remote on slave 1
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% errors
|
|
%% errors
|
|
{error, taken} = syn:register(<<"my proc">>, PidRemoteOn1),
|
|
{error, taken} = syn:register(<<"my proc">>, PidRemoteOn1),
|
|
@@ -378,7 +383,7 @@ three_nodes_register_unregister_and_monitor_default_scope(Config) ->
|
|
%% re-register to edit meta
|
|
%% re-register to edit meta
|
|
ok = syn:register(<<"my proc with meta">>, PidWithMeta, {meta2, <<"meta2">>}),
|
|
ok = syn:register(<<"my proc with meta">>, PidWithMeta, {meta2, <<"meta2">>}),
|
|
ok = rpc:call(SlaveNode2, syn, register, [{remote_pid_on, slave_1}, PidRemoteOn1, added_meta]), %% updated on slave 2
|
|
ok = rpc:call(SlaveNode2, syn, register, [{remote_pid_on, slave_1}, PidRemoteOn1, added_meta]), %% updated on slave 2
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% retrieve
|
|
%% retrieve
|
|
{PidWithMeta, {meta2, <<"meta2">>}} = syn:lookup(<<"my proc with meta">>),
|
|
{PidWithMeta, {meta2, <<"meta2">>}} = syn:lookup(<<"my proc with meta">>),
|
|
@@ -394,14 +399,14 @@ three_nodes_register_unregister_and_monitor_default_scope(Config) ->
|
|
|
|
|
|
%% crash scope process to ensure that monitors get recreated
|
|
%% crash scope process to ensure that monitors get recreated
|
|
exit(whereis(syn_registry_default), kill),
|
|
exit(whereis(syn_registry_default), kill),
|
|
- timer:sleep(100), %$ wait for sup to restart it
|
|
|
|
|
|
+ timer:sleep(250), %$ wait for sup to restart it
|
|
|
|
|
|
%% kill process
|
|
%% kill process
|
|
syn_test_suite_helper:kill_process(Pid),
|
|
syn_test_suite_helper:kill_process(Pid),
|
|
syn_test_suite_helper:kill_process(PidRemoteOn1),
|
|
syn_test_suite_helper:kill_process(PidRemoteOn1),
|
|
%% unregister process
|
|
%% unregister process
|
|
ok = syn:unregister(<<"my proc with meta">>),
|
|
ok = syn:unregister(<<"my proc with meta">>),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% retrieve
|
|
%% retrieve
|
|
undefined = syn:lookup(<<"my proc">>),
|
|
undefined = syn:lookup(<<"my proc">>),
|
|
@@ -428,7 +433,7 @@ three_nodes_register_unregister_and_monitor_default_scope(Config) ->
|
|
Pid1 = syn_test_suite_helper:start_process(),
|
|
Pid1 = syn_test_suite_helper:start_process(),
|
|
Pid2 = syn_test_suite_helper:start_process(),
|
|
Pid2 = syn_test_suite_helper:start_process(),
|
|
ok = syn:register(<<"my proc">>, Pid1),
|
|
ok = syn:register(<<"my proc">>, Pid1),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
syn_registry:remove_from_local_table(default, <<"my proc">>, Pid1),
|
|
syn_registry:remove_from_local_table(default, <<"my proc">>, Pid1),
|
|
syn_registry:add_to_local_table(default, <<"my proc">>, Pid2, undefined, 0, undefined),
|
|
syn_registry:add_to_local_table(default, <<"my proc">>, Pid2, undefined, 0, undefined),
|
|
{error, race_condition} = rpc:call(SlaveNode1, syn, unregister, [<<"my proc">>]).
|
|
{error, race_condition} = rpc:call(SlaveNode1, syn, unregister, [<<"my proc">>]).
|
|
@@ -437,17 +442,18 @@ three_nodes_register_unregister_and_monitor_custom_scope(Config) ->
|
|
%% get slaves
|
|
%% get slaves
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
|
|
+
|
|
%% start syn on nodes
|
|
%% start syn on nodes
|
|
ok = syn:start(),
|
|
ok = syn:start(),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode1, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
ok = rpc:call(SlaveNode2, syn, start, []),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% add custom scopes
|
|
%% add custom scopes
|
|
ok = syn:add_node_to_scope(custom_scope_ab),
|
|
ok = syn:add_node_to_scope(custom_scope_ab),
|
|
ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[custom_scope_ab, custom_scope_bc]]),
|
|
ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[custom_scope_ab, custom_scope_bc]]),
|
|
ok = rpc:call(SlaveNode2, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
ok = rpc:call(SlaveNode2, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% start processes
|
|
%% start processes
|
|
Pid = syn_test_suite_helper:start_process(),
|
|
Pid = syn_test_suite_helper:start_process(),
|
|
@@ -498,7 +504,7 @@ three_nodes_register_unregister_and_monitor_custom_scope(Config) ->
|
|
{'EXIT', {{invalid_scope, custom_scope_bc}, _}} = catch syn:register(custom_scope_bc, "scope_a", Pid),
|
|
{'EXIT', {{invalid_scope, custom_scope_bc}, _}} = catch syn:register(custom_scope_bc, "scope_a", Pid),
|
|
{'EXIT', {{invalid_scope, non_existent_scope}, _}} = catch syn:register(non_existent_scope, "scope_a", Pid),
|
|
{'EXIT', {{invalid_scope, non_existent_scope}, _}} = catch syn:register(non_existent_scope, "scope_a", Pid),
|
|
ok = rpc:call(SlaveNode2, syn, register, [custom_scope_bc, {remote_scoped_bc}, PidRemoteWithMetaOn1, <<"with_meta 1">>]),
|
|
ok = rpc:call(SlaveNode2, syn, register, [custom_scope_bc, {remote_scoped_bc}, PidRemoteWithMetaOn1, <<"with_meta 1">>]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% errors
|
|
%% errors
|
|
{error, taken} = syn:register(custom_scope_ab, "scope_a", PidWithMeta),
|
|
{error, taken} = syn:register(custom_scope_ab, "scope_a", PidWithMeta),
|
|
@@ -545,14 +551,14 @@ three_nodes_register_unregister_and_monitor_custom_scope(Config) ->
|
|
|
|
|
|
%% re-register to edit meta
|
|
%% re-register to edit meta
|
|
ok = syn:register(custom_scope_ab, "scope_a_alias", PidWithMeta, <<"with_meta_updated">>),
|
|
ok = syn:register(custom_scope_ab, "scope_a_alias", PidWithMeta, <<"with_meta_updated">>),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
{PidWithMeta, <<"with_meta_updated">>} = syn:lookup(custom_scope_ab, "scope_a_alias"),
|
|
{PidWithMeta, <<"with_meta_updated">>} = syn:lookup(custom_scope_ab, "scope_a_alias"),
|
|
{PidWithMeta, <<"with_meta_updated">>} = rpc:call(SlaveNode1, syn, lookup, [custom_scope_ab, "scope_a_alias"]),
|
|
{PidWithMeta, <<"with_meta_updated">>} = rpc:call(SlaveNode1, syn, lookup, [custom_scope_ab, "scope_a_alias"]),
|
|
{badrpc, {'EXIT', {{invalid_scope, custom_scope_ab}, _}}} = catch rpc:call(SlaveNode2, syn, lookup, [custom_scope_ab, "scope_a_alias"]),
|
|
{badrpc, {'EXIT', {{invalid_scope, custom_scope_ab}, _}}} = catch rpc:call(SlaveNode2, syn, lookup, [custom_scope_ab, "scope_a_alias"]),
|
|
|
|
|
|
%% crash scope process to ensure that monitors get recreated
|
|
%% crash scope process to ensure that monitors get recreated
|
|
exit(whereis(syn_registry_custom_scope_ab), kill),
|
|
exit(whereis(syn_registry_custom_scope_ab), kill),
|
|
- timer:sleep(100), %$ wait for sup to restart it
|
|
|
|
|
|
+ timer:sleep(250), %$ wait for sup to restart it
|
|
|
|
|
|
%% kill process
|
|
%% kill process
|
|
syn_test_suite_helper:kill_process(Pid),
|
|
syn_test_suite_helper:kill_process(Pid),
|
|
@@ -561,7 +567,7 @@ three_nodes_register_unregister_and_monitor_custom_scope(Config) ->
|
|
{error, undefined} = catch syn:unregister(<<"my proc with meta">>),
|
|
{error, undefined} = catch syn:unregister(<<"my proc with meta">>),
|
|
{'EXIT', {{invalid_scope, custom_scope_bc}, _}} = catch syn:unregister(custom_scope_bc, <<"my proc with meta">>),
|
|
{'EXIT', {{invalid_scope, custom_scope_bc}, _}} = catch syn:unregister(custom_scope_bc, <<"my proc with meta">>),
|
|
ok = rpc:call(SlaveNode1, syn, unregister, [custom_scope_bc, {remote_scoped_bc}]),
|
|
ok = rpc:call(SlaveNode1, syn, unregister, [custom_scope_bc, {remote_scoped_bc}]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% retrieve
|
|
%% retrieve
|
|
undefined = syn:lookup("scope_a"),
|
|
undefined = syn:lookup("scope_a"),
|
|
@@ -608,12 +614,12 @@ three_nodes_register_unregister_and_monitor_custom_scope(Config) ->
|
|
Pid1 = syn_test_suite_helper:start_process(),
|
|
Pid1 = syn_test_suite_helper:start_process(),
|
|
Pid2 = syn_test_suite_helper:start_process(),
|
|
Pid2 = syn_test_suite_helper:start_process(),
|
|
ok = syn:register(custom_scope_ab, <<"my proc">>, Pid1),
|
|
ok = syn:register(custom_scope_ab, <<"my proc">>, Pid1),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
syn_registry:remove_from_local_table(custom_scope_ab, <<"my proc">>, Pid1),
|
|
syn_registry:remove_from_local_table(custom_scope_ab, <<"my proc">>, Pid1),
|
|
syn_registry:add_to_local_table(custom_scope_ab, <<"my proc">>, Pid2, undefined, 0, undefined),
|
|
syn_registry:add_to_local_table(custom_scope_ab, <<"my proc">>, Pid2, undefined, 0, undefined),
|
|
{error, race_condition} = rpc:call(SlaveNode1, syn, unregister, [custom_scope_ab, <<"my proc">>]).
|
|
{error, race_condition} = rpc:call(SlaveNode1, syn, unregister, [custom_scope_ab, <<"my proc">>]).
|
|
|
|
|
|
-three_nodes_cluster_changes_and_conflicts(Config) ->
|
|
|
|
|
|
+three_nodes_cluster_changes(Config) ->
|
|
%% get slaves
|
|
%% get slaves
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
@@ -628,7 +634,7 @@ three_nodes_cluster_changes_and_conflicts(Config) ->
|
|
%% add custom scopes
|
|
%% add custom scopes
|
|
ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
ok = rpc:call(SlaveNode2, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
ok = rpc:call(SlaveNode2, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% start processes
|
|
%% start processes
|
|
PidRemoteOn1 = syn_test_suite_helper:start_process(SlaveNode1),
|
|
PidRemoteOn1 = syn_test_suite_helper:start_process(SlaveNode1),
|
|
@@ -639,12 +645,13 @@ three_nodes_cluster_changes_and_conflicts(Config) ->
|
|
ok = rpc:call(SlaveNode1, syn, register, ["proc-2", PidRemoteOn2, "meta-2"]),
|
|
ok = rpc:call(SlaveNode1, syn, register, ["proc-2", PidRemoteOn2, "meta-2"]),
|
|
ok = rpc:call(SlaveNode1, syn, register, [custom_scope_bc, "BC-proc-1", PidRemoteOn1, "meta-1"]),
|
|
ok = rpc:call(SlaveNode1, syn, register, [custom_scope_bc, "BC-proc-1", PidRemoteOn1, "meta-1"]),
|
|
ok = rpc:call(SlaveNode1, syn, register, [custom_scope_bc, "BC-proc-1 alias", PidRemoteOn1, "meta-1 alias"]),
|
|
ok = rpc:call(SlaveNode1, syn, register, [custom_scope_bc, "BC-proc-1 alias", PidRemoteOn1, "meta-1 alias"]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% form full cluster
|
|
%% form full cluster
|
|
ok = syn:start(),
|
|
ok = syn:start(),
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, connect_node, [SlaveNode2]),
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, connect_node, [SlaveNode2]),
|
|
syn_test_suite_helper:wait_cluster_connected([node(), SlaveNode1, SlaveNode2]),
|
|
syn_test_suite_helper:wait_cluster_connected([node(), SlaveNode1, SlaveNode2]),
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% retrieve
|
|
%% retrieve
|
|
{PidRemoteOn1, "meta-1"} = syn:lookup("proc-1"),
|
|
{PidRemoteOn1, "meta-1"} = syn:lookup("proc-1"),
|
|
@@ -684,7 +691,7 @@ three_nodes_cluster_changes_and_conflicts(Config) ->
|
|
|
|
|
|
%% partial netsplit (1 cannot see 2)
|
|
%% partial netsplit (1 cannot see 2)
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, disconnect_node, [SlaveNode2]),
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, disconnect_node, [SlaveNode2]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% retrieve
|
|
%% retrieve
|
|
{PidRemoteOn1, "meta-1"} = syn:lookup("proc-1"),
|
|
{PidRemoteOn1, "meta-1"} = syn:lookup("proc-1"),
|
|
@@ -725,6 +732,7 @@ three_nodes_cluster_changes_and_conflicts(Config) ->
|
|
%% re-join
|
|
%% re-join
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, connect_node, [SlaveNode2]),
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, connect_node, [SlaveNode2]),
|
|
syn_test_suite_helper:wait_cluster_connected([node(), SlaveNode1, SlaveNode2]),
|
|
syn_test_suite_helper:wait_cluster_connected([node(), SlaveNode1, SlaveNode2]),
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% retrieve
|
|
%% retrieve
|
|
{PidRemoteOn1, "meta-1"} = syn:lookup("proc-1"),
|
|
{PidRemoteOn1, "meta-1"} = syn:lookup("proc-1"),
|
|
@@ -760,49 +768,90 @@ three_nodes_cluster_changes_and_conflicts(Config) ->
|
|
2 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc]),
|
|
2 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc]),
|
|
0 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, node()]),
|
|
0 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, node()]),
|
|
2 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, SlaveNode1]),
|
|
2 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, SlaveNode1]),
|
|
- 0 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, SlaveNode2]),
|
|
|
|
|
|
+ 0 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, SlaveNode2]).
|
|
|
|
+
|
|
|
|
+three_nodes_cluster_conflicts(Config) ->
|
|
|
|
+ %% get slaves
|
|
|
|
+ SlaveNode1 = proplists:get_value(slave_node_1, Config),
|
|
|
|
+ SlaveNode2 = proplists:get_value(slave_node_2, Config),
|
|
|
|
+
|
|
|
|
+ %% start syn on nodes
|
|
|
|
+ ok = syn:start(),
|
|
|
|
+ ok = rpc:call(SlaveNode1, syn, start, []),
|
|
|
|
+ ok = rpc:call(SlaveNode2, syn, start, []),
|
|
|
|
+
|
|
|
|
+ %% add custom scopes
|
|
|
|
+ ok = rpc:call(SlaveNode1, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
|
|
+ ok = rpc:call(SlaveNode2, syn, add_node_to_scopes, [[custom_scope_bc]]),
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% partial netsplit (1 cannot see 2)
|
|
%% partial netsplit (1 cannot see 2)
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, disconnect_node, [SlaveNode2]),
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, disconnect_node, [SlaveNode2]),
|
|
- timer:sleep(100),
|
|
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% start conflict processes
|
|
%% start conflict processes
|
|
Pid2RemoteOn1 = syn_test_suite_helper:start_process(SlaveNode1),
|
|
Pid2RemoteOn1 = syn_test_suite_helper:start_process(SlaveNode1),
|
|
Pid2RemoteOn2 = syn_test_suite_helper:start_process(SlaveNode2),
|
|
Pid2RemoteOn2 = syn_test_suite_helper:start_process(SlaveNode2),
|
|
|
|
|
|
- ct:pal("STARTED On1: ~p, On2: ~p", [Pid2RemoteOn1, Pid2RemoteOn2]),
|
|
|
|
-
|
|
|
|
- %% register conflicts new during netsplit
|
|
|
|
- ok = rpc:call(SlaveNode1, syn, register, ["proc-2", Pid2RemoteOn1, "new-meta-2"]),
|
|
|
|
- ok = rpc:call(SlaveNode2, syn, register, ["proc-1", Pid2RemoteOn2, "new-meta-1"]),
|
|
|
|
|
|
+ %% --> conflict by netsplit
|
|
|
|
+ ok = rpc:call(SlaveNode1, syn, register, ["proc-confict", Pid2RemoteOn1, "meta-1"]),
|
|
|
|
+ ok = rpc:call(SlaveNode2, syn, register, ["proc-confict", Pid2RemoteOn2, "meta-2"]),
|
|
|
|
+ ok = rpc:call(SlaveNode1, syn, register, [custom_scope_bc, "proc-confict", Pid2RemoteOn1, "meta-1"]),
|
|
|
|
+ ok = rpc:call(SlaveNode2, syn, register, [custom_scope_bc, "proc-confict", Pid2RemoteOn2, "meta-2"]),
|
|
|
|
|
|
%% re-join
|
|
%% re-join
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, connect_node, [SlaveNode2]),
|
|
rpc:call(SlaveNode1, syn_test_suite_helper, connect_node, [SlaveNode2]),
|
|
syn_test_suite_helper:wait_cluster_connected([node(), SlaveNode1, SlaveNode2]),
|
|
syn_test_suite_helper:wait_cluster_connected([node(), SlaveNode1, SlaveNode2]),
|
|
|
|
+ timer:sleep(250),
|
|
|
|
|
|
%% retrieve
|
|
%% retrieve
|
|
- {Pid2RemoteOn2, "new-meta-1"} = syn:lookup("proc-1"),
|
|
|
|
- {Pid2RemoteOn2, "new-meta-1"} = rpc:call(SlaveNode1, syn, lookup, ["proc-1"]),
|
|
|
|
- {Pid2RemoteOn2, "new-meta-1"} = rpc:call(SlaveNode2, syn, lookup, ["proc-1"]),
|
|
|
|
- {Pid2RemoteOn1, "new-meta-2"} = syn:lookup("proc-2"),
|
|
|
|
- {Pid2RemoteOn1, "new-meta-2"} = rpc:call(SlaveNode1, syn, lookup, ["proc-2"]),
|
|
|
|
- {Pid2RemoteOn1, "new-meta-2"} = rpc:call(SlaveNode2, syn, lookup, ["proc-2"]),
|
|
|
|
- 2 = syn:registry_count(default),
|
|
|
|
|
|
+ {Pid2RemoteOn2, "meta-2"} = syn:lookup("proc-confict"),
|
|
|
|
+ {Pid2RemoteOn2, "meta-2"} = rpc:call(SlaveNode1, syn, lookup, ["proc-confict"]),
|
|
|
|
+ {Pid2RemoteOn2, "meta-2"} = rpc:call(SlaveNode2, syn, lookup, ["proc-confict"]),
|
|
|
|
+ 1 = syn:registry_count(default),
|
|
0 = syn:registry_count(default, node()),
|
|
0 = syn:registry_count(default, node()),
|
|
- 1 = syn:registry_count(default, SlaveNode1),
|
|
|
|
|
|
+ 0 = syn:registry_count(default, SlaveNode1),
|
|
1 = syn:registry_count(default, SlaveNode2),
|
|
1 = syn:registry_count(default, SlaveNode2),
|
|
- 2 = rpc:call(SlaveNode1, syn, registry_count, [default]),
|
|
|
|
|
|
+ 1 = rpc:call(SlaveNode1, syn, registry_count, [default]),
|
|
0 = rpc:call(SlaveNode1, syn, registry_count, [default, node()]),
|
|
0 = rpc:call(SlaveNode1, syn, registry_count, [default, node()]),
|
|
- 1 = rpc:call(SlaveNode1, syn, registry_count, [default, SlaveNode1]),
|
|
|
|
|
|
+ 0 = rpc:call(SlaveNode1, syn, registry_count, [default, SlaveNode1]),
|
|
1 = rpc:call(SlaveNode1, syn, registry_count, [default, SlaveNode2]),
|
|
1 = rpc:call(SlaveNode1, syn, registry_count, [default, SlaveNode2]),
|
|
- 2 = rpc:call(SlaveNode2, syn, registry_count, [default]),
|
|
|
|
|
|
+ 1 = rpc:call(SlaveNode2, syn, registry_count, [default]),
|
|
0 = rpc:call(SlaveNode2, syn, registry_count, [default, node()]),
|
|
0 = rpc:call(SlaveNode2, syn, registry_count, [default, node()]),
|
|
- 1 = rpc:call(SlaveNode2, syn, registry_count, [default, SlaveNode1]),
|
|
|
|
- 1 = rpc:call(SlaveNode2, syn, registry_count, [default, SlaveNode2]).
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ 0 = rpc:call(SlaveNode2, syn, registry_count, [default, SlaveNode1]),
|
|
|
|
+ 1 = rpc:call(SlaveNode2, syn, registry_count, [default, SlaveNode2]),
|
|
|
|
+ {Pid2RemoteOn2, "meta-2"} = rpc:call(SlaveNode1, syn, lookup, [custom_scope_bc, "proc-confict"]),
|
|
|
|
+ {Pid2RemoteOn2, "meta-2"} = rpc:call(SlaveNode2, syn, lookup, [custom_scope_bc, "proc-confict"]),
|
|
|
|
+ 1 = rpc:call(SlaveNode1, syn, registry_count, [custom_scope_bc]),
|
|
|
|
+ 0 = rpc:call(SlaveNode1, syn, registry_count, [custom_scope_bc, node()]),
|
|
|
|
+ 0 = rpc:call(SlaveNode1, syn, registry_count, [custom_scope_bc, SlaveNode1]),
|
|
|
|
+ 1 = rpc:call(SlaveNode1, syn, registry_count, [custom_scope_bc, SlaveNode2]),
|
|
|
|
+ 1 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc]),
|
|
|
|
+ 0 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, node()]),
|
|
|
|
+ 0 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, SlaveNode1]),
|
|
|
|
+ 1 = rpc:call(SlaveNode2, syn, registry_count, [custom_scope_bc, SlaveNode2]),
|
|
|
|
|
|
|
|
+ %% --> conflict by race condition
|
|
|
|
+ Pid1 = syn_test_suite_helper:start_process(),
|
|
|
|
+ Pid2 = syn_test_suite_helper:start_process(SlaveNode1),
|
|
|
|
+ rpc:call(SlaveNode1, syn_registry, add_to_local_table, [default, <<"my proc">>, Pid2, "meta-2", erlang:system_time(), undefined]),
|
|
|
|
+ ok = syn:register(<<"my proc">>, Pid1, "meta-1"),
|
|
|
|
+ timer:sleep(250),
|
|
|
|
+ {Pid1, "meta-1"} = syn:lookup(<<"my proc">>),
|
|
|
|
+ {Pid1, "meta-1"} = rpc:call(SlaveNode1, syn, lookup, [<<"my proc">>]),
|
|
|
|
+ {Pid1, "meta-1"} = rpc:call(SlaveNode2, syn, lookup, [<<"my proc">>]),
|
|
|
|
+ true = is_process_alive(Pid1),
|
|
|
|
+ false = rpc:call(SlaveNode1, erlang, is_process_alive, [Pid2]),
|
|
|
|
+
|
|
|
|
+ PidCustom1 = syn_test_suite_helper:start_process(SlaveNode1),
|
|
|
|
+ PidCustom2 = syn_test_suite_helper:start_process(SlaveNode2),
|
|
|
|
+ rpc:call(SlaveNode2, syn_registry, add_to_local_table, [custom_scope_bc, <<"my proc">>, PidCustom2, "meta-2", erlang:system_time(), undefined]),
|
|
|
|
+ ok = rpc:call(SlaveNode1, syn, register, [custom_scope_bc, <<"my proc">>, PidCustom1, "meta-1"]),
|
|
|
|
+ timer:sleep(250),
|
|
|
|
+ {PidCustom1, "meta-1"} = rpc:call(SlaveNode1, syn, lookup, [custom_scope_bc, <<"my proc">>]),
|
|
|
|
+ {PidCustom1, "meta-1"} = rpc:call(SlaveNode2, syn, lookup, [custom_scope_bc, <<"my proc">>]),
|
|
|
|
+ true = rpc:call(SlaveNode1, erlang, is_process_alive, [PidCustom1]),
|
|
|
|
+ false = rpc:call(SlaveNode2, erlang, is_process_alive, [PidCustom2]).
|
|
|
|
|
|
%% ===================================================================
|
|
%% ===================================================================
|
|
%% Internal
|
|
%% Internal
|