File bsc1199431.patch of Package rabbitmq-server.26419

From 2d6964d89e9b32a4e8ba585e0a0923a1f90f0694 Mon Sep 17 00:00:00 2001
From: Michael Klishin <michael@clojurewerkz.org>
Date: Sat, 7 May 2022 21:33:09 +0400
Subject: [PATCH 1/2] Add a local replica of maintenance mode state table on
 boot

Some users were surprised by the current approach to
state table setup.

Per discussion in #4755
---
 deps/rabbit/src/rabbit_maintenance.erl | 36 +++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/deps/rabbit/src/rabbit_maintenance.erl b/deps/rabbit/src/rabbit_maintenance.erl
index 44faff385a2..fbcc0ab2ca6 100644
--- a/deps/rabbit/src/rabbit_maintenance.erl
+++ b/deps/rabbit/src/rabbit_maintenance.erl
@@ -29,7 +29,8 @@
     transfer_leadership_of_quorum_queues/1,
     transfer_leadership_of_classic_mirrored_queues/1,
     status_table_name/0,
-    status_table_definition/0
+    status_table_definition/0,
+    boot/0
 ]).
 
 -define(TABLE, rabbit_node_maintenance_states).
@@ -44,6 +45,39 @@
     maintenance_status/0
 ]).
 
+%%
+%% Boot
+%%
+
+-rabbit_boot_step({rabbit_maintenance_mode_state,
+    [{description, "initializes maintenance mode state"},
+        {mfa,         {?MODULE, boot, []}},
+        {requires,    networking}]}).
+
+boot() ->
+    case rabbit_feature_flags:is_enabled(?FEATURE_FLAG, non_blocking) of
+        true ->
+            TableName = status_table_name(),
+            rabbit_log:info(
+                "Creating table ~s for feature flag `~s`",
+                [TableName, ?FEATURE_FLAG]),
+            try
+                _ = rabbit_table:create(
+                    TableName,
+                    status_table_definition()),
+                _ = rabbit_table:ensure_table_copy(TableName, node())
+            catch throw:Reason  ->
+                rabbit_log:error(
+                    "Failed to create maintenance status table: ~p",
+                    [Reason])
+            end;
+        false ->
+            ok;
+        state_changing ->
+            %% feature flag migration will do the job for us
+            ok
+    end.
+
 %%
 %% API
 %%

From a633312450e7885ad66d0aec0b07ff4a8a0d028d Mon Sep 17 00:00:00 2001
From: Michael Klishin <michael@clojurewerkz.org>
Date: Sun, 8 May 2022 21:34:10 +0400
Subject: [PATCH 2/2] Maintenance mode state: don't force a local replica on
 boot

It breaks forced node removal in some tricky scenarios
because node schemas do not match, and Mnesia is sensitive to this.
---
 deps/rabbit/src/rabbit_maintenance.erl | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/deps/rabbit/src/rabbit_maintenance.erl b/deps/rabbit/src/rabbit_maintenance.erl
index fbcc0ab2ca6..09aaa7f9f70 100644
--- a/deps/rabbit/src/rabbit_maintenance.erl
+++ b/deps/rabbit/src/rabbit_maintenance.erl
@@ -64,8 +64,7 @@ boot() ->
             try
                 _ = rabbit_table:create(
                     TableName,
-                    status_table_definition()),
-                _ = rabbit_table:ensure_table_copy(TableName, node())
+                    status_table_definition())
             catch throw:Reason  ->
                 rabbit_log:error(
                     "Failed to create maintenance status table: ~p",
openSUSE Build Service is sponsored by