Skip to content

Commit a902058

Browse files
Merge pull request #11107 from rabbitmq/mergify/bp/v3.13.x/pr-11101
Cleanup shovels deleted from another node (backport #11101)
2 parents 75e8bce + d264bab commit a902058

File tree

3 files changed

+47
-18
lines changed

3 files changed

+47
-18
lines changed

deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup_sup.erl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,7 @@ stop_child({VHost, ShovelName} = Name) ->
8282
TmpExpId = temp_experimental_id(Name),
8383
_ = stop_and_delete_child(TmpExpId),
8484
ok
85-
end,
86-
rabbit_shovel_status:remove(Name)
85+
end
8786
end,
8887
rabbit_shovel_locks:unlock(LockId),
8988
ok.

deps/rabbitmq_shovel/src/rabbit_shovel_worker.erl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,14 @@ terminate({shutdown, autodelete}, State = #state{name = Name,
150150
_ = rabbit_runtime_parameters:clear(VHost, <<"shovel">>, ShovelName, ?SHOVEL_USER),
151151
rabbit_shovel_status:remove(Name),
152152
ok;
153-
terminate(shutdown, State) ->
153+
terminate(shutdown, State = #state{name = Name}) ->
154154
close_connections(State),
155+
rabbit_shovel_status:remove(Name),
155156
ok;
156-
terminate(socket_closed_unexpectedly, State) ->
157+
terminate(socket_closed_unexpectedly, State = #state{name = Name}) ->
158+
rabbit_log_shovel:error("Shovel ~ts is stopping because of the socket closed unexpectedly", [human_readable_name(Name)]),
159+
rabbit_shovel_status:report(State#state.name, State#state.type,
160+
{terminated, "socket closed"}),
157161
close_connections(State),
158162
ok;
159163
terminate({'EXIT', heartbeat_timeout}, State = #state{name = Name}) ->

deps/rabbitmq_shovel/test/delete_shovel_command_SUITE.erl

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,26 @@
99

1010
-include_lib("common_test/include/ct.hrl").
1111
-include_lib("amqp_client/include/amqp_client.hrl").
12+
-include_lib("stdlib/include/assert.hrl").
1213

1314
-compile(export_all).
1415

1516
-define(CMD, 'Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand').
1617

1718
all() ->
1819
[
19-
{group, non_parallel_tests}
20+
{group, non_parallel_tests},
21+
{group, cluster_size_2}
2022
].
2123

2224
groups() ->
2325
[
2426
{non_parallel_tests, [], [
2527
delete_not_found,
2628
delete
29+
]},
30+
{cluster_size_2, [], [
31+
clear_param_on_different_node
2732
]}
2833
].
2934

@@ -33,25 +38,31 @@ groups() ->
3338

3439
init_per_suite(Config) ->
3540
rabbit_ct_helpers:log_environment(),
41+
rabbit_ct_helpers:run_setup_steps(Config).
42+
43+
end_per_suite(Config) ->
44+
rabbit_ct_helpers:run_teardown_steps(Config).
45+
46+
init_per_group(cluster_size_2, Config) ->
47+
init_per_multinode_group(cluster_size_2, Config, 2);
48+
init_per_group(Group, Config) ->
49+
init_per_multinode_group(Group, Config, 1).
50+
51+
init_per_multinode_group(_Group, Config, NodeCount) ->
52+
Suffix = rabbit_ct_helpers:testcase_absname(Config, "", "-"),
3653
Config1 = rabbit_ct_helpers:set_config(Config, [
37-
{rmq_nodename_suffix, ?MODULE}
54+
{rmq_nodes_count, NodeCount},
55+
{rmq_nodename_suffix, Suffix}
3856
]),
39-
Config2 = rabbit_ct_helpers:run_setup_steps(Config1,
40-
rabbit_ct_broker_helpers:setup_steps() ++
41-
rabbit_ct_client_helpers:setup_steps()),
42-
Config2.
57+
rabbit_ct_helpers:run_steps(Config1,
58+
rabbit_ct_broker_helpers:setup_steps() ++
59+
rabbit_ct_client_helpers:setup_steps()).
4360

44-
end_per_suite(Config) ->
45-
rabbit_ct_helpers:run_teardown_steps(Config,
61+
end_per_group(_Group, Config) ->
62+
rabbit_ct_helpers:run_steps(Config,
4663
rabbit_ct_client_helpers:teardown_steps() ++
4764
rabbit_ct_broker_helpers:teardown_steps()).
4865

49-
init_per_group(_, Config) ->
50-
Config.
51-
52-
end_per_group(_, Config) ->
53-
Config.
54-
5566
init_per_testcase(Testcase, Config) ->
5667
rabbit_ct_helpers:testcase_started(Config, Testcase).
5768

@@ -76,3 +87,18 @@ delete(Config) ->
7687
ok = ?CMD:run([<<"myshovel">>], Opts),
7788
[] = rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_shovel_status,
7889
status, []).
90+
clear_param_on_different_node(Config) ->
91+
shovel_test_utils:set_param(
92+
Config,
93+
<<"myshovel">>, [{<<"src-queue">>, <<"src">>},
94+
{<<"dest-queue">>, <<"dest">>}]),
95+
[A, B] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
96+
[_] = rabbit_ct_broker_helpers:rpc(Config, A, rabbit_shovel_status,
97+
status, []),
98+
[] = rabbit_ct_broker_helpers:rpc(Config, B, rabbit_shovel_status,
99+
status, []),
100+
shovel_test_utils:clear_param(Config, B, <<"myshovel">>),
101+
?assertEqual([], rabbit_ct_broker_helpers:rpc(Config, A, rabbit_shovel_status,
102+
status, []), "Deleted shovel still reported on node A"),
103+
?assertEqual([], rabbit_ct_broker_helpers:rpc(Config, B, rabbit_shovel_status,
104+
status, []), "Deleted shovel still reported on node B").

0 commit comments

Comments
 (0)