Skip to content

Commit 4092c0e

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 f0515e2 commit 4092c0e

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
@@ -717,30 +717,38 @@ info() ->
717717
info(Options) when is_map(Options) ->
718718
rabbit_ff_extra:info(Options).
719719

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

736740
get_state(FeatureName) when is_atom(FeatureName) ->
737-
IsEnabled = is_enabled(FeatureName),
741+
IsEnabled = is_enabled(FeatureName, non_blocking),
738742
case IsEnabled of
739-
true -> enabled;
740-
false -> case is_supported(FeatureName) of
741-
true -> disabled;
742-
false -> unavailable
743-
end
743+
true ->
744+
enabled;
745+
state_changing ->
746+
state_changing;
747+
false ->
748+
case is_supported(FeatureName) of
749+
true -> disabled;
750+
false -> unavailable
751+
end
744752
end.
745753

746754
-spec get_stability

deps/rabbit/src/rabbit_ff_extra.erl

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

0 commit comments

Comments
 (0)