From e41d766b290db1012bd96228055032302455fa4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Tue, 12 Nov 2024 16:41:37 +0100 Subject: [PATCH 1/3] rabbit_khepri: Ensure RabbitMQ is stopped before resetting with Khepri --- deps/rabbit/src/rabbit_khepri.erl | 26 ++++++++++++++++++++------ deps/rabbit/src/rabbit_ra_systems.erl | 1 + 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/deps/rabbit/src/rabbit_khepri.erl b/deps/rabbit/src/rabbit_khepri.erl index 3f2d2921c0..8b570429e4 100644 --- a/deps/rabbit/src/rabbit_khepri.erl +++ b/deps/rabbit/src/rabbit_khepri.erl @@ -585,16 +585,30 @@ remove_down_member(NodeToRemove) -> %% @private reset() -> - %% Rabbit should be stopped, but Khepri needs to be running. Restart it. - ok = setup(), - ok = khepri_cluster:reset(?RA_CLUSTER_NAME), - ok = khepri:stop(?RA_CLUSTER_NAME). + case rabbit:is_running() of + false -> + %% Rabbit should be stopped, but Khepri needs to be running. + %% Restart it. + ok = setup(), + ok = khepri_cluster:reset(?RA_CLUSTER_NAME), + ok = khepri:stop(?RA_CLUSTER_NAME); + true -> + throw({error, rabbitmq_unexpectedly_running}) + end. %% @private force_reset() -> - DataDir = maps:get(data_dir, ra_system:fetch(coordination)), - ok = rabbit_file:recursive_delete(filelib:wildcard(DataDir ++ "/*")). + case rabbit:is_running() of + false -> + ok = khepri:stop(?RA_CLUSTER_NAME), + DataDir = maps:get(data_dir, ra_system:fetch(coordination)), + ok = ra_system:ensure_ra_system_stopped(coordination), + ok = rabbit_file:recursive_delete( + filelib:wildcard(DataDir ++ "/*")); + true -> + throw({error, rabbitmq_unexpectedly_running}) + end. %% @private diff --git a/deps/rabbit/src/rabbit_ra_systems.erl b/deps/rabbit/src/rabbit_ra_systems.erl index 033c761325..f6680e1910 100644 --- a/deps/rabbit/src/rabbit_ra_systems.erl +++ b/deps/rabbit/src/rabbit_ra_systems.erl @@ -16,6 +16,7 @@ all_ra_systems/0, are_running/0, ensure_ra_system_started/1, + ensure_ra_system_stopped/1, ensure_started/0, ensure_stopped/0]). From 05717ccccf34a03dec57534f922bcde4d6199ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Tue, 12 Nov 2024 18:43:16 +0100 Subject: [PATCH 2/3] rabbit_khepri: Remove serial file during reset --- deps/rabbit/src/rabbit_khepri.erl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/deps/rabbit/src/rabbit_khepri.erl b/deps/rabbit/src/rabbit_khepri.erl index 8b570429e4..a70ef0c676 100644 --- a/deps/rabbit/src/rabbit_khepri.erl +++ b/deps/rabbit/src/rabbit_khepri.erl @@ -591,7 +591,10 @@ reset() -> %% Restart it. ok = setup(), ok = khepri_cluster:reset(?RA_CLUSTER_NAME), - ok = khepri:stop(?RA_CLUSTER_NAME); + ok = khepri:stop(?RA_CLUSTER_NAME), + + _ = file:delete(rabbit_guid:filename()), + ok; true -> throw({error, rabbitmq_unexpectedly_running}) end. @@ -605,7 +608,10 @@ force_reset() -> DataDir = maps:get(data_dir, ra_system:fetch(coordination)), ok = ra_system:ensure_ra_system_stopped(coordination), ok = rabbit_file:recursive_delete( - filelib:wildcard(DataDir ++ "/*")); + filelib:wildcard(DataDir ++ "/*")), + + _ = file:delete(rabbit_guid:filename()), + ok; true -> throw({error, rabbitmq_unexpectedly_running}) end. From 2938338182cbdf014bde9ac05c37db312a27d08a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Tue, 12 Nov 2024 17:18:29 +0100 Subject: [PATCH 3/3] rabbit_khepri: Do not hard-code `coordination`, use the constant instead --- deps/rabbit/src/rabbit_khepri.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps/rabbit/src/rabbit_khepri.erl b/deps/rabbit/src/rabbit_khepri.erl index a70ef0c676..efe11edde5 100644 --- a/deps/rabbit/src/rabbit_khepri.erl +++ b/deps/rabbit/src/rabbit_khepri.erl @@ -605,8 +605,8 @@ force_reset() -> case rabbit:is_running() of false -> ok = khepri:stop(?RA_CLUSTER_NAME), - DataDir = maps:get(data_dir, ra_system:fetch(coordination)), - ok = ra_system:ensure_ra_system_stopped(coordination), + DataDir = maps:get(data_dir, ra_system:fetch(?RA_SYSTEM)), + ok = rabbit_ra_systems:ensure_ra_system_stopped(?RA_SYSTEM), ok = rabbit_file:recursive_delete( filelib:wildcard(DataDir ++ "/*")),