summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_core_ff.erl25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/rabbit_core_ff.erl b/src/rabbit_core_ff.erl
index 63aa9b30f1..a251def11c 100644
--- a/src/rabbit_core_ff.erl
+++ b/src/rabbit_core_ff.erl
@@ -10,7 +10,8 @@
-export([quorum_queue_migration/3,
implicit_default_bindings_migration/3,
virtual_host_metadata_migration/3,
- maintenance_mode_status_migration/3]).
+ maintenance_mode_status_migration/3,
+ user_limits_migration/3]).
-rabbit_feature_flag(
{quorum_queue,
@@ -42,6 +43,13 @@
migration_fun => {?MODULE, maintenance_mode_status_migration}
}}).
+-rabbit_feature_flag(
+ {user_limits,
+ #{desc => "Configure connection and channel limits for a user",
+ stability => stable,
+ migration_fun => {?MODULE, user_limits_migration}
+ }}).
+
%% -------------------------------------------------------------------
%% Quorum queues.
%% -------------------------------------------------------------------
@@ -141,3 +149,18 @@ maintenance_mode_status_migration(FeatureName, _FeatureProps, enable) ->
end;
maintenance_mode_status_migration(_FeatureName, _FeatureProps, is_enabled) ->
rabbit_table:exists(rabbit_maintenance:status_table_name()).
+
+%% -------------------------------------------------------------------
+%% User limits.
+%% -------------------------------------------------------------------
+
+user_limits_migration(_FeatureName, _FeatureProps, enable) ->
+ Tab = rabbit_user,
+ rabbit_table:wait([Tab], _Retry = true),
+ Fun = fun(Row) -> internal_user:upgrade_to(internal_user_v2, Row) end,
+ case mnesia:transform_table(Tab, Fun, internal_user:fields(internal_user_v2)) of
+ {atomic, ok} -> ok;
+ {aborted, Reason} -> {error, Reason}
+ end;
+user_limits_migration(_FeatureName, _FeatureProps, is_enabled) ->
+ mnesia:table_info(rabbit_user, attributes) =:= internal_user:fields(internal_user_v2).