diff options
author | Björn Gustavsson <[email protected]> | 2014-03-04 12:20:57 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2014-03-06 12:06:23 +0100 |
commit | 651d8b9ab88b4bad73d37f3696b8d3cf0970a80d (patch) | |
tree | 7f99a5d2637809c773b413f7a29bc98f5ebb3af5 /lib | |
parent | 22494c65f5da5b06816c637141c40b14e829cb11 (diff) | |
download | otp-651d8b9ab88b4bad73d37f3696b8d3cf0970a80d.tar.gz otp-651d8b9ab88b4bad73d37f3696b8d3cf0970a80d.tar.bz2 otp-651d8b9ab88b4bad73d37f3696b8d3cf0970a80d.zip |
cover_SUITE:reconnect/1: Let the other side initiate the disconnect
The reconnect/1 test starts another node and takes down the connection
to it for a while. However, it has been in observed in our daily builds
that sometimes a "spontaneous" re-connection occurs.
I think that it because of the call to rpc:cast/3 which internally
will set the group leader for the remote process to a process on
the test_server node. It seems that sometimes the group_leader/2
call will re-establish the connection. Unfortunately, I have not
been able to force this to happen by inserting delays in the rpc
module, so it it still just an hypothesis.
However, letting the other node do the disconnection does seem to fix
the problem and intuitively that should be safer way to do it because
the group_leader/2 call and the disconnection will be executed
sequentially on the same node instead of concurrently from two
different nodes.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/tools/test/cover_SUITE.erl | 6 | ||||
-rw-r--r-- | lib/tools/test/cover_SUITE_data/f.erl | 7 |
2 files changed, 8 insertions, 5 deletions
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl index 0b98f52e6e..80807b1d38 100644 --- a/lib/tools/test/cover_SUITE.erl +++ b/lib/tools/test/cover_SUITE.erl @@ -516,11 +516,9 @@ reconnect(Config) -> cover:flush(N1), rpc:call(N1,f,f1,[]), - %% This will cause a call to f:f2() when nodes()==[] on N1 + %% This will cause first casue the N1 node to initiate a + %% disconnect and then call f:f2() when nodes() =:= [] on N1. rpc:cast(N1,f,call_f2_when_isolated,[]), - - %% Disconnect and check that node is removed from main cover node - true = net_kernel:disconnect(N1), timer:sleep(500), % allow some to detect disconnect and for f:f2() call cover_which_nodes([]), diff --git a/lib/tools/test/cover_SUITE_data/f.erl b/lib/tools/test/cover_SUITE_data/f.erl index ce2963014a..a29a67b388 100644 --- a/lib/tools/test/cover_SUITE_data/f.erl +++ b/lib/tools/test/cover_SUITE_data/f.erl @@ -10,10 +10,15 @@ f2() -> f2_line2. call_f2_when_isolated() -> + [Other] = nodes(), + net_kernel:disconnect(Other), + do_call_f2_when_isolated(). + +do_call_f2_when_isolated() -> case nodes() of [] -> f2(); _ -> timer:sleep(100), - call_f2_when_isolated() + do_call_f2_when_isolated() end. |