Skip to content

Commit 1f61ca8

Browse files
Merge pull request #9968 from cloudamqp/fix_dup_shovel
Fix dyn shovel child_exists check for old id format
2 parents 406ef09 + f0a7300 commit 1f61ca8

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

deps/rabbitmq_shovel/src/rabbit_shovel_dyn_worker_sup_sup.erl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ obfuscated_uris_parameters(Def) when is_list(Def) ->
6060
rabbit_shovel_parameters:obfuscate_uris_in_definition(Def).
6161

6262
child_exists(Name) ->
63-
lists:any(fun ({{_, N}, _, _, _}) -> N =:= Name;
64-
%% older format, pre 3.13.0 and 3.12.8. See rabbitmq/rabbitmq-server#9894.
65-
({N, _, _, _}) -> N =:= Name
63+
Id = id(Name),
64+
%% older format, pre 3.13.0 and 3.12.8. See rabbitmq/rabbitmq-server#9894.
65+
OldId = old_id(Name),
66+
lists:any(fun ({ChildId, _, _, _}) ->
67+
ChildId =:= Id orelse ChildId =:= OldId
6668
end,
6769
mirrored_supervisor:which_children(?SUPERVISOR)).
6870

@@ -100,7 +102,7 @@ stop_child({VHost, ShovelName} = Name) ->
100102
cleanup_specs() ->
101103
Children = mirrored_supervisor:which_children(?SUPERVISOR),
102104

103-
SupIdSet = sets:from_list([element(1, S) || S <- Children]),
105+
ChildIdSet = sets:from_list([element(1, S) || S <- Children]),
104106
ParamsSet = sets:from_list(
105107
lists:flatmap(
106108
fun(S) ->
@@ -110,16 +112,16 @@ cleanup_specs() ->
110112
[id(Name), old_id(Name)]
111113
end,
112114
rabbit_runtime_parameters:list_component(<<"shovel">>))),
113-
F = fun(SupId, ok) ->
115+
F = fun(ChildId, ok) ->
114116
try
115-
_ = mirrored_supervisor:delete_child(?SUPERVISOR, SupId)
117+
_ = mirrored_supervisor:delete_child(?SUPERVISOR, ChildId)
116118
catch _:_:_Stacktrace ->
117119
ok
118120
end,
119121
ok
120122
end,
121123
%% Delete any supervisor children that do not have their respective runtime parameters in the database.
122-
SetToCleanUp = sets:subtract(SupIdSet, ParamsSet),
124+
SetToCleanUp = sets:subtract(ChildIdSet, ParamsSet),
123125
ok = sets:fold(F, ok, SetToCleanUp).
124126

125127
%%----------------------------------------------------------------------------

0 commit comments

Comments
 (0)