Skip to content

Commit a92af34

Browse files
authored
Merge pull request #8991 from rabbitmq/replace-remaining-direct-calls-to-rabbit_ff_registry
Replace remaining direct calls to `rabbit_ff_registry`
2 parents 1ec3292 + 03dcb66 commit a92af34

File tree

5 files changed

+59
-18
lines changed

5 files changed

+59
-18
lines changed

deps/rabbit/src/rabbit_deprecated_features.erl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ is_permitted_nolog(FeatureName) ->
286286
%% features.
287287

288288
get_phase(FeatureName) when is_atom(FeatureName) ->
289-
case rabbit_ff_registry:get(FeatureName) of
289+
case rabbit_ff_registry_wrapper:get(FeatureName) of
290290
undefined -> undefined;
291291
FeatureProps -> get_phase(FeatureProps)
292292
end;
@@ -317,7 +317,7 @@ get_phase(FeatureProps) when is_map(FeatureProps) ->
317317
%% features.
318318

319319
get_warning(FeatureName) when is_atom(FeatureName) ->
320-
case rabbit_ff_registry:get(FeatureName) of
320+
case rabbit_ff_registry_wrapper:get(FeatureName) of
321321
undefined -> undefined;
322322
FeatureProps -> get_warning(FeatureProps)
323323
end;
@@ -328,7 +328,7 @@ get_warning(FeatureProps) when is_map(FeatureProps) ->
328328
get_warning(FeatureProps, Permitted).
329329

330330
get_warning(FeatureName, Permitted) when is_atom(FeatureName) ->
331-
case rabbit_ff_registry:get(FeatureName) of
331+
case rabbit_ff_registry_wrapper:get(FeatureName) of
332332
undefined -> undefined;
333333
FeatureProps -> get_warning(FeatureProps, Permitted)
334334
end;

