From 64e7b230f0fabe39b778c6b4d3ebd7477ea26704 Mon Sep 17 00:00:00 2001 From: Iliia Khaprov Date: Wed, 26 Mar 2025 20:03:09 +0100 Subject: [PATCH 1/2] RMQ-1263: An attempt to make shovel status tuple handling backwards compatible (cherry picked from commit 4eda17bee276159cd4a3a1ee838230be010018ff) --- ...Q.CLI.Ctl.Commands.DeleteShovelCommand.erl | 32 +++++++++++-------- ....CLI.Ctl.Commands.RestartShovelCommand.erl | 26 ++++++++------- .../src/rabbit_shovel_mgmt_util.erl | 4 +++ 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl index 6c8a03006512..c4c59c5e7552 100644 --- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl +++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.DeleteShovelCommand.erl @@ -76,23 +76,27 @@ run([Name], #{node := Node, vhost := VHost}) -> undefined -> try_force_removing(Node, VHost, Name, ActingUser), {error, rabbit_data_coercion:to_binary(ErrMsg)}; - Match -> - {{_Name, _VHost}, _Type, {_State, Opts}, _Metrics, _Timestamp} = Match, - {_, HostingNode} = lists:keyfind(node, 1, Opts), - case rabbit_misc:rpc_call( - HostingNode, rabbit_shovel_util, delete_shovel, [VHost, Name, ActingUser]) of - {badrpc, _} = Error -> - Error; - {error, not_found} -> - try_force_removing(HostingNode, VHost, Name, ActingUser), - {error, rabbit_data_coercion:to_binary(ErrMsg)}; - ok -> - _ = try_clearing_runtime_parameter(Node, VHost, Name, ActingUser), - ok - end + {{_Name, _VHost}, _Type, {_State, Opts}, _Metrics, _Timestamp} -> + delete_shovel(ErrMsg, VHost, Name, ActingUser, Opts, Node); + {{_Name, _VHost}, _Type, {_State, Opts}, _Timestamp} -> + delete_shovel(ErrMsg, VHost, Name, ActingUser, Opts, Node) end end. +delete_shovel(ErrMsg, VHost, Name, ActingUser, Opts, Node) -> + {_, HostingNode} = lists:keyfind(node, 1, Opts), + case rabbit_misc:rpc_call( + HostingNode, rabbit_shovel_util, delete_shovel, [VHost, Name, ActingUser]) of + {badrpc, _} = Error -> + Error; + {error, not_found} -> + try_force_removing(HostingNode, VHost, Name, ActingUser), + {error, rabbit_data_coercion:to_binary(ErrMsg)}; + ok -> + _ = try_clearing_runtime_parameter(Node, VHost, Name, ActingUser), + ok + end. + switches() -> []. diff --git a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl index c8be462176cc..435e25e00868 100644 --- a/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl +++ b/deps/rabbitmq_shovel/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartShovelCommand.erl @@ -62,20 +62,24 @@ run([Name], #{node := Node, vhost := VHost}) -> case rabbit_shovel_status:find_matching_shovel(VHost, Name, Xs) of undefined -> {error, rabbit_data_coercion:to_binary(ErrMsg)}; - Match -> - {{_Name, _VHost}, _Type, {_State, Opts}, _Metrics, _Timestamp} = Match, - {_, HostingNode} = lists:keyfind(node, 1, Opts), - case rabbit_misc:rpc_call( - HostingNode, rabbit_shovel_util, restart_shovel, [VHost, Name]) of - {badrpc, _} = Error -> - Error; - {error, not_found} -> - {error, rabbit_data_coercion:to_binary(ErrMsg)}; - ok -> ok - end + {{_Name, _VHost}, _Type, {_State, Opts}, _Metrics, _Timestamp} -> + restart_shovel(ErrMsg, Name, VHost, Opts); + {{_Name, _VHost}, _Type, {_State, Opts}, _Timestamp} -> + restart_shovel(ErrMsg, Name, VHost, Opts) end end. +restart_shovel(ErrMsg, Name, VHost, Opts) -> + {_, HostingNode} = lists:keyfind(node, 1, Opts), + case rabbit_misc:rpc_call( + HostingNode, rabbit_shovel_util, restart_shovel, [VHost, Name]) of + {badrpc, _} = Error -> + Error; + {error, not_found} -> + {error, rabbit_data_coercion:to_binary(ErrMsg)}; + ok -> ok + end. + output(Output, _Opts) -> 'Elixir.RabbitMQ.CLI.DefaultOutput':output(Output). diff --git a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl index 0b05bda1e55e..bd3bd2c718c5 100644 --- a/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl +++ b/deps/rabbitmq_shovel_management/src/rabbit_shovel_mgmt_util.erl @@ -43,6 +43,10 @@ status(Node) -> end. format(Node, {Name, Type, Info, _Metrics, TS}) -> + [{node, Node}, {timestamp, format_ts(TS)}] ++ + format_name(Type, Name) ++ + format_info(Info); +format(Node, {Name, Type, Info, TS}) -> [{node, Node}, {timestamp, format_ts(TS)}] ++ format_name(Type, Name) ++ format_info(Info). From 5e613532c48669aaf221f5b5370824f3a6c8e232 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Wed, 26 Mar 2025 15:12:24 -0400 Subject: [PATCH 2/2] #13628 pass Dialyzer (cherry picked from commit 03526b51db3f386380ec7e3a8bb364d579a40636) --- deps/rabbitmq_shovel/src/rabbit_shovel_status.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deps/rabbitmq_shovel/src/rabbit_shovel_status.erl b/deps/rabbitmq_shovel/src/rabbit_shovel_status.erl index e8b5800680b0..c379b165eadc 100644 --- a/deps/rabbitmq_shovel/src/rabbit_shovel_status.erl +++ b/deps/rabbitmq_shovel/src/rabbit_shovel_status.erl @@ -45,7 +45,9 @@ pending := rabbit_types:option(non_neg_integer()), forwarded := rabbit_types:option(non_neg_integer()) } | #{}. --type status_tuple() :: {name(), type(), info(), metrics(), calendar:datetime()}. +-type status_tuple_41x() :: {name(), type(), info(), metrics(), calendar:datetime()}. +-type status_tuple_40x_and_older() :: {name(), type(), info(), calendar:datetime()}. +-type status_tuple() :: status_tuple_41x() | status_tuple_40x_and_older(). -export_type([info/0, blocked_status/0, shovel_status/0, metrics/0]).