Skip to content

Commit d2d6082

Browse files
committed
rabbit_feature_flags: Use non-blocking call in get_state/1
[Why] The previous implementation was using the blocking `is_enabled/1` API. This meant that if a feature flag was being enabled and the enable callback took time, the CLI's `list_feature_flag` command or any use of the management UI would block until the feature flag was enabled. [How] `get_state/1` now uses the non-blocking API. However it returns a now possible value: `state_changing`.
1 parent f90cb86 commit d2d6082

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

deps/rabbit/src/rabbit_feature_flags.erl

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -719,30 +719,38 @@ info() ->
719719
info(Options) when is_map(Options) ->
720720
rabbit_ff_extra:info(Options).
721721

722-
-spec get_state(feature_name()) -> enabled | disabled | unavailable.
722+
-spec get_state(feature_name()) -> enabled |
723+
state_changing |
724+
disabled |
725+
unavailable.
723726
%% @doc
724727
%% Returns the state of a feature flag.
725728
%%
726729
%% The possible states are:
727730
%% <ul>
728731
%% <li>`enabled': the feature flag is enabled.</li>
732+
%% <li>`state_changing': the feature flag is being enabled.</li>
729733
%% <li>`disabled': the feature flag is supported by all nodes in the
730734
%% cluster but currently disabled.</li>
731735
%% <li>`unavailable': the feature flag is unsupported by at least one
732736
%% node in the cluster and can not be enabled for now.</li>
733737
%% </ul>
734738
%%
735739
%% @param FeatureName The name of the feature flag to check.
736-
%% @returns `enabled', `disabled' or `unavailable'.
740+
%% @returns `enabled', `state_changing', `disabled' or `unavailable'.
737741

738742
get_state(FeatureName) when is_atom(FeatureName) ->
739-
IsEnabled = is_enabled(FeatureName),
743+
IsEnabled = is_enabled(FeatureName, non_blocking),
740744
case IsEnabled of
741-
true -> enabled;
742-
false -> case is_supported(FeatureName) of
743-
true -> disabled;
744-
false -> unavailable
745-
end
745+
true ->
746+
enabled;
747+
state_changing ->
748+
state_changing;
749+
false ->
750+
case is_supported(FeatureName) of
751+
true -> disabled;
752+
false -> unavailable
753+
end
746754
end.
747755

748756
-spec get_stability

deps/rabbit/src/rabbit_ff_extra.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ info(FeatureFlags, Options) ->
174174
{State, Color} = case State0 of
175175
enabled ->
176176
{"Enabled", Green};
177+
state_changing ->
178+
{"(Changing)", Yellow};
177179
disabled ->
178180
{"Disabled", Yellow};
179181
unavailable ->

0 commit comments

Comments
 (0)