deps/rabbit/src/rabbit_feature_flags.erl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,11 +1109,11 @@ try_to_write_enabled_feature_flags_list(FeatureNames) ->
11091109
end,
11101110
FeatureNames1 = lists:filter(
11111111
fun(FeatureName) ->
1112-
case rabbit_ff_registry:get(FeatureName) of
1113-
undefined ->
1114-
false;
1115-
FeatureProps ->
1116-
?IS_FEATURE_FLAG(FeatureProps)
1112+
FeatureProps = rabbit_ff_registry_wrapper:get(
1113+
FeatureName),
1114+
case FeatureProps of
1115+
undefined -> false;
1116+
_ -> ?IS_FEATURE_FLAG(FeatureProps)
11171117
end
11181118
end, FeatureNames),
11191119
FeatureNames2 = lists:foldl(

deps/rabbit/src/rabbit_ff_controller.erl

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1055,7 +1055,7 @@ collect_inventory_on_nodes(Nodes, Timeout) ->
10551055
Inventory0 = #{feature_flags => #{},
10561056
applications_per_node => #{},
10571057
states_per_node => #{}},
1058-
Rets = rpc_calls(Nodes, rabbit_ff_registry, inventory, [], Timeout),
1058+
Rets = inventory_rpcs(Nodes, Timeout),
10591059
maps:fold(
10601060
fun
10611061
(Node,
@@ -1081,6 +1081,46 @@ collect_inventory_on_nodes(Nodes, Timeout) ->
10811081
Error
10821082
end, {ok, Inventory0}, Rets).
10831083

1084+
inventory_rpcs(Nodes, Timeout) ->
1085+
%% We must use `rabbit_ff_registry_wrapper' if it is available to avoid
1086+
%% any deadlock with the Code server. If it is unavailable, we fall back
1087+
%% to `rabbit_ff_registry'.
1088+
%%
1089+
%% See commit aacfa1978e24bcacd8de7d06a7c3c5d9d8bd098e and pull request
1090+
%% #8155.
1091+
Rets0 = rpc_calls(
1092+
Nodes,
1093+
rabbit_ff_registry_wrapper, inventory, [], Timeout),
1094+
OlderNodes = maps:fold(
1095+
fun
1096+
(Node,
1097+
{error,
1098+
{exception, undef,
1099+
[{rabbit_ff_registry_wrapper,_ , _, _} | _]}},
1100+
Acc) ->
1101+
[Node | Acc];
1102+
(_Node, _Ret, Acc) ->
1103+
Acc
1104+
end, [], Rets0),
1105+
case OlderNodes of
1106+
[] ->
1107+
Rets0;
1108+
_ ->
1109+
?LOG_INFO(
1110+
"Feature flags: the following nodes run an older version of "
1111+
"RabbitMQ causing the "
1112+
"\"rabbit_ff_registry_wrapper:inventory[] undefined\" error "
1113+
"above: ~2p~n"
1114+
"Feature flags: falling back to another method for those "
1115+
"nodes; this may trigger a bug causing them to hang",
1116+
[lists:sort(OlderNodes)],
1117+
#{domain => ?RMQLOG_DOMAIN_FEAT_FLAGS}),
1118+
Rets1 = rpc_calls(
1119+
OlderNodes,
1120+
rabbit_ff_registry, inventory, [], Timeout),
1121+
maps:merge(Rets0, Rets1)
1122+
end.
1123+
10841124
merge_feature_flags(FeatureFlagsA, FeatureFlagsB) ->
10851125
FeatureFlags = maps:merge(FeatureFlagsA, FeatureFlagsB),
10861126
maps:map(

deps/rabbit/src/rabbit_ff_registry.erl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,11 +203,10 @@ is_registry_written_to_disk() ->
203203
Inventory :: rabbit_feature_flags:inventory().
204204

205205
inventory() ->
206-
_ = rabbit_ff_registry_factory:initialize_registry(),
207206
Inventory = #{applications => [],
208207
feature_flags => #{},
209208
states => #{}},
210-
?convince_dialyzer(?MODULE:inventory(), Inventory, Inventory).
209+
?convince_dialyzer(?MODULE:inventory(), init_required, Inventory).
211210

212211
always_return_true() ->
213212
%% This function is here to trick Dialyzer. We want some functions

deps/rabbit/src/rabbit_ff_registry_factory.erl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,9 @@ initialize_registry(NewSupportedFeatureFlags) ->
114114
RegistryInitialized = rabbit_ff_registry:is_registry_initialized(),
115115
FeatureStates = case RegistryInitialized of
116116
true ->
117-
CurrentFeatureStates = rabbit_ff_registry:states(),
118-
maps:merge(FeatureStates0, CurrentFeatureStates);
117+
maps:merge(
118+
FeatureStates0,
119+
rabbit_ff_registry_wrapper:states());
119120
false ->
120121
FeatureStates0
121122
end,
@@ -205,7 +206,7 @@ maybe_initialize_registry(NewSupportedFeatureFlags,
205206
%% We take the feature flags already registered.
206207
RegistryInitialized = rabbit_ff_registry:is_registry_initialized(),
207208
KnownFeatureFlags1 = case RegistryInitialized of
208-
true -> rabbit_ff_registry:list(all);
209+
true -> rabbit_ff_registry_wrapper:list(all);
209210
false -> #{}
210211
end,
211212

@@ -253,8 +254,9 @@ maybe_initialize_registry(NewSupportedFeatureFlags,
253254
not rabbit_feature_flags:does_enabled_feature_flags_list_file_exist(),
254255
FeatureStates0 = case RegistryInitialized of
255256
true ->
256-
maps:merge(rabbit_ff_registry:states(),
257-
NewFeatureStates);
257+
maps:merge(
258+
rabbit_ff_registry_wrapper:states(),
259+
NewFeatureStates);
258260
false ->
259261
NewFeatureStates
260262
end,
@@ -374,8 +376,8 @@ does_registry_need_refresh(AllFeatureFlags,
374376
%% Before proceeding with the actual
375377
%% (re)initialization, let's see if there are any
376378
%% changes.
377-
CurrentAllFeatureFlags = rabbit_ff_registry:list(all),
378-
CurrentFeatureStates = rabbit_ff_registry:states(),
379+
CurrentAllFeatureFlags = rabbit_ff_registry_wrapper:list(all),
380+
CurrentFeatureStates = rabbit_ff_registry_wrapper:states(),
379381
CurrentWrittenToDisk =
380382
rabbit_ff_registry:is_registry_written_to_disk(),
381383

0 commit comments

Comments
 (0)