From 5a14046ea142e9272be804995af705f99934ca61 Mon Sep 17 00:00:00 2001 From: Mikhail Uvarov Date: Wed, 2 Aug 2023 17:34:32 +0200 Subject: [PATCH] Add remote_ops_are_ignored_if_join_ref_does_not_match testcase --- src/cets.erl | 2 ++ test/cets_SUITE.erl | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/cets.erl b/src/cets.erl index d0f7e5f2..7a369ddd 100644 --- a/src/cets.erl +++ b/src/cets.erl @@ -539,6 +539,8 @@ handle_remote_op(From, RemoteJoinRef, Msg, #{join_ref := JoinRef}) -> join_ref => JoinRef, msg => Msg }), + %% We still need to reply to the remote process so it could stop waiting + reply_updated(From), ok. %% Apply operation for one local table only diff --git a/test/cets_SUITE.erl b/test/cets_SUITE.erl index c1f83306..04904580 100644 --- a/test/cets_SUITE.erl +++ b/test/cets_SUITE.erl @@ -34,6 +34,7 @@ all() -> join_fails_in_check_fully_connected, join_fails_because_join_refs_do_not_match_for_nodes_in_segment, join_fails_because_pids_do_not_match_for_nodes_in_segment, + remote_ops_are_ignored_if_join_ref_does_not_match, test_multinode, test_multinode_remote_insert, node_list_is_correct, @@ -500,6 +501,18 @@ join_fails_because_pids_do_not_match_for_nodes_in_segment(Config) -> {error, {error, check_fully_connected_failed, _}} = cets_join:join(lock_name(Config), #{}, Pid1, Pid2, #{}). +remote_ops_are_ignored_if_join_ref_does_not_match(Config) -> + {ok, Pid1} = cets:start(make_name(Config, 1), #{}), + {ok, Pid2} = cets:start(make_name(Config, 2), #{}), + ok = cets_join:join(lock_name(Config), #{}, Pid1, Pid2, #{}), + #{join_ref := JoinRef} = cets:info(Pid1), + set_join_ref(Pid1, make_ref()), + cets:insert(Pid2, {1}), + %% fix and check again + set_join_ref(Pid1, JoinRef), + cets:insert(Pid2, {2}), + {ok, [{2}]} = cets:remote_dump(Pid1). + test_multinode(Config) -> Node1 = node(), [Node2, Node3, Node4] = proplists:get_value(nodes, Config),