Trigger CI
Peer Discovery AWS Integration Test / Integration Test (push) Waiting to run Details

This commit is contained in:
Michal Kuratczyk 2025-07-16 00:32:20 +02:00
parent 4f3f4b085d
commit 02df90c490
No known key found for this signature in database
92 changed files with 582 additions and 611 deletions

View File

@ -158,7 +158,7 @@ handle_event(info, {TcpError, _Sock, Reason}, StateName, State)
handle_event(info, {TcpClosed, _}, StateName, State) handle_event(info, {TcpClosed, _}, StateName, State)
when TcpClosed == tcp_closed orelse TcpClosed == ssl_closed -> when TcpClosed == tcp_closed orelse TcpClosed == ssl_closed ->
?LOG_INFO("AMQP 1.0 connection socket was closed, connection state: '~ts'", ?LOG_INFO("AMQP 1.0 connection socket was closed, connection state: '~ts'",
[StateName]), [StateName]),
{stop, normal, socket_closed(State)}; {stop, normal, socket_closed(State)};
handle_event(info, {gun_down, WsPid, _Proto, Reason, _Streams}, StateName, handle_event(info, {gun_down, WsPid, _Proto, Reason, _Streams}, StateName,
#state{socket = {ws, WsPid, _StreamRef}} = State) -> #state{socket = {ws, WsPid, _StreamRef}} = State) ->

View File

@ -516,7 +516,7 @@ handle_info({bump_credit, Msg}, State) ->
%% @private %% @private
handle_info(timed_out_flushing_channel, State) -> handle_info(timed_out_flushing_channel, State) ->
?LOG_WARNING("Channel (~tp) closing: timed out flushing while " ?LOG_WARNING("Channel (~tp) closing: timed out flushing while "
"connection closing", [self()]), "connection closing", [self()]),
{stop, timed_out_flushing_channel, State}; {stop, timed_out_flushing_channel, State};
%% @private %% @private
handle_info({'DOWN', _, process, ReturnHandler, shutdown}, handle_info({'DOWN', _, process, ReturnHandler, shutdown},
@ -525,7 +525,7 @@ handle_info({'DOWN', _, process, ReturnHandler, shutdown},
handle_info({'DOWN', _, process, ReturnHandler, Reason}, handle_info({'DOWN', _, process, ReturnHandler, Reason},
State = #state{return_handler = {ReturnHandler, _Ref}}) -> State = #state{return_handler = {ReturnHandler, _Ref}}) ->
?LOG_WARNING("Channel (~tp): Unregistering return handler ~tp because it died. " ?LOG_WARNING("Channel (~tp): Unregistering return handler ~tp because it died. "
"Reason: ~tp", [self(), ReturnHandler, Reason]), "Reason: ~tp", [self(), ReturnHandler, Reason]),
{noreply, State#state{return_handler = none}}; {noreply, State#state{return_handler = none}};
%% @private %% @private
handle_info({'DOWN', _, process, ConfirmHandler, shutdown}, handle_info({'DOWN', _, process, ConfirmHandler, shutdown},
@ -534,7 +534,7 @@ handle_info({'DOWN', _, process, ConfirmHandler, shutdown},
handle_info({'DOWN', _, process, ConfirmHandler, Reason}, handle_info({'DOWN', _, process, ConfirmHandler, Reason},
State = #state{confirm_handler = {ConfirmHandler, _Ref}}) -> State = #state{confirm_handler = {ConfirmHandler, _Ref}}) ->
?LOG_WARNING("Channel (~tp): Unregistering confirm handler ~tp because it died. " ?LOG_WARNING("Channel (~tp): Unregistering confirm handler ~tp because it died. "
"Reason: ~tp", [self(), ConfirmHandler, Reason]), "Reason: ~tp", [self(), ConfirmHandler, Reason]),
{noreply, State#state{confirm_handler = none}}; {noreply, State#state{confirm_handler = none}};
%% @private %% @private
handle_info({'DOWN', _, process, FlowHandler, shutdown}, handle_info({'DOWN', _, process, FlowHandler, shutdown},
@ -543,7 +543,7 @@ handle_info({'DOWN', _, process, FlowHandler, shutdown},
handle_info({'DOWN', _, process, FlowHandler, Reason}, handle_info({'DOWN', _, process, FlowHandler, Reason},
State = #state{flow_handler = {FlowHandler, _Ref}}) -> State = #state{flow_handler = {FlowHandler, _Ref}}) ->
?LOG_WARNING("Channel (~tp): Unregistering flow handler ~tp because it died. " ?LOG_WARNING("Channel (~tp): Unregistering flow handler ~tp because it died. "
"Reason: ~tp", [self(), FlowHandler, Reason]), "Reason: ~tp", [self(), FlowHandler, Reason]),
{noreply, State#state{flow_handler = none}}; {noreply, State#state{flow_handler = none}};
handle_info({'DOWN', _, process, QPid, _Reason}, State) -> handle_info({'DOWN', _, process, QPid, _Reason}, State) ->
rabbit_amqqueue_common:notify_sent_queue_down(QPid), rabbit_amqqueue_common:notify_sent_queue_down(QPid),
@ -593,13 +593,13 @@ handle_method_to_server(Method, AmqpMsg, From, Sender, Flow,
From, Sender, Flow, State1)}; From, Sender, Flow, State1)};
{ok, none, BlockReply} -> {ok, none, BlockReply} ->
?LOG_WARNING("Channel (~tp): discarding method ~tp in cast.~n" ?LOG_WARNING("Channel (~tp): discarding method ~tp in cast.~n"
"Reason: ~tp", [self(), Method, BlockReply]), "Reason: ~tp", [self(), Method, BlockReply]),
{noreply, State}; {noreply, State};
{ok, _, BlockReply} -> {ok, _, BlockReply} ->
{reply, BlockReply, State}; {reply, BlockReply, State};
{{_, InvalidMethodMessage}, none, _} -> {{_, InvalidMethodMessage}, none, _} ->
?LOG_WARNING("Channel (~tp): ignoring cast of ~tp method. " ++ ?LOG_WARNING("Channel (~tp): ignoring cast of ~tp method. " ++
InvalidMethodMessage ++ "", [self(), Method]), InvalidMethodMessage ++ "", [self(), Method]),
{noreply, State}; {noreply, State};
{{InvalidMethodReply, _}, _, _} -> {{InvalidMethodReply, _}, _, _} ->
{reply, {error, InvalidMethodReply}, State} {reply, {error, InvalidMethodReply}, State}
@ -796,7 +796,7 @@ handle_method_from_server1(#'basic.ack'{} = BasicAck, none,
handle_method_from_server1(#'basic.nack'{} = BasicNack, none, handle_method_from_server1(#'basic.nack'{} = BasicNack, none,
#state{confirm_handler = none} = State) -> #state{confirm_handler = none} = State) ->
?LOG_WARNING("Channel (~tp): received ~tp but there is no " ?LOG_WARNING("Channel (~tp): received ~tp but there is no "
"confirm handler registered", [self(), BasicNack]), "confirm handler registered", [self(), BasicNack]),
{noreply, update_confirm_set(BasicNack, State)}; {noreply, update_confirm_set(BasicNack, State)};
handle_method_from_server1(#'basic.nack'{} = BasicNack, none, handle_method_from_server1(#'basic.nack'{} = BasicNack, none,
#state{confirm_handler = {CH, _Ref}} = State) -> #state{confirm_handler = {CH, _Ref}} = State) ->
@ -932,7 +932,7 @@ server_misbehaved(#amqp_error{} = AmqpError, State = #state{number = Number}) ->
handle_shutdown({server_misbehaved, AmqpError}, State); handle_shutdown({server_misbehaved, AmqpError}, State);
{_, Close} -> {_, Close} ->
?LOG_WARNING("Channel (~tp) flushing and closing due to soft " ?LOG_WARNING("Channel (~tp) flushing and closing due to soft "
"error caused by the server ~tp", [self(), AmqpError]), "error caused by the server ~tp", [self(), AmqpError]),
Self = self(), Self = self(),
spawn(fun () -> call(Self, Close) end), spawn(fun () -> call(Self, Close) end),
{noreply, State} {noreply, State}

View File

@ -429,7 +429,7 @@ maybe_update_call_timeout(BaseTimeout, CallTimeout)
maybe_update_call_timeout(BaseTimeout, CallTimeout) -> maybe_update_call_timeout(BaseTimeout, CallTimeout) ->
EffectiveSafeCallTimeout = amqp_util:safe_call_timeout(BaseTimeout), EffectiveSafeCallTimeout = amqp_util:safe_call_timeout(BaseTimeout),
?LOG_WARNING("AMQP 0-9-1 client call timeout was ~tp ms, is updated to a safe effective " ?LOG_WARNING("AMQP 0-9-1 client call timeout was ~tp ms, is updated to a safe effective "
"value of ~tp ms", [CallTimeout, EffectiveSafeCallTimeout]), "value of ~tp ms", [CallTimeout, EffectiveSafeCallTimeout]),
amqp_util:update_call_timeout(EffectiveSafeCallTimeout), amqp_util:update_call_timeout(EffectiveSafeCallTimeout),
ok. ok.

View File

@ -207,12 +207,12 @@ handle_cast({register_blocked_handler, HandlerPid}, State) ->
handle_info({'DOWN', _, process, BlockHandler, Reason}, handle_info({'DOWN', _, process, BlockHandler, Reason},
State = #state{block_handler = {BlockHandler, _Ref}}) -> State = #state{block_handler = {BlockHandler, _Ref}}) ->
?LOG_WARNING("Connection (~tp): Unregistering connection.{blocked,unblocked} handler ~tp because it died. " ?LOG_WARNING("Connection (~tp): Unregistering connection.{blocked,unblocked} handler ~tp because it died. "
"Reason: ~tp", [self(), BlockHandler, Reason]), "Reason: ~tp", [self(), BlockHandler, Reason]),
{noreply, State#state{block_handler = none}}; {noreply, State#state{block_handler = none}};
handle_info({'EXIT', BlockHandler, Reason}, handle_info({'EXIT', BlockHandler, Reason},
State = #state{block_handler = {BlockHandler, Ref}}) -> State = #state{block_handler = {BlockHandler, Ref}}) ->
?LOG_WARNING("Connection (~tp): Unregistering connection.{blocked,unblocked} handler ~tp because it died. " ?LOG_WARNING("Connection (~tp): Unregistering connection.{blocked,unblocked} handler ~tp because it died. "
"Reason: ~tp", [self(), BlockHandler, Reason]), "Reason: ~tp", [self(), BlockHandler, Reason]),
erlang:demonitor(Ref, [flush]), erlang:demonitor(Ref, [flush]),
{noreply, State#state{block_handler = none}}; {noreply, State#state{block_handler = none}};
%% propagate the exit to the module that will stop with a sensible reason logged %% propagate the exit to the module that will stop with a sensible reason logged
@ -318,7 +318,7 @@ internal_error(Pid, Reason, State) ->
server_initiated_close(Close, State) -> server_initiated_close(Close, State) ->
?LOG_WARNING("Connection (~tp) closing: received hard error ~tp " ?LOG_WARNING("Connection (~tp) closing: received hard error ~tp "
"from server", [self(), Close]), "from server", [self(), Close]),
set_closing_state(abrupt, #closing{reason = server_initiated_close, set_closing_state(abrupt, #closing{reason = server_initiated_close,
close = Close}, State). close = Close}, State).

View File

@ -53,7 +53,7 @@ maybe_add_verify1(Options) ->
Options; Options;
_ -> _ ->
?LOG_WARNING("Connection (~tp): certificate chain verification is not enabled for this TLS connection. " ?LOG_WARNING("Connection (~tp): certificate chain verification is not enabled for this TLS connection. "
"Please see https://rabbitmq.com/ssl.html for more information.", [self()]), "Please see https://rabbitmq.com/ssl.html for more information.", [self()]),
Options Options
end. end.

View File

@ -288,15 +288,15 @@ handle_call({start_child, ChildSpec}, _From,
Result = case maybe_start(Group, Overall, Delegate, ChildSpec) of Result = case maybe_start(Group, Overall, Delegate, ChildSpec) of
already_in_store -> already_in_store ->
?LOG_DEBUG("Mirrored supervisor: maybe_start for group ~tp," ?LOG_DEBUG("Mirrored supervisor: maybe_start for group ~tp,"
" overall ~p returned 'record already present'", [Group, Overall]), " overall ~p returned 'record already present'", [Group, Overall]),
{error, already_present}; {error, already_present};
{already_in_store, Pid} -> {already_in_store, Pid} ->
?LOG_DEBUG("Mirrored supervisor: maybe_start for group ~tp," ?LOG_DEBUG("Mirrored supervisor: maybe_start for group ~tp,"
" overall ~p returned 'already running: ~tp'", [Group, Overall, Pid]), " overall ~p returned 'already running: ~tp'", [Group, Overall, Pid]),
{error, {already_started, Pid}}; {error, {already_started, Pid}};
Else -> Else ->
?LOG_DEBUG("Mirrored supervisor: maybe_start for group ~tp," ?LOG_DEBUG("Mirrored supervisor: maybe_start for group ~tp,"
" overall ~tp returned ~tp", [Group, Overall, Else]), " overall ~tp returned ~tp", [Group, Overall, Else]),
Else Else
end, end,
mirrored_supervisor_locks:unlock(LockId), mirrored_supervisor_locks:unlock(LockId),
@ -384,16 +384,16 @@ maybe_start(Group, Overall, Delegate, ChildSpec) ->
try check_start(Group, Overall, Delegate, ChildSpec) of try check_start(Group, Overall, Delegate, ChildSpec) of
start -> start ->
?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp," ?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp,"
" overall ~tp returned 'do start'", [Group, Overall]), " overall ~tp returned 'do start'", [Group, Overall]),
start(Delegate, ChildSpec); start(Delegate, ChildSpec);
undefined -> undefined ->
?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp," ?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp,"
" overall ~tp returned 'undefined'", [Group, Overall]), " overall ~tp returned 'undefined'", [Group, Overall]),
already_in_store; already_in_store;
Pid -> Pid ->
?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp," ?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp,"
" overall ~tp returned 'already running (~tp)'", " overall ~tp returned 'already running (~tp)'",
[Group, Overall, Pid]), [Group, Overall, Pid]),
{already_in_store, Pid} {already_in_store, Pid}
catch catch
%% If we are torn down while in the transaction... %% If we are torn down while in the transaction...
@ -403,7 +403,7 @@ maybe_start(Group, Overall, Delegate, ChildSpec) ->
check_start(Group, Overall, Delegate, ChildSpec) -> check_start(Group, Overall, Delegate, ChildSpec) ->
Id = id(ChildSpec), Id = id(ChildSpec),
?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp, id: ~tp, " ?LOG_DEBUG("Mirrored supervisor: check_start for group ~tp, id: ~tp, "
"overall: ~tp", [Group, Id, Overall]), "overall: ~tp", [Group, Id, Overall]),
case rabbit_db_msup:create_or_update(Group, Overall, Delegate, ChildSpec, Id) of case rabbit_db_msup:create_or_update(Group, Overall, Delegate, ChildSpec, Id) of
Delegate0 when is_pid(Delegate0) -> Delegate0 when is_pid(Delegate0) ->
child(Delegate0, Id); child(Delegate0, Id);

View File

@ -358,8 +358,7 @@ run_prelaunch_second_phase() ->
case IsInitialPass of case IsInitialPass of
true -> true ->
?LOG_DEBUG(""), ?LOG_DEBUG(""),
?LOG_DEBUG( ?LOG_DEBUG("== Prelaunch phase [2/2] (initial pass) ==");
"== Prelaunch phase [2/2] (initial pass) ==");
false -> false ->
?LOG_DEBUG(""), ?LOG_DEBUG(""),
?LOG_DEBUG("== Prelaunch phase [2/2] =="), ?LOG_DEBUG("== Prelaunch phase [2/2] =="),
@ -522,10 +521,9 @@ stop_and_halt() ->
try try
stop() stop()
catch Type:Reason -> catch Type:Reason ->
?LOG_ERROR( ?LOG_ERROR("Error trying to stop ~ts: ~tp:~tp",
"Error trying to stop ~ts: ~tp:~tp", [product_name(), Type, Reason],
[product_name(), Type, Reason], #{domain => ?RMQLOG_DOMAIN_PRELAUNCH}),
#{domain => ?RMQLOG_DOMAIN_PRELAUNCH}),
error({Type, Reason}) error({Type, Reason})
after after
%% Enclose all the logging in the try block. %% Enclose all the logging in the try block.
@ -896,9 +894,8 @@ environment(App) ->
-spec rotate_logs() -> rabbit_types:ok_or_error(any()). -spec rotate_logs() -> rabbit_types:ok_or_error(any()).
rotate_logs() -> rotate_logs() ->
?LOG_ERROR( ?LOG_ERROR("Forcing log rotation is currently unsupported",
"Forcing log rotation is currently unsupported", #{domain => ?RMQLOG_DOMAIN_GLOBAL}),
#{domain => ?RMQLOG_DOMAIN_GLOBAL}),
{error, unsupported}. {error, unsupported}.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
@ -1179,7 +1176,7 @@ prevent_startup_if_node_was_reset() ->
true -> true ->
?LOG_ERROR("Node has already been initialized, but database appears empty. " ?LOG_ERROR("Node has already been initialized, but database appears empty. "
"This could indicate data loss or a split-brain scenario.", "This could indicate data loss or a split-brain scenario.",
#{domain => ?RMQLOG_DOMAIN_GLOBAL}), #{domain => ?RMQLOG_DOMAIN_GLOBAL}),
throw({error, cluster_already_initialized_but_tables_empty}); throw({error, cluster_already_initialized_but_tables_empty});
false -> false ->
?LOG_INFO("Node has already been initialized, proceeding with normal startup", ?LOG_INFO("Node has already been initialized, proceeding with normal startup",
@ -1189,7 +1186,7 @@ prevent_startup_if_node_was_reset() ->
false -> false ->
%% First time starting, create the marker file %% First time starting, create the marker file
?LOG_INFO("First node startup detected, creating initialization marker", ?LOG_INFO("First node startup detected, creating initialization marker",
#{domain => ?RMQLOG_DOMAIN_GLOBAL}), #{domain => ?RMQLOG_DOMAIN_GLOBAL}),
ok = filelib:ensure_dir(MarkerFile), ok = filelib:ensure_dir(MarkerFile),
ok = file:write_file(MarkerFile, <<>>, [exclusive]), % Empty file. ok = file:write_file(MarkerFile, <<>>, [exclusive]), % Empty file.
ok ok
@ -1689,7 +1686,7 @@ maybe_warn_low_fd_limit() ->
ok; ok;
L -> L ->
?LOG_WARNING("Available file handles: ~tp. " ?LOG_WARNING("Available file handles: ~tp. "
"Please consider increasing system limits", [L]) "Please consider increasing system limits", [L])
end. end.
%% Any configuration that %% Any configuration that

View File

@ -75,7 +75,7 @@ check_user_login(Username, AuthProps, Modules) ->
Type:Error:Stacktrace -> Type:Error:Stacktrace ->
?LOG_DEBUG("User '~ts' authentication failed with ~ts:~tp:~n~tp", [Username, Type, Error, Stacktrace]), ?LOG_DEBUG("User '~ts' authentication failed with ~ts:~tp:~n~tp", [Username, Type, Error, Stacktrace]),
{refused, Username, "User '~ts' authentication failed with internal error. " {refused, Username, "User '~ts' authentication failed with internal error. "
"Enable debug logs to see the real error.", [Username]} "Enable debug logs to see the real error.", [Username]}
end. end.

View File

@ -535,11 +535,11 @@ maybe_migrate(ByNode, MaxQueuesDesired, [N | Nodes]) ->
end; end;
[{_, _, true} | _] = All when length(All) > MaxQueuesDesired -> [{_, _, true} | _] = All when length(All) > MaxQueuesDesired ->
?LOG_WARNING("Node ~tp contains ~tp queues, but all have already migrated. " ?LOG_WARNING("Node ~tp contains ~tp queues, but all have already migrated. "
"Do nothing", [N, length(All)]), "Do nothing", [N, length(All)]),
maybe_migrate(ByNode, MaxQueuesDesired, Nodes); maybe_migrate(ByNode, MaxQueuesDesired, Nodes);
All -> All ->
?LOG_DEBUG("Node ~tp only contains ~tp queues, do nothing", ?LOG_DEBUG("Node ~tp only contains ~tp queues, do nothing",
[N, length(All)]), [N, length(All)]),
maybe_migrate(ByNode, MaxQueuesDesired, Nodes) maybe_migrate(ByNode, MaxQueuesDesired, Nodes)
end. end.
@ -1895,7 +1895,8 @@ internal_delete(Queue, ActingUser, Reason) ->
%% TODO this is used by `rabbit_mnesia:remove_node_if_mnesia_running` %% TODO this is used by `rabbit_mnesia:remove_node_if_mnesia_running`
%% Does it make any sense once mnesia is not used/removed? %% Does it make any sense once mnesia is not used/removed?
forget_all_durable(Node) -> forget_all_durable(Node) ->
?LOG_INFO("Will remove all classic queues from node ~ts. The node is likely being removed from the cluster.", [Node]), ?LOG_INFO("Will remove all classic queues from node ~ts. The node is likely being removed from the cluster.",
[Node]),
UpdateFun = fun(Q) -> UpdateFun = fun(Q) ->
forget_node_for_queue(Q) forget_node_for_queue(Q)
end, end,
@ -1961,9 +1962,9 @@ on_node_down(Node) ->
%% restarts - a time that the cluster is very likely to have a %% restarts - a time that the cluster is very likely to have a
%% majority - to ensure these records are deleted. %% majority - to ensure these records are deleted.
?LOG_WARNING("transient queues for node '~ts' could not be " ?LOG_WARNING("transient queues for node '~ts' could not be "
"deleted because of a timeout. These queues " "deleted because of a timeout. These queues "
"will be removed when node '~ts' restarts or " "will be removed when node '~ts' restarts or "
"is removed from the cluster.", [Node, Node]), "is removed from the cluster.", [Node, Node]),
ok ok
end. end.

View File

@ -472,8 +472,8 @@ notify_user_tags_set(Username, ConvertedTags, ActingUser) ->
set_permissions(Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm, ActingUser) -> set_permissions(Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm, ActingUser) ->
?LOG_DEBUG("Asked to set permissions for user " ?LOG_DEBUG("Asked to set permissions for user "
"'~ts' in virtual host '~ts' to '~ts', '~ts', '~ts'", "'~ts' in virtual host '~ts' to '~ts', '~ts', '~ts'",
[Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm]), [Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm]),
_ = lists:map( _ = lists:map(
fun (RegexpBin) -> fun (RegexpBin) ->
Regexp = binary_to_list(RegexpBin), Regexp = binary_to_list(RegexpBin),
@ -481,8 +481,8 @@ set_permissions(Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm, Actin
{ok, _} -> ok; {ok, _} -> ok;
{error, Reason} -> {error, Reason} ->
?LOG_WARNING("Failed to set permissions for user '~ts' in virtual host '~ts': " ?LOG_WARNING("Failed to set permissions for user '~ts' in virtual host '~ts': "
"regular expression '~ts' is invalid", "regular expression '~ts' is invalid",
[Username, VirtualHost, RegexpBin]), [Username, VirtualHost, RegexpBin]),
throw({error, {invalid_regexp, Regexp, Reason}}) throw({error, {invalid_regexp, Regexp, Reason}})
end end
end, [ConfigurePerm, WritePerm, ReadPerm]), end, [ConfigurePerm, WritePerm, ReadPerm]),
@ -497,8 +497,8 @@ set_permissions(Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm, Actin
read = ReadPerm}}, read = ReadPerm}},
R = rabbit_db_user:set_user_permissions(UserPermission), R = rabbit_db_user:set_user_permissions(UserPermission),
?LOG_INFO("Successfully set permissions for user " ?LOG_INFO("Successfully set permissions for user "
"'~ts' in virtual host '~ts' to '~ts', '~ts', '~ts'", "'~ts' in virtual host '~ts' to '~ts', '~ts', '~ts'",
[Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm]), [Username, VirtualHost, ConfigurePerm, WritePerm, ReadPerm]),
rabbit_event:notify(permission_created, [{user, Username}, rabbit_event:notify(permission_created, [{user, Username},
{vhost, VirtualHost}, {vhost, VirtualHost},
{configure, ConfigurePerm}, {configure, ConfigurePerm},
@ -579,8 +579,8 @@ set_permissions_globally(Username, ConfigurePerm, WritePerm, ReadPerm, ActingUse
set_topic_permissions(Username, VirtualHost, Exchange, WritePerm, ReadPerm, ActingUser) -> set_topic_permissions(Username, VirtualHost, Exchange, WritePerm, ReadPerm, ActingUser) ->
?LOG_DEBUG("Asked to set topic permissions on exchange '~ts' for " ?LOG_DEBUG("Asked to set topic permissions on exchange '~ts' for "
"user '~ts' in virtual host '~ts' to '~ts', '~ts'", "user '~ts' in virtual host '~ts' to '~ts', '~ts'",
[Exchange, Username, VirtualHost, WritePerm, ReadPerm]), [Exchange, Username, VirtualHost, WritePerm, ReadPerm]),
WritePermRegex = rabbit_data_coercion:to_binary(WritePerm), WritePermRegex = rabbit_data_coercion:to_binary(WritePerm),
ReadPermRegex = rabbit_data_coercion:to_binary(ReadPerm), ReadPermRegex = rabbit_data_coercion:to_binary(ReadPerm),
lists:foreach( lists:foreach(
@ -589,8 +589,8 @@ set_topic_permissions(Username, VirtualHost, Exchange, WritePerm, ReadPerm, Acti
{ok, _} -> ok; {ok, _} -> ok;
{error, Reason} -> {error, Reason} ->
?LOG_WARNING("Failed to set topic permissions on exchange '~ts' for user " ?LOG_WARNING("Failed to set topic permissions on exchange '~ts' for user "
"'~ts' in virtual host '~ts': regular expression '~ts' is invalid", "'~ts' in virtual host '~ts': regular expression '~ts' is invalid",
[Exchange, Username, VirtualHost, RegexpBin]), [Exchange, Username, VirtualHost, RegexpBin]),
throw({error, {invalid_regexp, RegexpBin, Reason}}) throw({error, {invalid_regexp, RegexpBin, Reason}})
end end
end, [WritePerm, ReadPerm]), end, [WritePerm, ReadPerm]),
@ -609,8 +609,8 @@ set_topic_permissions(Username, VirtualHost, Exchange, WritePerm, ReadPerm, Acti
}, },
R = rabbit_db_user:set_topic_permissions(TopicPermission), R = rabbit_db_user:set_topic_permissions(TopicPermission),
?LOG_INFO("Successfully set topic permissions on exchange '~ts' for " ?LOG_INFO("Successfully set topic permissions on exchange '~ts' for "
"user '~ts' in virtual host '~ts' to '~ts', '~ts'", "user '~ts' in virtual host '~ts' to '~ts', '~ts'",
[Exchange, Username, VirtualHost, WritePerm, ReadPerm]), [Exchange, Username, VirtualHost, WritePerm, ReadPerm]),
rabbit_event:notify(topic_permission_created, [ rabbit_event:notify(topic_permission_created, [
{user, Username}, {user, Username},
{vhost, VirtualHost}, {vhost, VirtualHost},

View File

@ -195,7 +195,7 @@ node_down(Node, _State) ->
%% we go back to a not healing state so the node is able to recover. %% we go back to a not healing state so the node is able to recover.
process_down({'EXIT', Pid, Reason}, {restarting, Pid}) when Reason =/= normal -> process_down({'EXIT', Pid, Reason}, {restarting, Pid}) when Reason =/= normal ->
?LOG_INFO("Autoheal: aborting - the process responsible for restarting the " ?LOG_INFO("Autoheal: aborting - the process responsible for restarting the "
"node terminated with reason: ~tp", [Reason]), "node terminated with reason: ~tp", [Reason]),
not_healing; not_healing;
process_down(_, State) -> process_down(_, State) ->
@ -215,10 +215,10 @@ handle_msg({request_start, Node},
{ok, AllPartitions} -> {ok, AllPartitions} ->
{Winner, Losers} = make_decision(AllPartitions), {Winner, Losers} = make_decision(AllPartitions),
?LOG_INFO("Autoheal decision~n" ?LOG_INFO("Autoheal decision~n"
" * Partitions: ~tp~n" " * Partitions: ~tp~n"
" * Winner: ~tp~n" " * Winner: ~tp~n"
" * Losers: ~tp", " * Losers: ~tp",
[AllPartitions, Winner, Losers]), [AllPartitions, Winner, Losers]),
case node() =:= Winner of case node() =:= Winner of
true -> handle_msg({become_winner, Losers}, true -> handle_msg({become_winner, Losers},
not_healing, Partitions); not_healing, Partitions);
@ -230,7 +230,7 @@ handle_msg({request_start, Node},
handle_msg({request_start, Node}, handle_msg({request_start, Node},
State, _Partitions) -> State, _Partitions) ->
?LOG_INFO("Autoheal request received from ~tp when healing; " ?LOG_INFO("Autoheal request received from ~tp when healing; "
"ignoring", [Node]), "ignoring", [Node]),
State; State;
handle_msg({become_winner, Losers}, handle_msg({become_winner, Losers},
@ -244,7 +244,7 @@ handle_msg({become_winner, Losers},
%% The leader has aborted the healing, might have seen us down but %% The leader has aborted the healing, might have seen us down but
%% we didn't see the same. Let's try again as it is the same partition. %% we didn't see the same. Let's try again as it is the same partition.
?LOG_INFO("Autoheal: I am the winner and received a duplicated " ?LOG_INFO("Autoheal: I am the winner and received a duplicated "
"request, waiting again for ~tp to stop", [Losers]), "request, waiting again for ~tp to stop", [Losers]),
stop_partition(Losers); stop_partition(Losers);
handle_msg({become_winner, _}, handle_msg({become_winner, _},
@ -252,7 +252,7 @@ handle_msg({become_winner, _},
%% Something has happened to the leader, it might have seen us down but we %% Something has happened to the leader, it might have seen us down but we
%% are still alive. Partitions have changed, cannot continue. %% are still alive. Partitions have changed, cannot continue.
?LOG_INFO("Autoheal: I am the winner and received another healing " ?LOG_INFO("Autoheal: I am the winner and received another healing "
"request, partitions have changed to ~tp. Aborting ", [Losers]), "request, partitions have changed to ~tp. Aborting ", [Losers]),
winner_finish(Losers), winner_finish(Losers),
not_healing; not_healing;
@ -276,7 +276,7 @@ handle_msg({winner_is, Winner}, State = {winner_waiting, _OutstandingStops, _Not
handle_msg(Request, {restarting, Pid} = St, _Partitions) -> handle_msg(Request, {restarting, Pid} = St, _Partitions) ->
%% ignore, we can contribute no further %% ignore, we can contribute no further
?LOG_INFO("Autoheal: Received the request ~tp while waiting for ~tp " ?LOG_INFO("Autoheal: Received the request ~tp while waiting for ~tp "
"to restart the node. Ignoring it ", [Request, Pid]), "to restart the node. Ignoring it ", [Request, Pid]),
St; St;
handle_msg(report_autoheal_status, not_healing, _Partitions) -> handle_msg(report_autoheal_status, not_healing, _Partitions) ->
@ -313,7 +313,7 @@ handle_msg({autoheal_finished, Winner}, not_healing, _Partitions) ->
%% transitioned to not_healing. However, the winner was still able %% transitioned to not_healing. However, the winner was still able
%% to finish. Let it pass. %% to finish. Let it pass.
?LOG_INFO("Autoheal finished according to winner ~tp." ?LOG_INFO("Autoheal finished according to winner ~tp."
" Unexpected, I might have previously seen the winner down", [Winner]), " Unexpected, I might have previously seen the winner down", [Winner]),
not_healing. not_healing.
%%---------------------------------------------------------------------------- %%----------------------------------------------------------------------------
@ -366,7 +366,7 @@ wait_for_supervisors(Monitors) ->
60000 -> 60000 ->
AliveLosers = [Node || {_, Node} <- pmon:monitored(Monitors)], AliveLosers = [Node || {_, Node} <- pmon:monitored(Monitors)],
?LOG_INFO("Autoheal: mnesia in nodes ~tp is still up, sending " ?LOG_INFO("Autoheal: mnesia in nodes ~tp is still up, sending "
"winner notification again to these ", [AliveLosers]), "winner notification again to these ", [AliveLosers]),
_ = [send(L, {winner_is, node()}) || L <- AliveLosers], _ = [send(L, {winner_is, node()}) || L <- AliveLosers],
wait_for_mnesia_shutdown(AliveLosers) wait_for_mnesia_shutdown(AliveLosers)
end end

View File

@ -49,11 +49,11 @@ find_steps(Apps) ->
run_step(Attributes, AttributeName) -> run_step(Attributes, AttributeName) ->
_ = [begin _ = [begin
?LOG_DEBUG("Applying MFA: M = ~ts, F = ~ts, A = ~tp", ?LOG_DEBUG("Applying MFA: M = ~ts, F = ~ts, A = ~tp",
[M, F, A]), [M, F, A]),
case apply(M,F,A) of case apply(M,F,A) of
ok -> ok ->
?LOG_DEBUG("Finished MFA: M = ~ts, F = ~ts, A = ~tp", ?LOG_DEBUG("Finished MFA: M = ~ts, F = ~ts, A = ~tp",
[M, F, A]); [M, F, A]);
{error, Reason} -> exit({error, Reason}) {error, Reason} -> exit({error, Reason})
end end
end end

View File

@ -185,8 +185,8 @@ delete(Q0, IfUnused, IfEmpty, ActingUser) when ?amqqueue_is_classic(Q0) ->
{error, not_empty}; {error, not_empty};
false -> false ->
?LOG_WARNING("Queue ~ts in vhost ~ts is down. " ?LOG_WARNING("Queue ~ts in vhost ~ts is down. "
"Forcing queue deletion.", "Forcing queue deletion.",
[Name, Vhost]), [Name, Vhost]),
case delete_crashed_internal(Q, ActingUser) of case delete_crashed_internal(Q, ActingUser) of
ok -> ok ->
{ok, 0}; {ok, 0};

View File

@ -257,8 +257,8 @@ recover(#resource{ virtual_host = VHost, name = QueueName } = Name, Terms,
ContainsCheckFun, OnSyncFun, OnSyncMsgFun, ContainsCheckFun, OnSyncFun, OnSyncMsgFun,
CountersRef, Context), CountersRef, Context),
?LOG_WARNING("Queue ~ts in vhost ~ts dropped ~b/~b/~b persistent messages " ?LOG_WARNING("Queue ~ts in vhost ~ts dropped ~b/~b/~b persistent messages "
"and ~b transient messages after unclean shutdown", "and ~b transient messages after unclean shutdown",
[QueueName, VHost, [QueueName, VHost,
counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_VHOST), counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_VHOST),
counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_QUEUE), counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_PER_QUEUE),
counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_OTHER), counters:get(CountersRef, ?RECOVER_DROPPED_PERSISTENT_OTHER),
@ -331,7 +331,7 @@ recover_segments(State0, ContainsCheckFun, StoreState0, CountersRef, [Segment|Ta
%% We cannot recover this file. %% We cannot recover this file.
_ -> _ ->
?LOG_WARNING("Deleting invalid v2 segment file ~ts (file has invalid header)", ?LOG_WARNING("Deleting invalid v2 segment file ~ts (file has invalid header)",
[SegmentFile]), [SegmentFile]),
ok = file:close(Fd), ok = file:close(Fd),
_ = prim_file:delete(SegmentFile), _ = prim_file:delete(SegmentFile),
StoreState = rabbit_classic_queue_store_v2:delete_segments([Segment], StoreState0), StoreState = rabbit_classic_queue_store_v2:delete_segments([Segment], StoreState0),

View File

@ -224,9 +224,9 @@ join(RemoteNode, NodeType)
%% Attempt to leave the RemoteNode cluster, the discovery cluster, %% Attempt to leave the RemoteNode cluster, the discovery cluster,
%% and simply retry the operation. %% and simply retry the operation.
?LOG_INFO("Mnesia: node ~tp thinks it's clustered " ?LOG_INFO("Mnesia: node ~tp thinks it's clustered "
"with node ~tp, but ~tp disagrees. ~tp will ask " "with node ~tp, but ~tp disagrees. ~tp will ask "
"to leave the cluster and try again.", "to leave the cluster and try again.",
[RemoteNode, node(), node(), node()]), [RemoteNode, node(), node(), node()]),
ok = rabbit_mnesia:leave_then_rediscover_cluster(RemoteNode), ok = rabbit_mnesia:leave_then_rediscover_cluster(RemoteNode),
join(RemoteNode, NodeType) join(RemoteNode, NodeType)
end; end;

View File

@ -343,7 +343,7 @@ count(VHostName) ->
list_for_count(VHostName) list_for_count(VHostName)
catch _:Err -> catch _:Err ->
?LOG_ERROR("Failed to fetch number of queues in vhost ~p:~n~p", ?LOG_ERROR("Failed to fetch number of queues in vhost ~p:~n~p",
[VHostName, Err]), [VHostName, Err]),
0 0
end. end.

View File

@ -469,8 +469,8 @@ should_skip_if_unchanged() ->
log_an_error_about_orphaned_objects() -> log_an_error_about_orphaned_objects() ->
?LOG_ERROR("Definitions import: some queues, exchanges or bindings in the definition file " ?LOG_ERROR("Definitions import: some queues, exchanges or bindings in the definition file "
"are missing the virtual host field. Such files are produced when definitions of " "are missing the virtual host field. Such files are produced when definitions of "
"a single virtual host are exported. They cannot be used to import definitions at boot time"). "a single virtual host are exported. They cannot be used to import definitions at boot time").
-spec apply_defs(Map :: #{atom() => any()}, ActingUser :: rabbit_types:username()) -> 'ok' | {error, term()}. -spec apply_defs(Map :: #{atom() => any()}, ActingUser :: rabbit_types:username()) -> 'ok' | {error, term()}.
@ -526,8 +526,8 @@ apply_defs(Map, ActingUser, SuccessFun) when is_function(SuccessFun) ->
fun() -> fun() ->
?LOG_INFO("There are fewer than target cluster size (~b) nodes online," ?LOG_INFO("There are fewer than target cluster size (~b) nodes online,"
" skipping queue and binding import from definitions", " skipping queue and binding import from definitions",
[rabbit_nodes:target_cluster_size_hint()]) [rabbit_nodes:target_cluster_size_hint()])
end end
), ),
@ -564,8 +564,8 @@ apply_defs(Map, ActingUser, SuccessFun, VHost) when is_function(SuccessFun); is_
fun() -> fun() ->
?LOG_INFO("There are fewer than target cluster size (~b) nodes online," ?LOG_INFO("There are fewer than target cluster size (~b) nodes online,"
" skipping queue and binding import from definitions", " skipping queue and binding import from definitions",
[rabbit_nodes:target_cluster_size_hint()]) [rabbit_nodes:target_cluster_size_hint()])
end end
), ),
@ -827,11 +827,11 @@ add_queue_int(_Queue, R = #resource{kind = queue,
name = <<"amq.", _/binary>>}, ActingUser) -> name = <<"amq.", _/binary>>}, ActingUser) ->
Name = R#resource.name, Name = R#resource.name,
?LOG_WARNING("Skipping import of a queue whose name begins with 'amq.', " ?LOG_WARNING("Skipping import of a queue whose name begins with 'amq.', "
"name: ~ts, acting user: ~ts", [Name, ActingUser]); "name: ~ts, acting user: ~ts", [Name, ActingUser]);
add_queue_int(_Queue, R = #resource{kind = queue, virtual_host = undefined}, ActingUser) -> add_queue_int(_Queue, R = #resource{kind = queue, virtual_host = undefined}, ActingUser) ->
Name = R#resource.name, Name = R#resource.name,
?LOG_WARNING("Skipping import of a queue with an unset virtual host field, " ?LOG_WARNING("Skipping import of a queue with an unset virtual host field, "
"name: ~ts, acting user: ~ts", [Name, ActingUser]); "name: ~ts, acting user: ~ts", [Name, ActingUser]);
add_queue_int(Queue, Name = #resource{virtual_host = VHostName}, ActingUser) -> add_queue_int(Queue, Name = #resource{virtual_host = VHostName}, ActingUser) ->
case rabbit_amqqueue:exists(Name) of case rabbit_amqqueue:exists(Name) of
true -> true ->
@ -868,7 +868,7 @@ add_exchange_int(_Exchange, R = #resource{kind = exchange,
name = <<"amq.", _/binary>>}, ActingUser) -> name = <<"amq.", _/binary>>}, ActingUser) ->
Name = R#resource.name, Name = R#resource.name,
?LOG_WARNING("Skipping import of an exchange whose name begins with 'amq.', " ?LOG_WARNING("Skipping import of an exchange whose name begins with 'amq.', "
"name: ~ts, acting user: ~ts", [Name, ActingUser]); "name: ~ts, acting user: ~ts", [Name, ActingUser]);
add_exchange_int(Exchange, Name, ActingUser) -> add_exchange_int(Exchange, Name, ActingUser) ->
case rabbit_exchange:exists(Name) of case rabbit_exchange:exists(Name) of
true -> true ->

View File

@ -62,7 +62,7 @@ load_with_hashing(Proplist, PreviousHash, Algo) ->
URL = pget(url, Proplist), URL = pget(url, Proplist),
?LOG_INFO("Applying definitions from a remote URL"), ?LOG_INFO("Applying definitions from a remote URL"),
?LOG_DEBUG("Loading definitions with content hashing enabled, HTTPS URL: ~ts, previous hash value: ~ts", ?LOG_DEBUG("Loading definitions with content hashing enabled, HTTPS URL: ~ts, previous hash value: ~ts",
[URL, rabbit_misc:hexify(PreviousHash)]), [URL, rabbit_misc:hexify(PreviousHash)]),
TLSOptions = tls_options_or_default(Proplist), TLSOptions = tls_options_or_default(Proplist),
HTTPOptions = http_options(TLSOptions), HTTPOptions = http_options(TLSOptions),

View File

@ -96,8 +96,8 @@ load_with_hashing(IsDir, Path, PreviousHash, Algo) when is_boolean(IsDir) ->
end; end;
false -> false ->
?LOG_ERROR("Definitions file at path ~p failed validation. The file must be a valid JSON document " ?LOG_ERROR("Definitions file at path ~p failed validation. The file must be a valid JSON document "
"and all virtual host-scoped resources must have a virtual host field to be set. " "and all virtual host-scoped resources must have a virtual host field to be set. "
"Definition files exported for a single virtual host CANNOT be imported at boot time", [Path]), "Definition files exported for a single virtual host CANNOT be imported at boot time", [Path]),
{error, not_json} {error, not_json}
end end
end. end.

View File

@ -149,7 +149,7 @@ init([Limit]) ->
handle_call({set_disk_free_limit, _}, _From, #state{enabled = false} = State) -> handle_call({set_disk_free_limit, _}, _From, #state{enabled = false} = State) ->
?LOG_INFO("Cannot set disk free limit: " ?LOG_INFO("Cannot set disk free limit: "
"disabled disk free space monitoring", []), "disabled disk free space monitoring", []),
{reply, ok, State}; {reply, ok, State};
handle_call({set_disk_free_limit, Limit}, _From, State) -> handle_call({set_disk_free_limit, Limit}, _From, State) ->
@ -313,8 +313,8 @@ get_disk_free(Dir, {win32, _}, not_used) ->
case win32_get_drive_letter(Dir) of case win32_get_drive_letter(Dir) of
error -> error ->
?LOG_WARNING("Expected the mnesia directory absolute " ?LOG_WARNING("Expected the mnesia directory absolute "
"path to start with a drive letter like " "path to start with a drive letter like "
"'C:'. The path is: '~tp'", [Dir]), "'C:'. The path is: '~tp'", [Dir]),
{ok, Free} = win32_get_disk_free_dir(Dir), {ok, Free} = win32_get_disk_free_dir(Dir),
Free; Free;
DriveLetter -> DriveLetter ->
@ -444,21 +444,21 @@ enable_handle_disk_free(DiskFree, State) when is_integer(DiskFree) ->
enable_handle_total_memory(catch vm_memory_monitor:get_total_memory(), DiskFree, State); enable_handle_total_memory(catch vm_memory_monitor:get_total_memory(), DiskFree, State);
enable_handle_disk_free(Error, #state{interval = Interval, retries = Retries} = State) -> enable_handle_disk_free(Error, #state{interval = Interval, retries = Retries} = State) ->
?LOG_WARNING("Free disk space monitor encountered an error " ?LOG_WARNING("Free disk space monitor encountered an error "
"(e.g. failed to parse output from OS tools). " "(e.g. failed to parse output from OS tools). "
"Retries left: ~b Error:~n~tp", "Retries left: ~b Error:~n~tp",
[Retries, Error]), [Retries, Error]),
erlang:send_after(Interval, self(), try_enable), erlang:send_after(Interval, self(), try_enable),
State#state{enabled = false}. State#state{enabled = false}.
enable_handle_total_memory(TotalMemory, DiskFree, #state{limit = Limit} = State) when is_integer(TotalMemory) -> enable_handle_total_memory(TotalMemory, DiskFree, #state{limit = Limit} = State) when is_integer(TotalMemory) ->
?LOG_INFO("Enabling free disk space monitoring " ?LOG_INFO("Enabling free disk space monitoring "
"(disk free space: ~b, total memory: ~b)", [DiskFree, TotalMemory]), "(disk free space: ~b, total memory: ~b)", [DiskFree, TotalMemory]),
start_timer(set_disk_limits(State, Limit)); start_timer(set_disk_limits(State, Limit));
enable_handle_total_memory(Error, _DiskFree, #state{interval = Interval, retries = Retries} = State) -> enable_handle_total_memory(Error, _DiskFree, #state{interval = Interval, retries = Retries} = State) ->
?LOG_WARNING("Free disk space monitor encountered an error " ?LOG_WARNING("Free disk space monitor encountered an error "
"retrieving total memory. " "retrieving total memory. "
"Retries left: ~b Error:~n~tp", "Retries left: ~b Error:~n~tp",
[Retries, Error]), [Retries, Error]),
erlang:send_after(Interval, self(), try_enable), erlang:send_after(Interval, self(), try_enable),
State#state{enabled = false}. State#state{enabled = false}.

View File

@ -137,7 +137,7 @@ declare(XName, Type, Durable, AutoDelete, Internal, Args, Username) ->
end; end;
_ -> _ ->
?LOG_WARNING("ignoring exchange.declare for exchange ~tp, ?LOG_WARNING("ignoring exchange.declare for exchange ~tp,
exchange.delete in progress~n.", [XName]), exchange.delete in progress~n.", [XName]),
{ok, X} {ok, X}
end. end.

View File

@ -1180,8 +1180,8 @@ eval_gc(RaAux, MacState,
garbage_collect(), garbage_collect(),
{memory, MemAfter} = erlang:process_info(self(), memory), {memory, MemAfter} = erlang:process_info(self(), memory),
?LOG_DEBUG("~ts: full GC sweep complete. " ?LOG_DEBUG("~ts: full GC sweep complete. "
"Process memory changed from ~.2fMB to ~.2fMB.", "Process memory changed from ~.2fMB to ~.2fMB.",
[rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}}; AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}};
_ -> _ ->
AuxState AuxState
@ -1197,8 +1197,8 @@ force_eval_gc(RaAux,
garbage_collect(), garbage_collect(),
{memory, MemAfter} = erlang:process_info(self(), memory), {memory, MemAfter} = erlang:process_info(self(), memory),
?LOG_DEBUG("~ts: full GC sweep complete. " ?LOG_DEBUG("~ts: full GC sweep complete. "
"Process memory changed from ~.2fMB to ~.2fMB.", "Process memory changed from ~.2fMB to ~.2fMB.",
[rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}}; AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}};
false -> false ->
AuxState AuxState

View File

@ -147,13 +147,13 @@ enqueue(QName, Correlation, Msg,
{reject_publish, State0}; {reject_publish, State0};
{error, {shutdown, delete}} -> {error, {shutdown, delete}} ->
?LOG_DEBUG("~ts: QQ ~ts tried to register enqueuer during delete shutdown", ?LOG_DEBUG("~ts: QQ ~ts tried to register enqueuer during delete shutdown",
[?MODULE, rabbit_misc:rs(QName)]), [?MODULE, rabbit_misc:rs(QName)]),
{reject_publish, State0}; {reject_publish, State0};
{timeout, _} -> {timeout, _} ->
{reject_publish, State0}; {reject_publish, State0};
Err -> Err ->
?LOG_DEBUG("~ts: QQ ~ts error when registering enqueuer ~p", ?LOG_DEBUG("~ts: QQ ~ts error when registering enqueuer ~p",
[?MODULE, rabbit_misc:rs(QName), Err]), [?MODULE, rabbit_misc:rs(QName), Err]),
exit(Err) exit(Err)
end; end;
enqueue(_QName, _Correlation, _Msg, enqueue(_QName, _Correlation, _Msg,
@ -632,10 +632,10 @@ handle_ra_event(QName, Leader, {applied, Seqs},
when ActualLeader =/= OldLeader -> when ActualLeader =/= OldLeader ->
%% there is a new leader %% there is a new leader
?LOG_DEBUG("~ts: Detected QQ leader change (applied) " ?LOG_DEBUG("~ts: Detected QQ leader change (applied) "
"from ~w to ~w, " "from ~w to ~w, "
"resending ~b pending commands", "resending ~b pending commands",
[?MODULE, OldLeader, ActualLeader, [?MODULE, OldLeader, ActualLeader,
maps:size(State1#state.pending)]), maps:size(State1#state.pending)]),
resend_all_pending(State1#state{leader = ActualLeader}); resend_all_pending(State1#state{leader = ActualLeader});
_ -> _ ->
State1 State1
@ -702,9 +702,9 @@ handle_ra_event(QName, Leader, {machine, leader_change},
%% we need to update leader %% we need to update leader
%% and resend any pending commands %% and resend any pending commands
?LOG_DEBUG("~ts: ~s Detected QQ leader change from ~w to ~w, " ?LOG_DEBUG("~ts: ~s Detected QQ leader change from ~w to ~w, "
"resending ~b pending commands", "resending ~b pending commands",
[rabbit_misc:rs(QName), ?MODULE, OldLeader, [rabbit_misc:rs(QName), ?MODULE, OldLeader,
Leader, maps:size(Pending)]), Leader, maps:size(Pending)]),
State = resend_all_pending(State0#state{leader = Leader}), State = resend_all_pending(State0#state{leader = Leader}),
{ok, State, []}; {ok, State, []};
handle_ra_event(_QName, _From, {rejected, {not_leader, Leader, _Seq}}, handle_ra_event(_QName, _From, {rejected, {not_leader, Leader, _Seq}},
@ -714,9 +714,9 @@ handle_ra_event(QName, _From, {rejected, {not_leader, Leader, _Seq}},
#state{leader = OldLeader, #state{leader = OldLeader,
pending = Pending} = State0) -> pending = Pending} = State0) ->
?LOG_DEBUG("~ts: ~s Detected QQ leader change (rejection) from ~w to ~w, " ?LOG_DEBUG("~ts: ~s Detected QQ leader change (rejection) from ~w to ~w, "
"resending ~b pending commands", "resending ~b pending commands",
[rabbit_misc:rs(QName), ?MODULE, OldLeader, [rabbit_misc:rs(QName), ?MODULE, OldLeader,
Leader, maps:size(Pending)]), Leader, maps:size(Pending)]),
State = resend_all_pending(State0#state{leader = Leader}), State = resend_all_pending(State0#state{leader = Leader}),
{ok, cancel_timer(State), []}; {ok, cancel_timer(State), []};
handle_ra_event(_QName, _From, handle_ra_event(_QName, _From,
@ -986,7 +986,7 @@ get_missing_deliveries(State, From, To, ConsumerTag) ->
%% find local server %% find local server
ConsumerKey = consumer_key(ConsumerTag, State), ConsumerKey = consumer_key(ConsumerTag, State),
?LOG_DEBUG("get_missing_deliveries for consumer '~s' from ~b to ~b", ?LOG_DEBUG("get_missing_deliveries for consumer '~s' from ~b to ~b",
[ConsumerTag, From, To]), [ConsumerTag, From, To]),
Cmd = {get_checked_out, ConsumerKey, lists:seq(From, To)}, Cmd = {get_checked_out, ConsumerKey, lists:seq(From, To)},
ServerId = find_local_or_leader(State), ServerId = find_local_or_leader(State),
case ra:aux_command(ServerId, Cmd) of case ra:aux_command(ServerId, Cmd) of

View File

@ -259,7 +259,7 @@ ensure_worker_started(QRef, #?MODULE{consumer = #dlx_consumer{pid = Pid}}) ->
case is_local_and_alive(Pid) of case is_local_and_alive(Pid) of
true -> true ->
?LOG_DEBUG("rabbit_fifo_dlx_worker ~tp already started for ~ts", ?LOG_DEBUG("rabbit_fifo_dlx_worker ~tp already started for ~ts",
[Pid, rabbit_misc:rs(QRef)]); [Pid, rabbit_misc:rs(QRef)]);
false -> false ->
start_worker(QRef) start_worker(QRef)
end. end.
@ -271,7 +271,7 @@ ensure_worker_started(QRef, #?MODULE{consumer = #dlx_consumer{pid = Pid}}) ->
start_worker(QRef) -> start_worker(QRef) ->
{ok, Pid} = supervisor:start_child(rabbit_fifo_dlx_sup, [QRef]), {ok, Pid} = supervisor:start_child(rabbit_fifo_dlx_sup, [QRef]),
?LOG_DEBUG("started rabbit_fifo_dlx_worker ~tp for ~ts", ?LOG_DEBUG("started rabbit_fifo_dlx_worker ~tp for ~ts",
[Pid, rabbit_misc:rs(QRef)]). [Pid, rabbit_misc:rs(QRef)]).
ensure_worker_terminated(#?MODULE{consumer = undefined}) -> ensure_worker_terminated(#?MODULE{consumer = undefined}) ->
ok; ok;

View File

@ -55,8 +55,8 @@ process_command(Cmd, #state{leader = Leader} = State, Tries) ->
{error, non_local_leader}; {error, non_local_leader};
Err -> Err ->
?LOG_WARNING("Failed to process command ~tp on quorum queue leader ~tp: ~tp~n" ?LOG_WARNING("Failed to process command ~tp on quorum queue leader ~tp: ~tp~n"
"Trying ~b more time(s)...", "Trying ~b more time(s)...",
[Cmd, Leader, Err, Tries]), [Cmd, Leader, Err, Tries]),
process_command(Cmd, State, Tries - 1) process_command(Cmd, State, Tries - 1)
end. end.

View File

@ -185,7 +185,7 @@ handle_info({'DOWN', Ref, process, _, _},
%% Source quorum queue is down. Therefore, terminate ourself. %% Source quorum queue is down. Therefore, terminate ourself.
%% The new leader will re-create another dlx_worker. %% The new leader will re-create another dlx_worker.
?LOG_DEBUG("~ts terminating itself because leader of ~ts is down...", ?LOG_DEBUG("~ts terminating itself because leader of ~ts is down...",
[?MODULE, rabbit_misc:rs(QRef)]), [?MODULE, rabbit_misc:rs(QRef)]),
supervisor:terminate_child(rabbit_fifo_dlx_sup, self()); supervisor:terminate_child(rabbit_fifo_dlx_sup, self());
handle_info({{'DOWN', QName}, _MRef, process, QPid, Reason}, handle_info({{'DOWN', QName}, _MRef, process, QPid, Reason},
#state{queue_type_state = QTypeState0} = State0) -> #state{queue_type_state = QTypeState0} = State0) ->
@ -221,7 +221,7 @@ remove_queue(QRef, #state{pendings = Pendings0,
wait_for_queue_deleted(QRef, 0) -> wait_for_queue_deleted(QRef, 0) ->
?LOG_DEBUG("Received deletion event for ~ts but queue still exists in ETS table.", ?LOG_DEBUG("Received deletion event for ~ts but queue still exists in ETS table.",
[rabbit_misc:rs(QRef)]); [rabbit_misc:rs(QRef)]);
wait_for_queue_deleted(QRef, N) -> wait_for_queue_deleted(QRef, N) ->
case rabbit_amqqueue:exists(QRef) of case rabbit_amqqueue:exists(QRef) of
false -> false ->
@ -291,8 +291,8 @@ rejected(SeqNo, Qs, Pendings)
Pendings); Pendings);
false -> false ->
?LOG_DEBUG("Ignoring rejection for unknown sequence number ~b " ?LOG_DEBUG("Ignoring rejection for unknown sequence number ~b "
"from target dead letter queues ~tp", "from target dead letter queues ~tp",
[SeqNo, Qs]), [SeqNo, Qs]),
Pendings Pendings
end. end.
@ -388,8 +388,8 @@ deliver_to_queues(Msg, Options, Qs, #state{queue_type_state = QTypeState0,
%% (and therefore preventing messages to get stuck in our 'unsettled' state). %% (and therefore preventing messages to get stuck in our 'unsettled' state).
QNames = queue_names(Qs), QNames = queue_names(Qs),
?LOG_DEBUG("Failed to deliver message with seq_no ~b to " ?LOG_DEBUG("Failed to deliver message with seq_no ~b to "
"queues ~tp: ~tp", "queues ~tp: ~tp",
[SeqNo, QNames, Reason]), [SeqNo, QNames, Reason]),
{State0#state{pendings = rejected(SeqNo, QNames, Pendings)}, []} {State0#state{pendings = rejected(SeqNo, QNames, Pendings)}, []}
end, end,
handle_queue_actions(Actions, State). handle_queue_actions(Actions, State).
@ -421,8 +421,8 @@ handle_settled0(QRef, MsgSeq, #state{pendings = Pendings,
State#state{pendings = maps:update(MsgSeq, Pend, Pendings)}; State#state{pendings = maps:update(MsgSeq, Pend, Pendings)};
error -> error ->
?LOG_DEBUG("Ignoring publisher confirm for unknown sequence number ~b " ?LOG_DEBUG("Ignoring publisher confirm for unknown sequence number ~b "
"from target dead letter ~ts", "from target dead letter ~ts",
[MsgSeq, rabbit_misc:rs(QRef)]), [MsgSeq, rabbit_misc:rs(QRef)]),
State State
end. end.
@ -627,12 +627,12 @@ log_missing_dlx_once(#state{exchange_ref = DlxResource,
queue_ref = QueueResource, queue_ref = QueueResource,
logged = Logged} = State) -> logged = Logged} = State) ->
?LOG_WARNING("Cannot forward any dead-letter messages from source quorum ~ts because " ?LOG_WARNING("Cannot forward any dead-letter messages from source quorum ~ts because "
"its configured dead-letter-exchange ~ts does not exist. " "its configured dead-letter-exchange ~ts does not exist. "
"Either create the configured dead-letter-exchange or re-configure " "Either create the configured dead-letter-exchange or re-configure "
"the dead-letter-exchange policy for the source quorum queue to prevent " "the dead-letter-exchange policy for the source quorum queue to prevent "
"dead-lettered messages from piling up in the source quorum queue. " "dead-lettered messages from piling up in the source quorum queue. "
"This message will not be logged again.", "This message will not be logged again.",
[rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource)]), [rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource)]),
State#state{logged = maps:put(missing_dlx, DlxResource, Logged)}. State#state{logged = maps:put(missing_dlx, DlxResource, Logged)}.
log_no_route_once(#state{exchange_ref = SameDlx, log_no_route_once(#state{exchange_ref = SameDlx,
@ -644,15 +644,15 @@ log_no_route_once(#state{queue_ref = QueueResource,
routing_key = RoutingKey, routing_key = RoutingKey,
logged = Logged} = State) -> logged = Logged} = State) ->
?LOG_WARNING("Cannot forward any dead-letter messages from source quorum ~ts " ?LOG_WARNING("Cannot forward any dead-letter messages from source quorum ~ts "
"with configured dead-letter-exchange ~ts and configured " "with configured dead-letter-exchange ~ts and configured "
"dead-letter-routing-key '~ts'. This can happen either if the dead-letter " "dead-letter-routing-key '~ts'. This can happen either if the dead-letter "
"routing topology is misconfigured (for example no queue bound to " "routing topology is misconfigured (for example no queue bound to "
"dead-letter-exchange or wrong dead-letter-routing-key configured) or if " "dead-letter-exchange or wrong dead-letter-routing-key configured) or if "
"non-mirrored classic queues are bound whose host node is down. " "non-mirrored classic queues are bound whose host node is down. "
"Fix this issue to prevent dead-lettered messages from piling up " "Fix this issue to prevent dead-lettered messages from piling up "
"in the source quorum queue. " "in the source quorum queue. "
"This message will not be logged again.", "This message will not be logged again.",
[rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource), RoutingKey]), [rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource), RoutingKey]),
State#state{logged = maps:put(no_route, {DlxResource, RoutingKey}, Logged)}. State#state{logged = maps:put(no_route, {DlxResource, RoutingKey}, Logged)}.
log_cycles(Cycles, RoutingKeys, State) -> log_cycles(Cycles, RoutingKeys, State) ->
@ -665,8 +665,8 @@ log_cycle_once(Queues, RoutingKeys, #state{exchange_ref = DlxResource,
queue_ref = QueueResource, queue_ref = QueueResource,
logged = Logged} = State) -> logged = Logged} = State) ->
?LOG_WARNING("Dead-letter queues cycle detected for source quorum ~ts " ?LOG_WARNING("Dead-letter queues cycle detected for source quorum ~ts "
"with dead-letter exchange ~ts and routing keys ~tp: ~tp " "with dead-letter exchange ~ts and routing keys ~tp: ~tp "
"This message will not be logged again.", "This message will not be logged again.",
[rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource), [rabbit_misc:rs(QueueResource), rabbit_misc:rs(DlxResource),
RoutingKeys, Queues]), RoutingKeys, Queues]),
State#state{logged = maps:put({cycle, Queues}, true, Logged)}. State#state{logged = maps:put({cycle, Queues}, true, Logged)}.

View File

@ -675,8 +675,8 @@ eval_gc(Log, #?STATE{cfg = #cfg{resource = QR}} = MacState,
garbage_collect(), garbage_collect(),
{memory, MemAfter} = erlang:process_info(self(), memory), {memory, MemAfter} = erlang:process_info(self(), memory),
?LOG_DEBUG("~ts: full GC sweep complete. " ?LOG_DEBUG("~ts: full GC sweep complete. "
"Process memory changed from ~.2fMB to ~.2fMB.", "Process memory changed from ~.2fMB to ~.2fMB.",
[rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}}; AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}};
_ -> _ ->
AuxState AuxState

View File

@ -857,8 +857,8 @@ eval_gc(Log, #?STATE{cfg = #cfg{resource = QR}} = MacState,
garbage_collect(), garbage_collect(),
{memory, MemAfter} = erlang:process_info(self(), memory), {memory, MemAfter} = erlang:process_info(self(), memory),
?LOG_DEBUG("~ts: full GC sweep complete. " ?LOG_DEBUG("~ts: full GC sweep complete. "
"Process memory changed from ~.2fMB to ~.2fMB.", "Process memory changed from ~.2fMB to ~.2fMB.",
[rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}}; AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}};
_ -> _ ->
AuxState AuxState
@ -873,8 +873,8 @@ force_eval_gc(Log, #?STATE{cfg = #cfg{resource = QR}},
garbage_collect(), garbage_collect(),
{memory, MemAfter} = erlang:process_info(self(), memory), {memory, MemAfter} = erlang:process_info(self(), memory),
?LOG_DEBUG("~ts: full GC sweep complete. " ?LOG_DEBUG("~ts: full GC sweep complete. "
"Process memory changed from ~.2fMB to ~.2fMB.", "Process memory changed from ~.2fMB to ~.2fMB.",
[rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}}; AuxState#aux{gc = Gc#aux_gc{last_raft_idx = Idx}};
false -> false ->
AuxState AuxState

View File

@ -1174,8 +1174,8 @@ eval_gc(Log, #?STATE{cfg = #cfg{resource = QR}} = MacState,
garbage_collect(), garbage_collect(),
{memory, MemAfter} = erlang:process_info(self(), memory), {memory, MemAfter} = erlang:process_info(self(), memory),
?LOG_DEBUG("~ts: full GC sweep complete. " ?LOG_DEBUG("~ts: full GC sweep complete. "
"Process memory changed from ~.2fMB to ~.2fMB.", "Process memory changed from ~.2fMB to ~.2fMB.",
[rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}}; AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}};
_ -> _ ->
AuxState AuxState
@ -1190,8 +1190,8 @@ force_eval_gc(Log, #?STATE{cfg = #cfg{resource = QR}},
garbage_collect(), garbage_collect(),
{memory, MemAfter} = erlang:process_info(self(), memory), {memory, MemAfter} = erlang:process_info(self(), memory),
?LOG_DEBUG("~ts: full GC sweep complete. " ?LOG_DEBUG("~ts: full GC sweep complete. "
"Process memory changed from ~.2fMB to ~.2fMB.", "Process memory changed from ~.2fMB to ~.2fMB.",
[rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]), [rabbit_misc:rs(QR), Mem/?MB, MemAfter/?MB]),
AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}}; AuxState#?AUX{gc = Gc#aux_gc{last_raft_idx = Idx}};
false -> false ->
AuxState AuxState

View File

@ -32,7 +32,7 @@ node(Node, Timeout) ->
local() -> local() ->
?LOG_WARNING("rabbitmqctl node_health_check and its HTTP API counterpart are DEPRECATED. " ?LOG_WARNING("rabbitmqctl node_health_check and its HTTP API counterpart are DEPRECATED. "
"See https://www.rabbitmq.com/docs/monitoring#health-checks for replacement options."), "See https://www.rabbitmq.com/docs/monitoring#health-checks for replacement options."),
run_checks([list_channels, list_queues, alarms, rabbit_node_monitor]). run_checks([list_channels, list_queues, alarms, rabbit_node_monitor]).
%%---------------------------------------------------------------------------- %%----------------------------------------------------------------------------

View File

@ -159,7 +159,7 @@ filter_out_drained_nodes_consistent_read(Nodes) ->
suspend_all_client_listeners() -> suspend_all_client_listeners() ->
Listeners = rabbit_networking:node_client_listeners(node()), Listeners = rabbit_networking:node_client_listeners(node()),
?LOG_INFO("Asked to suspend ~b client connection listeners. " ?LOG_INFO("Asked to suspend ~b client connection listeners. "
"No new client connections will be accepted until these listeners are resumed!", [length(Listeners)]), "No new client connections will be accepted until these listeners are resumed!", [length(Listeners)]),
Results = lists:foldl(local_listener_fold_fun(fun ranch:suspend_listener/1), [], Listeners), Results = lists:foldl(local_listener_fold_fun(fun ranch:suspend_listener/1), [], Listeners),
lists:foldl(fun ok_or_first_error/2, ok, Results). lists:foldl(fun ok_or_first_error/2, ok, Results).
@ -170,7 +170,7 @@ suspend_all_client_listeners() ->
resume_all_client_listeners() -> resume_all_client_listeners() ->
Listeners = rabbit_networking:node_client_listeners(node()), Listeners = rabbit_networking:node_client_listeners(node()),
?LOG_INFO("Asked to resume ~b client connection listeners. " ?LOG_INFO("Asked to resume ~b client connection listeners. "
"New client connections will be accepted from now on", [length(Listeners)]), "New client connections will be accepted from now on", [length(Listeners)]),
Results = lists:foldl(local_listener_fold_fun(fun ranch:resume_listener/1), [], Listeners), Results = lists:foldl(local_listener_fold_fun(fun ranch:resume_listener/1), [], Listeners),
lists:foldl(fun ok_or_first_error/2, ok, Results). lists:foldl(fun ok_or_first_error/2, ok, Results).

View File

@ -794,7 +794,7 @@ init([VHost, Type, BaseDir, ClientRefs, StartupFunState]) ->
false -> "unclean" false -> "unclean"
end, end,
?LOG_DEBUG("Rebuilding message location index after ~ts shutdown...", ?LOG_DEBUG("Rebuilding message location index after ~ts shutdown...",
[Cleanliness]), [Cleanliness]),
{CurOffset, State1 = #msstate { current_file = CurFile }} = {CurOffset, State1 = #msstate { current_file = CurFile }} =
build_index(CleanShutdown, StartupFunState, State), build_index(CleanShutdown, StartupFunState, State),
?LOG_DEBUG("Finished rebuilding index", []), ?LOG_DEBUG("Finished rebuilding index", []),
@ -986,9 +986,9 @@ terminate(Reason, State = #msstate { index_ets = IndexEts,
ok -> ok; ok -> ok;
{error, FSErr} -> {error, FSErr} ->
?LOG_ERROR("Unable to store file summary" ?LOG_ERROR("Unable to store file summary"
" for vhost message store for directory ~tp~n" " for vhost message store for directory ~tp~n"
"Error: ~tp", "Error: ~tp",
[Dir, FSErr]) [Dir, FSErr])
end, end,
[true = ets:delete(T) || T <- [FileSummaryEts, FileHandlesEts, [true = ets:delete(T) || T <- [FileSummaryEts, FileHandlesEts,
CurFileCacheEts, FlyingEts]], CurFileCacheEts, FlyingEts]],
@ -999,8 +999,8 @@ terminate(Reason, State = #msstate { index_ets = IndexEts,
ok; ok;
{error, RTErr} -> {error, RTErr} ->
?LOG_ERROR("Unable to save message store recovery terms" ?LOG_ERROR("Unable to save message store recovery terms"
" for directory ~tp~nError: ~tp", " for directory ~tp~nError: ~tp",
[Dir, RTErr]) [Dir, RTErr])
end, end,
State3 #msstate { current_file_handle = undefined, State3 #msstate { current_file_handle = undefined,
current_file_offset = 0 }. current_file_offset = 0 }.
@ -1705,8 +1705,8 @@ index_terminate(IndexEts, Dir) ->
ok -> ok; ok -> ok;
{error, Err} -> {error, Err} ->
?LOG_ERROR("Unable to save message store index" ?LOG_ERROR("Unable to save message store index"
" for directory ~tp.~nError: ~tp", " for directory ~tp.~nError: ~tp",
[Dir, Err]) [Dir, Err])
end, end,
ets:delete(IndexEts). ets:delete(IndexEts).
@ -1722,8 +1722,8 @@ recover_index_and_client_refs(false, _ClientRefs, Dir, Name) ->
recover_index_and_client_refs(true, ClientRefs, Dir, Name) -> recover_index_and_client_refs(true, ClientRefs, Dir, Name) ->
Fresh = fun (ErrorMsg, ErrorArgs) -> Fresh = fun (ErrorMsg, ErrorArgs) ->
?LOG_WARNING("Message store ~tp : " ++ ErrorMsg ++ "~n" ?LOG_WARNING("Message store ~tp : " ++ ErrorMsg ++ "~n"
"rebuilding indices from scratch", "rebuilding indices from scratch",
[Name | ErrorArgs]), [Name | ErrorArgs]),
{false, index_new(Dir), []} {false, index_new(Dir), []}
end, end,
case read_recovery_terms(Dir) of case read_recovery_terms(Dir) of
@ -1831,7 +1831,7 @@ build_index_worker(Gatherer, #msstate { index_ets = IndexEts, dir = Dir },
File, Files) -> File, Files) ->
Path = form_filename(Dir, filenum_to_name(File)), Path = form_filename(Dir, filenum_to_name(File)),
?LOG_DEBUG("Rebuilding message location index from ~ts (~B file(s) remaining)", ?LOG_DEBUG("Rebuilding message location index from ~ts (~B file(s) remaining)",
[Path, length(Files)]), [Path, length(Files)]),
%% The scan function already dealt with duplicate messages %% The scan function already dealt with duplicate messages
%% within the file, and only returns valid messages (we do %% within the file, and only returns valid messages (we do
%% the index lookup in the fun). But we get messages in reverse order. %% the index lookup in the fun). But we get messages in reverse order.
@ -2003,7 +2003,7 @@ compact_file(File, State = #gc_state { file_summary_ets = FileSummaryEts }) ->
case ets:lookup(FileSummaryEts, File) of case ets:lookup(FileSummaryEts, File) of
[] -> [] ->
?LOG_DEBUG("File ~tp has already been deleted; no need to compact", ?LOG_DEBUG("File ~tp has already been deleted; no need to compact",
[File]), [File]),
ok; ok;
[#file_summary{file_size = FileSize}] -> [#file_summary{file_size = FileSize}] ->
compact_file(File, FileSize, State) compact_file(File, FileSize, State)
@ -2048,7 +2048,7 @@ compact_file(File, FileSize,
%% put out more details around what's happening. %% put out more details around what's happening.
Reclaimed = FileSize - TruncateSize, Reclaimed = FileSize - TruncateSize,
?LOG_DEBUG("Compacted segment file number ~tp; ~tp bytes can now be reclaimed", ?LOG_DEBUG("Compacted segment file number ~tp; ~tp bytes can now be reclaimed",
[File, Reclaimed]), [File, Reclaimed]),
%% Tell the message store to update its state. %% Tell the message store to update its state.
gen_server2:cast(Server, {compacted_file, File}), gen_server2:cast(Server, {compacted_file, File}),
%% Tell the GC process to truncate the file. %% Tell the GC process to truncate the file.
@ -2149,7 +2149,7 @@ truncate_file(File, Size, ThresholdTimestamp, #gc_state{ file_summary_ets = File
[{'=<', '$1', ThresholdTimestamp}], ['$$']}], 1) of [{'=<', '$1', ThresholdTimestamp}], ['$$']}], 1) of
{[_|_], _Cont} -> {[_|_], _Cont} ->
?LOG_DEBUG("Asked to truncate file ~p but it has active readers. Deferring.", ?LOG_DEBUG("Asked to truncate file ~p but it has active readers. Deferring.",
[File]), [File]),
defer; defer;
_ -> _ ->
FileName = filenum_to_name(File), FileName = filenum_to_name(File),
@ -2172,7 +2172,7 @@ delete_file(File, #gc_state { file_summary_ets = FileSummaryEts,
case ets:match_object(FileHandlesEts, {{'_', File}, '_'}, 1) of case ets:match_object(FileHandlesEts, {{'_', File}, '_'}, 1) of
{[_|_], _Cont} -> {[_|_], _Cont} ->
?LOG_DEBUG("Asked to delete file ~p but it has active readers. Deferring.", ?LOG_DEBUG("Asked to delete file ~p but it has active readers. Deferring.",
[File]), [File]),
defer; defer;
_ -> _ ->
[#file_summary{ valid_total_size = 0, [#file_summary{ valid_total_size = 0,

View File

@ -105,7 +105,7 @@ boot_listeners(Fun, NumAcceptors, ConcurrentConnsSupsCount, Type) ->
ok; ok;
{error, {could_not_start_listener, Address, Port, Details}} = Error -> {error, {could_not_start_listener, Address, Port, Details}} = Error ->
?LOG_ERROR("Failed to start ~ts listener [~ts]:~tp, error: ~tp", ?LOG_ERROR("Failed to start ~ts listener [~ts]:~tp, error: ~tp",
[Type, Address, Port, Details]), [Type, Address, Port, Details]),
throw(Error) throw(Error)
end. end.
@ -522,11 +522,11 @@ emit_connection_info_local(Items, Ref, AggregatorPid) ->
-spec close_connection(pid(), string()) -> 'ok'. -spec close_connection(pid(), string()) -> 'ok'.
close_connection(Pid, Explanation) -> close_connection(Pid, Explanation) ->
?LOG_INFO("Closing connection ~tp because ~tp", ?LOG_INFO("Closing connection ~tp because ~tp",
[Pid, Explanation]), [Pid, Explanation]),
try rabbit_reader:shutdown(Pid, Explanation) try rabbit_reader:shutdown(Pid, Explanation)
catch exit:{Reason, _Location} -> catch exit:{Reason, _Location} ->
?LOG_WARNING("Could not close connection ~tp (reason: ~tp): ~p", ?LOG_WARNING("Could not close connection ~tp (reason: ~tp): ~p",
[Pid, Explanation, Reason]) [Pid, Explanation, Reason])
end. end.
-spec close_connections([pid()], string()) -> 'ok'. -spec close_connections([pid()], string()) -> 'ok'.
@ -604,7 +604,7 @@ ranch_handshake(Ref) ->
PeerAddress = io_lib:format("~ts:~tp", [rabbit_misc:ntoab(PeerIp), PeerPort]), PeerAddress = io_lib:format("~ts:~tp", [rabbit_misc:ntoab(PeerIp), PeerPort]),
Protocol = ranch_ref_to_protocol(Ref), Protocol = ranch_ref_to_protocol(Ref),
?LOG_ERROR("~p error during handshake for protocol ~p and peer ~ts", ?LOG_ERROR("~p error during handshake for protocol ~p and peer ~ts",
[Reason, Protocol, PeerAddress]), [Reason, Protocol, PeerAddress]),
erlang:raise(exit, Error, Stacktrace) erlang:raise(exit, Error, Stacktrace)
end. end.

View File

@ -318,8 +318,8 @@ find_blocked_global_peers() ->
timer:sleep(10_000), timer:sleep(10_000),
Snapshot2 = snapshot_global_dict(), Snapshot2 = snapshot_global_dict(),
?LOG_DEBUG("global's sync tags 10s ago: ~p~n" ?LOG_DEBUG("global's sync tags 10s ago: ~p~n"
"global's sync tags now: ~p", "global's sync tags now: ~p",
[Snapshot1, Snapshot2]), [Snapshot1, Snapshot2]),
find_blocked_global_peers1(Snapshot2, Snapshot1). find_blocked_global_peers1(Snapshot2, Snapshot1).
snapshot_global_dict() -> snapshot_global_dict() ->
@ -496,9 +496,9 @@ handle_cast({check_partial_partition, Node, Rep, NodeGUID, MyGUID, RepGUID},
{badrpc, _} -> ok; {badrpc, _} -> ok;
NodeGUID -> NodeGUID ->
?LOG_WARNING("Received a 'DOWN' message" ?LOG_WARNING("Received a 'DOWN' message"
" from ~tp but still can" " from ~tp but still can"
" communicate with it ", " communicate with it ",
[Node]), [Node]),
cast(Rep, {partial_partition, cast(Rep, {partial_partition,
Node, node(), RepGUID}); Node, node(), RepGUID});
_ -> _ ->
@ -657,7 +657,7 @@ handle_info({'DOWN', _MRef, process, Pid, _Reason},
handle_info({nodedown, Node, Info}, State) -> handle_info({nodedown, Node, Info}, State) ->
?LOG_INFO("node ~tp down: ~tp", ?LOG_INFO("node ~tp down: ~tp",
[Node, proplists:get_value(nodedown_reason, Info)]), [Node, proplists:get_value(nodedown_reason, Info)]),
case rabbit_khepri:is_enabled() of case rabbit_khepri:is_enabled() of
true -> {noreply, State}; true -> {noreply, State};
false -> handle_nodedown_using_mnesia(Node, State) false -> handle_nodedown_using_mnesia(Node, State)
@ -785,13 +785,13 @@ handle_dead_node(Node, State = #state{autoheal = Autoheal}) ->
State#state{autoheal = rabbit_autoheal:node_down(Node, Autoheal)}; State#state{autoheal = rabbit_autoheal:node_down(Node, Autoheal)};
{ok, Term} -> {ok, Term} ->
?LOG_WARNING("cluster_partition_handling ~tp unrecognised, " ?LOG_WARNING("cluster_partition_handling ~tp unrecognised, "
"assuming 'ignore'", [Term]), "assuming 'ignore'", [Term]),
State State
end. end.
await_cluster_recovery(Condition) -> await_cluster_recovery(Condition) ->
?LOG_WARNING("Cluster minority/secondary status detected - " ?LOG_WARNING("Cluster minority/secondary status detected - "
"awaiting recovery", []), "awaiting recovery", []),
run_outside_applications(fun () -> run_outside_applications(fun () ->
rabbit:stop(), rabbit:stop(),
wait_for_cluster_recovery(Condition) wait_for_cluster_recovery(Condition)

View File

@ -46,8 +46,8 @@ check_duplicates(Nodes) ->
ok; ok;
false -> false ->
?LOG_WARNING("Classic peer discovery backend: list of " ?LOG_WARNING("Classic peer discovery backend: list of "
"nodes contains duplicates ~0tp", "nodes contains duplicates ~0tp",
[Nodes]) [Nodes])
end. end.
check_local_node(Nodes) -> check_local_node(Nodes) ->
@ -56,8 +56,8 @@ check_local_node(Nodes) ->
ok; ok;
false -> false ->
?LOG_WARNING("Classic peer discovery backend: list of " ?LOG_WARNING("Classic peer discovery backend: list of "
"nodes does not contain the local node ~0tp", "nodes does not contain the local node ~0tp",
[Nodes]) [Nodes])
end. end.
-spec lock(Nodes :: [node()]) -> -spec lock(Nodes :: [node()]) ->
@ -69,7 +69,7 @@ lock(Nodes) ->
case lists:member(Node, Nodes) of case lists:member(Node, Nodes) of
false when Nodes =/= [] -> false when Nodes =/= [] ->
?LOG_WARNING("Local node ~ts is not part of configured nodes ~tp. " ?LOG_WARNING("Local node ~ts is not part of configured nodes ~tp. "
"This might lead to incorrect cluster formation.", [Node, Nodes]); "This might lead to incorrect cluster formation.", [Node, Nodes]);
_ -> ok _ -> ok
end, end,
LockId = rabbit_nodes:lock_id(Node), LockId = rabbit_nodes:lock_id(Node),

View File

@ -31,9 +31,9 @@ list_nodes() ->
case proplists:get_value(peer_discovery_dns, ClusterFormation) of case proplists:get_value(peer_discovery_dns, ClusterFormation) of
undefined -> undefined ->
?LOG_WARNING("Peer discovery backend is set to ~ts " ?LOG_WARNING("Peer discovery backend is set to ~ts "
"but final config does not contain rabbit.cluster_formation.peer_discovery_dns. " "but final config does not contain rabbit.cluster_formation.peer_discovery_dns. "
"Cannot discover any nodes because seed hostname is not configured!", "Cannot discover any nodes because seed hostname is not configured!",
[?MODULE]), [?MODULE]),
{ok, {[], disc}}; {ok, {[], disc}};
Proplist -> Proplist ->
Hostname = rabbit_data_coercion:to_list(proplists:get_value(hostname, Proplist)), Hostname = rabbit_data_coercion:to_list(proplists:get_value(hostname, Proplist)),
@ -110,5 +110,5 @@ extract_host({ok, {hostent, FQDN, _, _, _, _}}, false, _Address) ->
lists:nth(1, string:tokens(FQDN, ".")); lists:nth(1, string:tokens(FQDN, "."));
extract_host({error, Error}, _, Address) -> extract_host({error, Error}, _, Address) ->
?LOG_ERROR("Reverse DNS lookup for address ~ts failed: ~tp", ?LOG_ERROR("Reverse DNS lookup for address ~ts failed: ~tp",
[inet_parse:ntoa(Address), Error]), [inet_parse:ntoa(Address), Error]),
error. error.

View File

@ -55,14 +55,12 @@ ensure1(FileJustChanged0) ->
{[], []} -> {[], []} ->
ok; ok;
{[], _} -> {[], _} ->
?LOG_INFO("Plugins changed; disabled ~tp", ?LOG_INFO("Plugins changed; disabled ~tp", [Stop]);
[Stop]);
{_, []} -> {_, []} ->
?LOG_INFO("Plugins changed; enabled ~tp", ?LOG_INFO("Plugins changed; enabled ~tp", [Start]);
[Start]);
{_, _} -> {_, _} ->
?LOG_INFO("Plugins changed; enabled ~tp, disabled ~tp", ?LOG_INFO("Plugins changed; enabled ~tp, disabled ~tp",
[Start, Stop]) [Start, Stop])
end, end,
{ok, Start, Stop}; {ok, Start, Stop};
_ -> _ ->
@ -428,9 +426,9 @@ prepare_dir_plugin(PluginAppDescPath) ->
ok; ok;
{error, badfile} -> {error, badfile} ->
?LOG_ERROR("Failed to enable plugin \"~ts\": " ?LOG_ERROR("Failed to enable plugin \"~ts\": "
"it may have been built with an " "it may have been built with an "
"incompatible (more recent?) " "incompatible (more recent?) "
"version of Erlang", [Plugin]), "version of Erlang", [Plugin]),
throw({plugin_built_with_incompatible_erlang, Plugin}); throw({plugin_built_with_incompatible_erlang, Plugin});
Error -> Error ->
throw({plugin_module_unloadable, Plugin, Error}) throw({plugin_module_unloadable, Plugin, Error})

View File

@ -287,7 +287,7 @@ parse_set0(Type, VHost, Name, Pattern, Defn, Priority, ApplyTo, ActingUser) ->
{<<"apply-to">>, ApplyTo}], {<<"apply-to">>, ApplyTo}],
ActingUser), ActingUser),
?LOG_INFO("Successfully set policy '~ts' matching ~ts names in virtual host '~ts' using pattern '~ts'", ?LOG_INFO("Successfully set policy '~ts' matching ~ts names in virtual host '~ts' using pattern '~ts'",
[Name, ApplyTo, VHost, Pattern]), [Name, ApplyTo, VHost, Pattern]),
R; R;
{error, Reason} -> {error, Reason} ->
{error_string, {error_string,

View File

@ -68,7 +68,7 @@ enable() ->
case RealBQ of case RealBQ of
?MODULE -> ok; ?MODULE -> ok;
_ -> ?LOG_INFO("Priority queues enabled, real BQ is ~ts", _ -> ?LOG_INFO("Priority queues enabled, real BQ is ~ts",
[RealBQ]), [RealBQ]),
application:set_env( application:set_env(
rabbitmq_priority_queue, backing_queue_module, RealBQ), rabbitmq_priority_queue, backing_queue_module, RealBQ),
application:set_env(rabbit, backing_queue_module, ?MODULE) application:set_env(rabbit, backing_queue_module, ?MODULE)

View File

@ -1184,7 +1184,7 @@ load_segment(KeepAcked, #segment { path = Path }) ->
case SegBin of case SegBin of
<<0:Size/unit:8>> -> <<0:Size/unit:8>> ->
?LOG_WARNING("Deleting invalid v1 segment file ~ts (file only contains NUL bytes)", ?LOG_WARNING("Deleting invalid v1 segment file ~ts (file only contains NUL bytes)",
[Path]), [Path]),
_ = rabbit_file:delete(Path), _ = rabbit_file:delete(Path),
Empty; Empty;
_ -> _ ->

View File

@ -556,7 +556,7 @@ recover(VHost, Qs) ->
maps:fold(fun (Mod, Queues, {R0, F0}) -> maps:fold(fun (Mod, Queues, {R0, F0}) ->
{Taken, {R, F}} = timer:tc(Mod, recover, [VHost, Queues]), {Taken, {R, F}} = timer:tc(Mod, recover, [VHost, Queues]),
?LOG_INFO("Recovering ~b queues of type ~ts took ~bms", ?LOG_INFO("Recovering ~b queues of type ~ts took ~bms",
[length(Queues), Mod, Taken div 1000]), [length(Queues), Mod, Taken div 1000]),
{R0 ++ R, F0 ++ F} {R0 ++ R, F0 ++ F}
end, {[], []}, ByType). end, {[], []}, ByType).

View File

@ -131,7 +131,7 @@
-define(INFO(Str, Args), -define(INFO(Str, Args),
?LOG_INFO("[~s:~s/~b] " Str, ?LOG_INFO("[~s:~s/~b] " Str,
[?MODULE, ?FUNCTION_NAME, ?FUNCTION_ARITY | Args])). [?MODULE, ?FUNCTION_NAME, ?FUNCTION_ARITY | Args])).
-define(STATISTICS_KEYS, -define(STATISTICS_KEYS,
@ -286,8 +286,8 @@ start_cluster(Q) ->
MinVersion = lists:min([rabbit_fifo:version() | Versions]), MinVersion = lists:min([rabbit_fifo:version() | Versions]),
?LOG_DEBUG("Will start up to ~w replicas for quorum queue ~ts with " ?LOG_DEBUG("Will start up to ~w replicas for quorum queue ~ts with "
"leader on node '~ts', initial machine version ~b", "leader on node '~ts', initial machine version ~b",
[QuorumSize, rabbit_misc:rs(QName), LeaderNode, MinVersion]), [QuorumSize, rabbit_misc:rs(QName), LeaderNode, MinVersion]),
case rabbit_amqqueue:internal_declare(NewQ1, false) of case rabbit_amqqueue:internal_declare(NewQ1, false) of
{created, NewQ} -> {created, NewQ} ->
RaConfs = [make_ra_conf(NewQ, ServerId, voter, MinVersion) RaConfs = [make_ra_conf(NewQ, ServerId, voter, MinVersion)
@ -662,7 +662,7 @@ handle_tick(QName,
ok; ok;
repaired -> repaired ->
?LOG_DEBUG("Repaired quorum queue ~ts amqqueue record", ?LOG_DEBUG("Repaired quorum queue ~ts amqqueue record",
[rabbit_misc:rs(QName)]) [rabbit_misc:rs(QName)])
end, end,
ExpectedNodes = rabbit_nodes:list_members(), ExpectedNodes = rabbit_nodes:list_members(),
case Nodes -- ExpectedNodes of case Nodes -- ExpectedNodes of
@ -672,8 +672,8 @@ handle_tick(QName,
%% rabbit_nodes:list_members/0 returns [] when there %% rabbit_nodes:list_members/0 returns [] when there
%% is an error so we need to handle that case %% is an error so we need to handle that case
?LOG_DEBUG("~ts: stale nodes detected in quorum " ?LOG_DEBUG("~ts: stale nodes detected in quorum "
"queue state. Purging ~w", "queue state. Purging ~w",
[rabbit_misc:rs(QName), Stale]), [rabbit_misc:rs(QName), Stale]),
%% pipeline purge command %% pipeline purge command
ok = ra:pipeline_command(amqqueue:get_pid(Q), ok = ra:pipeline_command(amqqueue:get_pid(Q),
rabbit_fifo:make_purge_nodes(Stale)), rabbit_fifo:make_purge_nodes(Stale)),
@ -686,13 +686,13 @@ handle_tick(QName,
catch catch
_:Err -> _:Err ->
?LOG_DEBUG("~ts: handle tick failed with ~p", ?LOG_DEBUG("~ts: handle tick failed with ~p",
[rabbit_misc:rs(QName), Err]), [rabbit_misc:rs(QName), Err]),
ok ok
end end
end); end);
handle_tick(QName, Config, _Nodes) -> handle_tick(QName, Config, _Nodes) ->
?LOG_DEBUG("~ts: handle tick received unexpected config format ~tp", ?LOG_DEBUG("~ts: handle tick received unexpected config format ~tp",
[rabbit_misc:rs(QName), Config]). [rabbit_misc:rs(QName), Config]).
repair_leader_record(Q, Name) -> repair_leader_record(Q, Name) ->
Node = node(), Node = node(),
@ -703,7 +703,7 @@ repair_leader_record(Q, Name) ->
_ -> _ ->
QName = amqqueue:get_name(Q), QName = amqqueue:get_name(Q),
?LOG_DEBUG("~ts: updating leader record to current node ~ts", ?LOG_DEBUG("~ts: updating leader record to current node ~ts",
[rabbit_misc:rs(QName), Node]), [rabbit_misc:rs(QName), Node]),
ok = become_leader0(QName, Name), ok = become_leader0(QName, Name),
ok ok
end, end,
@ -800,15 +800,15 @@ recover(_Vhost, Queues) ->
when Err1 == not_started orelse when Err1 == not_started orelse
Err1 == name_not_registered -> Err1 == name_not_registered ->
?LOG_WARNING("Quorum queue recovery: configured member of ~ts was not found on this node. Starting member as a new one. " ?LOG_WARNING("Quorum queue recovery: configured member of ~ts was not found on this node. Starting member as a new one. "
"Context: ~s", "Context: ~s",
[rabbit_misc:rs(QName), Err1]), [rabbit_misc:rs(QName), Err1]),
% queue was never started on this node % queue was never started on this node
% so needs to be started from scratch. % so needs to be started from scratch.
case start_server(make_ra_conf(Q0, ServerId)) of case start_server(make_ra_conf(Q0, ServerId)) of
ok -> ok; ok -> ok;
Err2 -> Err2 ->
?LOG_WARNING("recover: quorum queue ~w could not" ?LOG_WARNING("recover: quorum queue ~w could not"
" be started ~w", [Name, Err2]), " be started ~w", [Name, Err2]),
fail fail
end; end;
{error, {already_started, _}} -> {error, {already_started, _}} ->
@ -819,7 +819,7 @@ recover(_Vhost, Queues) ->
Err -> Err ->
%% catch all clause to avoid causing the vhost not to start %% catch all clause to avoid causing the vhost not to start
?LOG_WARNING("recover: quorum queue ~w could not be " ?LOG_WARNING("recover: quorum queue ~w could not be "
"restarted ~w", [Name, Err]), "restarted ~w", [Name, Err]),
fail fail
end, end,
%% we have to ensure the quorum queue is %% we have to ensure the quorum queue is
@ -1224,7 +1224,7 @@ policy_changed(Q) ->
Err -> Err ->
FormattedQueueName = rabbit_misc:rs(amqqueue:get_name(Q)), FormattedQueueName = rabbit_misc:rs(amqqueue:get_name(Q)),
?LOG_WARNING("~s: policy may not have been successfully applied. Error: ~p", ?LOG_WARNING("~s: policy may not have been successfully applied. Error: ~p",
[FormattedQueueName, Err]), [FormattedQueueName, Err]),
ok ok
end. end.
@ -1342,7 +1342,7 @@ add_member(VHost, Name, Node, Membership, Timeout)
is_atom(Node) -> is_atom(Node) ->
QName = #resource{virtual_host = VHost, name = Name, kind = queue}, QName = #resource{virtual_host = VHost, name = Name, kind = queue},
?LOG_DEBUG("Asked to add a replica for queue ~ts on node ~ts", ?LOG_DEBUG("Asked to add a replica for queue ~ts on node ~ts",
[rabbit_misc:rs(QName), Node]), [rabbit_misc:rs(QName), Node]),
case rabbit_amqqueue:lookup(QName) of case rabbit_amqqueue:lookup(QName) of
{ok, Q} when ?amqqueue_is_classic(Q) -> {ok, Q} when ?amqqueue_is_classic(Q) ->
{error, classic_queue_not_supported}; {error, classic_queue_not_supported};
@ -1356,7 +1356,7 @@ add_member(VHost, Name, Node, Membership, Timeout)
true -> true ->
%% idempotent by design %% idempotent by design
?LOG_DEBUG("Quorum ~ts already has a replica on node ~ts", ?LOG_DEBUG("Quorum ~ts already has a replica on node ~ts",
[rabbit_misc:rs(QName), Node]), [rabbit_misc:rs(QName), Node]),
ok; ok;
false -> false ->
do_add_member(Q, Node, Membership, Timeout) do_add_member(Q, Node, Membership, Timeout)
@ -1435,7 +1435,7 @@ do_add_member(Q, Node, Membership, Timeout)
end; end;
E -> E ->
?LOG_WARNING("Could not add a replica of quorum ~ts on node ~ts: ~p", ?LOG_WARNING("Could not add a replica of quorum ~ts on node ~ts: ~p",
[rabbit_misc:rs(QName), Node, E]), [rabbit_misc:rs(QName), Node, E]),
E E
end. end.
@ -1512,7 +1512,7 @@ shrink_all(Node) ->
[begin [begin
QName = amqqueue:get_name(Q), QName = amqqueue:get_name(Q),
?LOG_INFO("~ts: removing member (replica) on node ~w", ?LOG_INFO("~ts: removing member (replica) on node ~w",
[rabbit_misc:rs(QName), Node]), [rabbit_misc:rs(QName), Node]),
Size = length(get_nodes(Q)), Size = length(get_nodes(Q)),
case delete_member(Q, Node) of case delete_member(Q, Node) of
ok -> ok ->
@ -1522,21 +1522,21 @@ shrink_all(Node) ->
%% elected but it's noop command not been committed yet. %% elected but it's noop command not been committed yet.
%% lets sleep and retry once %% lets sleep and retry once
?LOG_INFO("~ts: failed to remove member (replica) on node ~w " ?LOG_INFO("~ts: failed to remove member (replica) on node ~w "
"as cluster change is not permitted. " "as cluster change is not permitted. "
"retrying once in 500ms", "retrying once in 500ms",
[rabbit_misc:rs(QName), Node]), [rabbit_misc:rs(QName), Node]),
timer:sleep(500), timer:sleep(500),
case delete_member(Q, Node) of case delete_member(Q, Node) of
ok -> ok ->
{QName, {ok, Size-1}}; {QName, {ok, Size-1}};
{error, Err} -> {error, Err} ->
?LOG_WARNING("~ts: failed to remove member (replica) on node ~w, error: ~w", ?LOG_WARNING("~ts: failed to remove member (replica) on node ~w, error: ~w",
[rabbit_misc:rs(QName), Node, Err]), [rabbit_misc:rs(QName), Node, Err]),
{QName, {error, Size, Err}} {QName, {error, Size, Err}}
end; end;
{error, Err} -> {error, Err} ->
?LOG_WARNING("~ts: failed to remove member (replica) on node ~w, error: ~w", ?LOG_WARNING("~ts: failed to remove member (replica) on node ~w, error: ~w",
[rabbit_misc:rs(QName), Node, Err]), [rabbit_misc:rs(QName), Node, Err]),
{QName, {error, Size, Err}} {QName, {error, Size, Err}}
end end
end || Q <- rabbit_amqqueue:list(), end || Q <- rabbit_amqqueue:list(),
@ -1556,7 +1556,7 @@ grow(Node, VhostSpec, QueueSpec, Strategy, Membership) ->
Size = length(get_nodes(Q)), Size = length(get_nodes(Q)),
QName = amqqueue:get_name(Q), QName = amqqueue:get_name(Q),
?LOG_INFO("~ts: adding a new member (replica) on node ~w", ?LOG_INFO("~ts: adding a new member (replica) on node ~w",
[rabbit_misc:rs(QName), Node]), [rabbit_misc:rs(QName), Node]),
case add_member(Q, Node, Membership) of case add_member(Q, Node, Membership) of
ok -> ok ->
{QName, {ok, Size + 1}}; {QName, {ok, Size + 1}};
@ -1649,22 +1649,22 @@ dlh(undefined, undefined, undefined, _, _) ->
undefined; undefined;
dlh(undefined, RoutingKey, undefined, _, QName) -> dlh(undefined, RoutingKey, undefined, _, QName) ->
?LOG_WARNING("Disabling dead-lettering for ~ts despite configured dead-letter-routing-key '~ts' " ?LOG_WARNING("Disabling dead-lettering for ~ts despite configured dead-letter-routing-key '~ts' "
"because dead-letter-exchange is not configured.", "because dead-letter-exchange is not configured.",
[rabbit_misc:rs(QName), RoutingKey]), [rabbit_misc:rs(QName), RoutingKey]),
undefined; undefined;
dlh(undefined, _, Strategy, _, QName) -> dlh(undefined, _, Strategy, _, QName) ->
?LOG_WARNING("Disabling dead-lettering for ~ts despite configured dead-letter-strategy '~ts' " ?LOG_WARNING("Disabling dead-lettering for ~ts despite configured dead-letter-strategy '~ts' "
"because dead-letter-exchange is not configured.", "because dead-letter-exchange is not configured.",
[rabbit_misc:rs(QName), Strategy]), [rabbit_misc:rs(QName), Strategy]),
undefined; undefined;
dlh(_, _, <<"at-least-once">>, reject_publish, _) -> dlh(_, _, <<"at-least-once">>, reject_publish, _) ->
at_least_once; at_least_once;
dlh(Exchange, RoutingKey, <<"at-least-once">>, drop_head, QName) -> dlh(Exchange, RoutingKey, <<"at-least-once">>, drop_head, QName) ->
?LOG_WARNING("Falling back to dead-letter-strategy at-most-once for ~ts " ?LOG_WARNING("Falling back to dead-letter-strategy at-most-once for ~ts "
"because configured dead-letter-strategy at-least-once is incompatible with " "because configured dead-letter-strategy at-least-once is incompatible with "
"effective overflow strategy drop-head. To enable dead-letter-strategy " "effective overflow strategy drop-head. To enable dead-letter-strategy "
"at-least-once, set overflow strategy to reject-publish.", "at-least-once, set overflow strategy to reject-publish.",
[rabbit_misc:rs(QName)]), [rabbit_misc:rs(QName)]),
dlh_at_most_once(Exchange, RoutingKey, QName); dlh_at_most_once(Exchange, RoutingKey, QName);
dlh(Exchange, RoutingKey, _, _, QName) -> dlh(Exchange, RoutingKey, _, _, QName) ->
dlh_at_most_once(Exchange, RoutingKey, QName). dlh_at_most_once(Exchange, RoutingKey, QName).
@ -2032,7 +2032,7 @@ overflow(<<"reject-publish">>, _Def, _QName) -> reject_publish;
overflow(<<"drop-head">>, _Def, _QName) -> drop_head; overflow(<<"drop-head">>, _Def, _QName) -> drop_head;
overflow(<<"reject-publish-dlx">> = V, Def, QName) -> overflow(<<"reject-publish-dlx">> = V, Def, QName) ->
?LOG_WARNING("Invalid overflow strategy ~tp for quorum queue: ~ts", ?LOG_WARNING("Invalid overflow strategy ~tp for quorum queue: ~ts",
[V, rabbit_misc:rs(QName)]), [V, rabbit_misc:rs(QName)]),
Def. Def.
-spec notify_decorators(amqqueue:amqqueue()) -> 'ok'. -spec notify_decorators(amqqueue:amqqueue()) -> 'ok'.
@ -2144,7 +2144,7 @@ force_checkpoint(VhostSpec, QueueSpec) ->
{QName, {ok}}; {QName, {ok}};
{error, Err} -> {error, Err} ->
?LOG_WARNING("~ts: failed to force checkpoint, error: ~w", ?LOG_WARNING("~ts: failed to force checkpoint, error: ~w",
[rabbit_misc:rs(QName), Err]), [rabbit_misc:rs(QName), Err]),
{QName, {error, Err}} {QName, {error, Err}}
end end
end end
@ -2297,16 +2297,16 @@ drain(TransferCandidates) ->
transfer_leadership([]) -> transfer_leadership([]) ->
?LOG_WARNING("Skipping leadership transfer of quorum queues: no candidate " ?LOG_WARNING("Skipping leadership transfer of quorum queues: no candidate "
"(online, not under maintenance) nodes to transfer to!"); "(online, not under maintenance) nodes to transfer to!");
transfer_leadership(_TransferCandidates) -> transfer_leadership(_TransferCandidates) ->
%% we only transfer leadership for QQs that have local leaders %% we only transfer leadership for QQs that have local leaders
Queues = rabbit_amqqueue:list_local_leaders(), Queues = rabbit_amqqueue:list_local_leaders(),
?LOG_INFO("Will transfer leadership of ~b quorum queues with current leader on this node", ?LOG_INFO("Will transfer leadership of ~b quorum queues with current leader on this node",
[length(Queues)]), [length(Queues)]),
_ = [begin _ = [begin
Name = amqqueue:get_name(Q), Name = amqqueue:get_name(Q),
?LOG_DEBUG("Will trigger a leader election for local quorum queue ~ts", ?LOG_DEBUG("Will trigger a leader election for local quorum queue ~ts",
[rabbit_misc:rs(Name)]), [rabbit_misc:rs(Name)]),
%% we trigger an election and exclude this node from the list of candidates %% we trigger an election and exclude this node from the list of candidates
%% by simply shutting its local QQ replica (Ra server) %% by simply shutting its local QQ replica (Ra server)
RaLeader = amqqueue:get_pid(Q), RaLeader = amqqueue:get_pid(Q),
@ -2325,11 +2325,11 @@ transfer_leadership(_TransferCandidates) ->
stop_local_quorum_queue_followers() -> stop_local_quorum_queue_followers() ->
Queues = rabbit_amqqueue:list_local_followers(), Queues = rabbit_amqqueue:list_local_followers(),
?LOG_INFO("Will stop local follower replicas of ~b quorum queues on this node", ?LOG_INFO("Will stop local follower replicas of ~b quorum queues on this node",
[length(Queues)]), [length(Queues)]),
_ = [begin _ = [begin
Name = amqqueue:get_name(Q), Name = amqqueue:get_name(Q),
?LOG_DEBUG("Will stop a local follower replica of quorum queue ~ts", ?LOG_DEBUG("Will stop a local follower replica of quorum queue ~ts",
[rabbit_misc:rs(Name)]), [rabbit_misc:rs(Name)]),
%% shut down Ra nodes so that they are not considered for leader election %% shut down Ra nodes so that they are not considered for leader election
{RegisteredName, _LeaderNode} = amqqueue:get_pid(Q), {RegisteredName, _LeaderNode} = amqqueue:get_pid(Q),
RaNode = {RegisteredName, node()}, RaNode = {RegisteredName, node()},
@ -2352,13 +2352,13 @@ revive_local_queue_members() ->
%% empty binary as the vhost name. %% empty binary as the vhost name.
{Recovered, Failed} = rabbit_quorum_queue:recover(<<>>, Queues), {Recovered, Failed} = rabbit_quorum_queue:recover(<<>>, Queues),
?LOG_DEBUG("Successfully revived ~b quorum queue replicas", ?LOG_DEBUG("Successfully revived ~b quorum queue replicas",
[length(Recovered)]), [length(Recovered)]),
case length(Failed) of case length(Failed) of
0 -> 0 ->
ok; ok;
NumFailed -> NumFailed ->
?LOG_ERROR("Failed to revive ~b quorum queue replicas", ?LOG_ERROR("Failed to revive ~b quorum queue replicas",
[NumFailed]) [NumFailed])
end, end,
?LOG_INFO("Restart of local quorum queue replicas is complete"), ?LOG_INFO("Restart of local quorum queue replicas is complete"),

View File

@ -242,8 +242,8 @@ remove_members(Q, [Node | Nodes]) ->
{error, Err} -> {error, Err} ->
QName = amqqueue:get_name(Q), QName = amqqueue:get_name(Q),
?LOG_DEBUG("~ts: failed to remove member (replica) on node " ?LOG_DEBUG("~ts: failed to remove member (replica) on node "
"~w, error: ~w", "~w, error: ~w",
[rabbit_misc:rs(QName), Node, Err]) [rabbit_misc:rs(QName), Node, Err])
end, end,
remove_members(Q, Nodes). remove_members(Q, Nodes).

View File

@ -351,13 +351,13 @@ start_connection(Parent, HelperSups, RanchRef, Deb, Sock) ->
ConnName = dynamic_connection_name(Name), ConnName = dynamic_connection_name(Name),
ConnDuration = connection_duration(ConnectedAt0), ConnDuration = connection_duration(ConnectedAt0),
?LOG_INFO("closing AMQP connection (~ts, vhost: '~ts', user: '~ts', duration: '~ts')", ?LOG_INFO("closing AMQP connection (~ts, vhost: '~ts', user: '~ts', duration: '~ts')",
[ConnName, VHost, Username, ConnDuration]); [ConnName, VHost, Username, ConnDuration]);
%% just to be more defensive %% just to be more defensive
_ -> _ ->
ConnName = dynamic_connection_name(Name), ConnName = dynamic_connection_name(Name),
ConnDuration = connection_duration(ConnectedAt), ConnDuration = connection_duration(ConnectedAt),
?LOG_INFO("closing AMQP connection (~ts, duration: '~ts')", ?LOG_INFO("closing AMQP connection (~ts, duration: '~ts')",
[ConnName, ConnDuration]) [ConnName, ConnDuration])
end end
catch catch
Ex -> Ex ->
@ -1376,11 +1376,11 @@ handle_method0(#'connection.update_secret'{new_secret = NewSecret, reason = Reas
State#v1{connection = Conn#connection{user = User1}}; State#v1{connection = Conn#connection{user = User1}};
{refused, Message} -> {refused, Message} ->
?LOG_ERROR("Secret update was refused for user '~ts': ~tp", ?LOG_ERROR("Secret update was refused for user '~ts': ~tp",
[Username, Message]), [Username, Message]),
rabbit_misc:protocol_error(not_allowed, "New secret was refused by one of the backends", []); rabbit_misc:protocol_error(not_allowed, "New secret was refused by one of the backends", []);
{error, Message} -> {error, Message} ->
?LOG_ERROR("Secret update for user '~ts' failed: ~tp", ?LOG_ERROR("Secret update for user '~ts' failed: ~tp",
[Username, Message]), [Username, Message]),
rabbit_misc:protocol_error(not_allowed, rabbit_misc:protocol_error(not_allowed,
"Secret update failed", []) "Secret update failed", [])
end; end;
@ -1842,7 +1842,7 @@ augment_connection_log_name(#connection{name = Name} = Connection) ->
UserSpecifiedName -> UserSpecifiedName ->
LogName = <<Name/binary, " - ", UserSpecifiedName/binary>>, LogName = <<Name/binary, " - ", UserSpecifiedName/binary>>,
?LOG_INFO("connection ~ts has a client-provided name: ~ts", ?LOG_INFO("connection ~ts has a client-provided name: ~ts",
[Name, UserSpecifiedName]), [Name, UserSpecifiedName]),
?store_proc_name(LogName), ?store_proc_name(LogName),
Connection#connection{log_name = LogName} Connection#connection{log_name = LogName}
end. end.

View File

@ -38,7 +38,7 @@ start(VHost) ->
%% e.g. some integration tests do it %% e.g. some integration tests do it
{error, {no_such_vhost, VHost}} -> {error, {no_such_vhost, VHost}} ->
?LOG_ERROR("Failed to start a recovery terms manager for vhost ~ts: vhost no longer exists!", ?LOG_ERROR("Failed to start a recovery terms manager for vhost ~ts: vhost no longer exists!",
[VHost]), [VHost]),
{error, {no_such_vhost, VHost}} {error, {no_such_vhost, VHost}}
end. end.
@ -54,7 +54,7 @@ stop(VHost) ->
%% see start/1 %% see start/1
{error, {no_such_vhost, VHost}} -> {error, {no_such_vhost, VHost}} ->
?LOG_ERROR("Failed to stop a recovery terms manager for vhost ~ts: vhost no longer exists!", ?LOG_ERROR("Failed to stop a recovery terms manager for vhost ~ts: vhost no longer exists!",
[VHost]), [VHost]),
ok ok
end. end.
@ -83,7 +83,7 @@ clear(VHost) ->
%% see start/1 %% see start/1
catch _:badarg -> catch _:badarg ->
?LOG_ERROR("Failed to clear recovery terms for vhost ~ts: table no longer exists!", ?LOG_ERROR("Failed to clear recovery terms for vhost ~ts: table no longer exists!",
[VHost]), [VHost]),
ok ok
end, end,
flush(VHost). flush(VHost).
@ -140,7 +140,7 @@ open_table(VHost, RamFile, RetriesLeft) ->
%% Wait before retrying %% Wait before retrying
DelayInMs = 1000, DelayInMs = 1000,
?LOG_WARNING("Failed to open a recovery terms DETS file at ~tp. Will delete it and retry in ~tp ms (~tp retries left)", ?LOG_WARNING("Failed to open a recovery terms DETS file at ~tp. Will delete it and retry in ~tp ms (~tp retries left)",
[File, DelayInMs, RetriesLeft]), [File, DelayInMs, RetriesLeft]),
timer:sleep(DelayInMs), timer:sleep(DelayInMs),
open_table(VHost, RamFile, RetriesLeft - 1) open_table(VHost, RamFile, RetriesLeft - 1)
end end
@ -154,7 +154,7 @@ flush(VHost) ->
%% see clear/1 %% see clear/1
catch _:badarg -> catch _:badarg ->
?LOG_ERROR("Failed to sync recovery terms table for vhost ~ts: the table no longer exists!", ?LOG_ERROR("Failed to sync recovery terms table for vhost ~ts: the table no longer exists!",
[VHost]), [VHost]),
ok ok
end. end.
@ -167,6 +167,6 @@ close_table(VHost) ->
%% see clear/1 %% see clear/1
catch _:badarg -> catch _:badarg ->
?LOG_ERROR("Failed to close recovery terms table for vhost ~ts: the table no longer exists!", ?LOG_ERROR("Failed to close recovery terms table for vhost ~ts: the table no longer exists!",
[VHost]), [VHost]),
ok ok
end. end.

View File

@ -127,8 +127,8 @@ set_any(VHost, Component, Name, Term, User) ->
set_any0(VHost, Component, Name, Term, User) -> set_any0(VHost, Component, Name, Term, User) ->
?LOG_DEBUG("Asked to set or update runtime parameter '~ts' in vhost '~ts' " ?LOG_DEBUG("Asked to set or update runtime parameter '~ts' in vhost '~ts' "
"for component '~ts', value: ~tp", "for component '~ts', value: ~tp",
[Name, VHost, Component, Term]), [Name, VHost, Component, Term]),
case lookup_component(Component) of case lookup_component(Component) of
{ok, Mod} -> {ok, Mod} ->
case is_within_limit(Component) of case is_within_limit(Component) of

View File

@ -200,8 +200,8 @@ auth_config_sane() ->
case proplists:get_value(verify, Opts) of case proplists:get_value(verify, Opts) of
verify_peer -> true; verify_peer -> true;
V -> ?LOG_WARNING("TLS peer verification (authentication) is " V -> ?LOG_WARNING("TLS peer verification (authentication) is "
"disabled, ssl_options.verify value used: ~tp. " "disabled, ssl_options.verify value used: ~tp. "
"See https://www.rabbitmq.com/docs/ssl#peer-verification to learn more.", [V]), "See https://www.rabbitmq.com/docs/ssl#peer-verification to learn more.", [V]),
false false
end. end.

View File

@ -176,7 +176,7 @@ restart_stream(Q, Options)
when ?is_amqqueue(Q) andalso when ?is_amqqueue(Q) andalso
?amqqueue_is_stream(Q) -> ?amqqueue_is_stream(Q) ->
?LOG_INFO("restarting stream ~s in vhost ~s with options ~p", ?LOG_INFO("restarting stream ~s in vhost ~s with options ~p",
[maps:get(name, amqqueue:get_type_state(Q)), amqqueue:get_vhost(Q), Options]), [maps:get(name, amqqueue:get_type_state(Q)), amqqueue:get_vhost(Q), Options]),
#{name := StreamId} = amqqueue:get_type_state(Q), #{name := StreamId} = amqqueue:get_type_state(Q),
case process_command({restart_stream, StreamId, Options}) of case process_command({restart_stream, StreamId, Options}) of
{ok, {ok, LeaderPid}, _} -> {ok, {ok, LeaderPid}, _} ->
@ -219,7 +219,7 @@ add_replica(Q, Node) when ?is_amqqueue(Q) ->
false -> false ->
Name = rabbit_misc:rs(amqqueue:get_name(Q)), Name = rabbit_misc:rs(amqqueue:get_name(Q)),
?LOG_INFO("~ts : adding replica ~ts to ~ts Replication State: ~w", ?LOG_INFO("~ts : adding replica ~ts to ~ts Replication State: ~w",
[?MODULE, Node, Name, ReplState0]), [?MODULE, Node, Name, ReplState0]),
StreamId = maps:get(name, amqqueue:get_type_state(Q)), StreamId = maps:get(name, amqqueue:get_type_state(Q)),
case process_command({add_replica, StreamId, #{node => Node}}) of case process_command({add_replica, StreamId, #{node => Node}}) of
{ok, Result, _} -> {ok, Result, _} ->
@ -446,7 +446,7 @@ process_command([Server | Servers], Cmd) ->
element(1, Cmd) element(1, Cmd)
end, end,
?LOG_WARNING("Coordinator timeout on server ~w when processing command ~W", ?LOG_WARNING("Coordinator timeout on server ~w when processing command ~W",
[element(2, Server), CmdLabel, 10]), [element(2, Server), CmdLabel, 10]),
process_command(Servers, Cmd); process_command(Servers, Cmd);
{error, noproc} -> {error, noproc} ->
process_command(Servers, Cmd); process_command(Servers, Cmd);
@ -518,8 +518,8 @@ start_coordinator_cluster() ->
?MODULE, version, [])], ?MODULE, version, [])],
MinVersion = lists:min([version() | Versions]), MinVersion = lists:min([version() | Versions]),
?LOG_DEBUG("Starting stream coordinator on nodes: ~w, " ?LOG_DEBUG("Starting stream coordinator on nodes: ~w, "
"initial machine version ~b", "initial machine version ~b",
[Nodes, MinVersion]), [Nodes, MinVersion]),
case ra:start_cluster(?RA_SYSTEM, case ra:start_cluster(?RA_SYSTEM,
[make_ra_conf(Node, Nodes, MinVersion) [make_ra_conf(Node, Nodes, MinVersion)
|| Node <- Nodes]) of || Node <- Nodes]) of
@ -528,7 +528,7 @@ start_coordinator_cluster() ->
Started; Started;
{error, cluster_not_formed} -> {error, cluster_not_formed} ->
?LOG_WARNING("Stream coordinator could not be started on nodes ~w", ?LOG_WARNING("Stream coordinator could not be started on nodes ~w",
[Nodes]), [Nodes]),
[] []
end. end.
@ -742,7 +742,7 @@ apply(Meta, {nodeup, Node} = Cmd,
single_active_consumer = Sac1}, ok, Effects2); single_active_consumer = Sac1}, ok, Effects2);
apply(Meta, {machine_version, From, To}, State0) -> apply(Meta, {machine_version, From, To}, State0) ->
?LOG_INFO("Stream coordinator machine version changes from ~tp to ~tp, " ?LOG_INFO("Stream coordinator machine version changes from ~tp to ~tp, "
++ "applying incremental upgrade.", [From, To]), ++ "applying incremental upgrade.", [From, To]),
%% RA applies machine upgrades from any version to any version, e.g. 0 -> 2. %% RA applies machine upgrades from any version to any version, e.g. 0 -> 2.
%% We fill in the gaps here, applying all 1-to-1 machine upgrades. %% We fill in the gaps here, applying all 1-to-1 machine upgrades.
{State1, Effects} = lists:foldl(fun(Version, {S0, Eff0}) -> {State1, Effects} = lists:foldl(fun(Version, {S0, Eff0}) ->
@ -758,7 +758,7 @@ apply(Meta, {timeout, {sac, node_disconnected, #{connection_pid := Pid}}},
Effects); Effects);
apply(Meta, UnkCmd, State) -> apply(Meta, UnkCmd, State) ->
?LOG_DEBUG("~ts: unknown command ~W", ?LOG_DEBUG("~ts: unknown command ~W",
[?MODULE, UnkCmd, 10]), [?MODULE, UnkCmd, 10]),
return(Meta, State, {error, unknown_command}, []). return(Meta, State, {error, unknown_command}, []).
return(#{index := Idx}, State, Reply, Effects) -> return(#{index := Idx}, State, Reply, Effects) ->
@ -844,8 +844,8 @@ maybe_resize_coordinator_cluster(LeaderPid, SacNodes, MachineVersion) ->
%% any remaining members will be added %% any remaining members will be added
%% next tick %% next tick
?LOG_INFO("~ts: New rabbit node(s) detected, " ?LOG_INFO("~ts: New rabbit node(s) detected, "
"adding : ~w", "adding : ~w",
[?MODULE, New]), [?MODULE, New]),
add_member(Members, New) add_member(Members, New)
end, end,
case MemberNodes -- RabbitNodes of case MemberNodes -- RabbitNodes of
@ -856,8 +856,8 @@ maybe_resize_coordinator_cluster(LeaderPid, SacNodes, MachineVersion) ->
%% coordinator member is now removed as part %% coordinator member is now removed as part
%% of the forget_cluster_node command %% of the forget_cluster_node command
?LOG_INFO("~ts: Rabbit node(s) removed " ?LOG_INFO("~ts: Rabbit node(s) removed "
"from the cluster, " "from the cluster, "
"deleting: ~w", [?MODULE, Old]), "deleting: ~w", [?MODULE, Old]),
_ = remove_member(Leader, Members, Old), _ = remove_member(Leader, Members, Old),
ok ok
end, end,
@ -876,8 +876,8 @@ maybe_handle_stale_nodes(SacNodes, BrokerNodes,
ok; ok;
Stale when length(BrokerNodes) > 0 -> Stale when length(BrokerNodes) > 0 ->
?LOG_DEBUG("Stale nodes detected in stream SAC " ?LOG_DEBUG("Stale nodes detected in stream SAC "
"coordinator: ~w. Purging state.", "coordinator: ~w. Purging state.",
[Stale]), [Stale]),
ra:pipeline_command(LeaderPid, sac_make_purge_nodes(Stale)), ra:pipeline_command(LeaderPid, sac_make_purge_nodes(Stale)),
ok; ok;
_ -> _ ->
@ -905,15 +905,15 @@ add_member(Members, Node) ->
ok; ok;
{error, Err} -> {error, Err} ->
?LOG_WARNING("~ts: Failed to add member, reason ~w" ?LOG_WARNING("~ts: Failed to add member, reason ~w"
"deleting started server on ~w", "deleting started server on ~w",
[?MODULE, Err, Node]), [?MODULE, Err, Node]),
case ra:force_delete_server(?RA_SYSTEM, ServerId) of case ra:force_delete_server(?RA_SYSTEM, ServerId) of
ok -> ok ->
ok; ok;
Err -> Err ->
?LOG_WARNING("~ts: Failed to delete server " ?LOG_WARNING("~ts: Failed to delete server "
"on ~w, reason ~w", "on ~w, reason ~w",
[?MODULE, Node, Err]), [?MODULE, Node, Err]),
ok ok
end end
end; end;
@ -936,14 +936,14 @@ add_member(Members, Node) ->
ok; ok;
Err -> Err ->
?LOG_WARNING("~ts: Failed to delete server " ?LOG_WARNING("~ts: Failed to delete server "
"on ~w, reason ~w", "on ~w, reason ~w",
[?MODULE, Node, Err]), [?MODULE, Node, Err]),
ok ok
end end
end; end;
Error -> Error ->
?LOG_WARNING("Stream coordinator server failed to start on node ~ts : ~W", ?LOG_WARNING("Stream coordinator server failed to start on node ~ts : ~W",
[Node, Error, 10]), [Node, Error, 10]),
ok ok
end. end.
@ -985,42 +985,42 @@ handle_aux(leader, _, {start_writer, StreamId,
#{epoch := Epoch, node := Node} = Args, Conf}, #{epoch := Epoch, node := Node} = Args, Conf},
Aux, RaAux) -> Aux, RaAux) ->
?LOG_DEBUG("~ts: running action: 'start_writer'" ?LOG_DEBUG("~ts: running action: 'start_writer'"
" for ~ts on node ~w in epoch ~b", " for ~ts on node ~w in epoch ~b",
[?MODULE, StreamId, Node, Epoch]), [?MODULE, StreamId, Node, Epoch]),
ActionFun = phase_start_writer(StreamId, Args, Conf), ActionFun = phase_start_writer(StreamId, Args, Conf),
run_action(starting, StreamId, Args, ActionFun, Aux, RaAux); run_action(starting, StreamId, Args, ActionFun, Aux, RaAux);
handle_aux(leader, _, {start_replica, StreamId, handle_aux(leader, _, {start_replica, StreamId,
#{epoch := Epoch, node := Node} = Args, Conf}, #{epoch := Epoch, node := Node} = Args, Conf},
Aux, RaAux) -> Aux, RaAux) ->
?LOG_DEBUG("~ts: running action: 'start_replica'" ?LOG_DEBUG("~ts: running action: 'start_replica'"
" for ~ts on node ~w in epoch ~b", " for ~ts on node ~w in epoch ~b",
[?MODULE, StreamId, Node, Epoch]), [?MODULE, StreamId, Node, Epoch]),
ActionFun = phase_start_replica(StreamId, Args, Conf), ActionFun = phase_start_replica(StreamId, Args, Conf),
run_action(starting, StreamId, Args, ActionFun, Aux, RaAux); run_action(starting, StreamId, Args, ActionFun, Aux, RaAux);
handle_aux(leader, _, {stop, StreamId, #{node := Node, handle_aux(leader, _, {stop, StreamId, #{node := Node,
epoch := Epoch} = Args, Conf}, epoch := Epoch} = Args, Conf},
Aux, RaAux) -> Aux, RaAux) ->
?LOG_DEBUG("~ts: running action: 'stop'" ?LOG_DEBUG("~ts: running action: 'stop'"
" for ~ts on node ~w in epoch ~b", " for ~ts on node ~w in epoch ~b",
[?MODULE, StreamId, Node, Epoch]), [?MODULE, StreamId, Node, Epoch]),
ActionFun = phase_stop_member(StreamId, Args, Conf), ActionFun = phase_stop_member(StreamId, Args, Conf),
run_action(stopping, StreamId, Args, ActionFun, Aux, RaAux); run_action(stopping, StreamId, Args, ActionFun, Aux, RaAux);
handle_aux(leader, _, {update_mnesia, StreamId, Args, Conf}, handle_aux(leader, _, {update_mnesia, StreamId, Args, Conf},
#aux{actions = _Monitors} = Aux, RaAux) -> #aux{actions = _Monitors} = Aux, RaAux) ->
?LOG_DEBUG("~ts: running action: 'update_mnesia'" ?LOG_DEBUG("~ts: running action: 'update_mnesia'"
" for ~ts", [?MODULE, StreamId]), " for ~ts", [?MODULE, StreamId]),
ActionFun = phase_update_mnesia(StreamId, Args, Conf), ActionFun = phase_update_mnesia(StreamId, Args, Conf),
run_action(updating_mnesia, StreamId, Args, ActionFun, Aux, RaAux); run_action(updating_mnesia, StreamId, Args, ActionFun, Aux, RaAux);
handle_aux(leader, _, {update_retention, StreamId, Args, _Conf}, handle_aux(leader, _, {update_retention, StreamId, Args, _Conf},
#aux{actions = _Monitors} = Aux, RaAux) -> #aux{actions = _Monitors} = Aux, RaAux) ->
?LOG_DEBUG("~ts: running action: 'update_retention'" ?LOG_DEBUG("~ts: running action: 'update_retention'"
" for ~ts", [?MODULE, StreamId]), " for ~ts", [?MODULE, StreamId]),
ActionFun = phase_update_retention(StreamId, Args), ActionFun = phase_update_retention(StreamId, Args),
run_action(update_retention, StreamId, Args, ActionFun, Aux, RaAux); run_action(update_retention, StreamId, Args, ActionFun, Aux, RaAux);
handle_aux(leader, _, {delete_member, StreamId, #{node := Node} = Args, Conf}, handle_aux(leader, _, {delete_member, StreamId, #{node := Node} = Args, Conf},
#aux{actions = _Monitors} = Aux, RaAux) -> #aux{actions = _Monitors} = Aux, RaAux) ->
?LOG_DEBUG("~ts: running action: 'delete_member'" ?LOG_DEBUG("~ts: running action: 'delete_member'"
" for ~ts ~ts", [?MODULE, StreamId, Node]), " for ~ts ~ts", [?MODULE, StreamId, Node]),
ActionFun = phase_delete_member(StreamId, Args, Conf), ActionFun = phase_delete_member(StreamId, Args, Conf),
run_action(delete_member, StreamId, Args, ActionFun, Aux, RaAux); run_action(delete_member, StreamId, Args, ActionFun, Aux, RaAux);
handle_aux(leader, _, fail_active_actions, handle_aux(leader, _, fail_active_actions,
@ -1045,8 +1045,8 @@ handle_aux(leader, _, {down, Pid, Reason},
case maps:get(Pid, Monitors0, undefined) of case maps:get(Pid, Monitors0, undefined) of
{StreamId, Action, #{node := Node, epoch := Epoch} = Args} -> {StreamId, Action, #{node := Node, epoch := Epoch} = Args} ->
?LOG_WARNING("~ts: error while executing action ~w for stream queue ~ts, " ?LOG_WARNING("~ts: error while executing action ~w for stream queue ~ts, "
" node ~ts, epoch ~b Err: ~w", " node ~ts, epoch ~b Err: ~w",
[?MODULE, Action, StreamId, Node, Epoch, Reason]), [?MODULE, Action, StreamId, Node, Epoch, Reason]),
Monitors = maps:remove(Pid, Monitors0), Monitors = maps:remove(Pid, Monitors0),
Cmd = {action_failed, StreamId, Args#{action => Action}}, Cmd = {action_failed, StreamId, Args#{action => Action}},
send_self_command(Cmd), send_self_command(Cmd),
@ -1112,7 +1112,7 @@ phase_start_replica(StreamId, #{epoch := Epoch,
try osiris_replica:start(Node, Conf0) of try osiris_replica:start(Node, Conf0) of
{ok, Pid} -> {ok, Pid} ->
?LOG_INFO("~ts: ~ts: replica started on ~ts in ~b pid ~w", ?LOG_INFO("~ts: ~ts: replica started on ~ts in ~b pid ~w",
[?MODULE, StreamId, Node, Epoch, Pid]), [?MODULE, StreamId, Node, Epoch, Pid]),
send_self_command({member_started, StreamId, send_self_command({member_started, StreamId,
Args#{pid => Pid}}); Args#{pid => Pid}});
{error, already_present} -> {error, already_present} ->
@ -1128,12 +1128,12 @@ phase_start_replica(StreamId, #{epoch := Epoch,
Args#{pid => Pid}}); Args#{pid => Pid}});
{error, Reason} -> {error, Reason} ->
?LOG_WARNING("~ts: Error while starting replica for ~ts on node ~ts in ~b : ~W", ?LOG_WARNING("~ts: Error while starting replica for ~ts on node ~ts in ~b : ~W",
[?MODULE, maps:get(name, Conf0), Node, Epoch, Reason, 10]), [?MODULE, maps:get(name, Conf0), Node, Epoch, Reason, 10]),
maybe_sleep(Reason), maybe_sleep(Reason),
send_action_failed(StreamId, starting, Args) send_action_failed(StreamId, starting, Args)
catch _:Error -> catch _:Error ->
?LOG_WARNING("~ts: Error while starting replica for ~ts on node ~ts in ~b : ~W", ?LOG_WARNING("~ts: Error while starting replica for ~ts on node ~ts in ~b : ~W",
[?MODULE, maps:get(name, Conf0), Node, Epoch, Error, 10]), [?MODULE, maps:get(name, Conf0), Node, Epoch, Error, 10]),
maybe_sleep(Error), maybe_sleep(Error),
send_action_failed(StreamId, starting, Args) send_action_failed(StreamId, starting, Args)
end end
@ -1154,13 +1154,13 @@ phase_delete_member(StreamId, #{node := Node} = Arg, Conf) ->
try osiris:delete_member(Node, Conf) of try osiris:delete_member(Node, Conf) of
ok -> ok ->
?LOG_INFO("~ts: Member deleted for ~ts : on node ~ts", ?LOG_INFO("~ts: Member deleted for ~ts : on node ~ts",
[?MODULE, StreamId, Node]), [?MODULE, StreamId, Node]),
send_self_command({member_deleted, StreamId, Arg}); send_self_command({member_deleted, StreamId, Arg});
_ -> _ ->
send_action_failed(StreamId, deleting, Arg) send_action_failed(StreamId, deleting, Arg)
catch _:E -> catch _:E ->
?LOG_WARNING("~ts: Error while deleting member for ~ts : on node ~ts ~W", ?LOG_WARNING("~ts: Error while deleting member for ~ts : on node ~ts ~W",
[?MODULE, StreamId, Node, E, 10]), [?MODULE, StreamId, Node, E, 10]),
maybe_sleep(E), maybe_sleep(E),
send_action_failed(StreamId, deleting, Arg) send_action_failed(StreamId, deleting, Arg)
end; end;
@ -1168,7 +1168,7 @@ phase_delete_member(StreamId, #{node := Node} = Arg, Conf) ->
%% node is no longer a cluster member, we return success to avoid %% node is no longer a cluster member, we return success to avoid
%% trying to delete the member indefinitely %% trying to delete the member indefinitely
?LOG_INFO("~ts: Member deleted/forgotten for ~ts : node ~ts is no longer a cluster member", ?LOG_INFO("~ts: Member deleted/forgotten for ~ts : node ~ts is no longer a cluster member",
[?MODULE, StreamId, Node]), [?MODULE, StreamId, Node]),
send_self_command({member_deleted, StreamId, Arg}) send_self_command({member_deleted, StreamId, Arg})
end end
end. end.
@ -1182,22 +1182,22 @@ phase_stop_member(StreamId, #{node := Node, epoch := Epoch} = Arg0, Conf) ->
{ok, Tail} -> {ok, Tail} ->
Arg = Arg0#{tail => Tail}, Arg = Arg0#{tail => Tail},
?LOG_DEBUG("~ts: ~ts: member stopped on ~ts in ~b Tail ~w", ?LOG_DEBUG("~ts: ~ts: member stopped on ~ts in ~b Tail ~w",
[?MODULE, StreamId, Node, Epoch, Tail]), [?MODULE, StreamId, Node, Epoch, Tail]),
send_self_command({member_stopped, StreamId, Arg}); send_self_command({member_stopped, StreamId, Arg});
Err -> Err ->
?LOG_WARNING("~ts: failed to get tail of member ~ts on ~ts in ~b Error: ~w", ?LOG_WARNING("~ts: failed to get tail of member ~ts on ~ts in ~b Error: ~w",
[?MODULE, StreamId, Node, Epoch, Err]), [?MODULE, StreamId, Node, Epoch, Err]),
maybe_sleep(Err), maybe_sleep(Err),
send_action_failed(StreamId, stopping, Arg0) send_action_failed(StreamId, stopping, Arg0)
catch _:Err -> catch _:Err ->
?LOG_WARNING("~ts: failed to get tail of member ~ts on ~ts in ~b Error: ~w", ?LOG_WARNING("~ts: failed to get tail of member ~ts on ~ts in ~b Error: ~w",
[?MODULE, StreamId, Node, Epoch, Err]), [?MODULE, StreamId, Node, Epoch, Err]),
maybe_sleep(Err), maybe_sleep(Err),
send_action_failed(StreamId, stopping, Arg0) send_action_failed(StreamId, stopping, Arg0)
end end
catch _:Err -> catch _:Err ->
?LOG_WARNING("~ts: failed to stop member ~ts ~w Error: ~w", ?LOG_WARNING("~ts: failed to stop member ~ts ~w Error: ~w",
[?MODULE, StreamId, Node, Err]), [?MODULE, StreamId, Node, Err]),
maybe_sleep(Err), maybe_sleep(Err),
send_action_failed(StreamId, stopping, Arg0) send_action_failed(StreamId, stopping, Arg0)
end end
@ -1209,17 +1209,17 @@ phase_start_writer(StreamId, #{epoch := Epoch, node := Node} = Args0, Conf) ->
{ok, Pid} -> {ok, Pid} ->
Args = Args0#{epoch => Epoch, pid => Pid}, Args = Args0#{epoch => Epoch, pid => Pid},
?LOG_INFO("~ts: started writer ~ts on ~w in ~b", ?LOG_INFO("~ts: started writer ~ts on ~w in ~b",
[?MODULE, StreamId, Node, Epoch]), [?MODULE, StreamId, Node, Epoch]),
send_self_command({member_started, StreamId, Args}); send_self_command({member_started, StreamId, Args});
Err -> Err ->
%% no sleep for writer failures as we want to trigger a new %% no sleep for writer failures as we want to trigger a new
%% election asap %% election asap
?LOG_WARNING("~ts: failed to start writer ~ts on ~ts in ~b Error: ~w", ?LOG_WARNING("~ts: failed to start writer ~ts on ~ts in ~b Error: ~w",
[?MODULE, StreamId, Node, Epoch, Err]), [?MODULE, StreamId, Node, Epoch, Err]),
send_action_failed(StreamId, starting, Args0) send_action_failed(StreamId, starting, Args0)
catch _:Err -> catch _:Err ->
?LOG_WARNING("~ts: failed to start writer ~ts on ~ts in ~b Error: ~w", ?LOG_WARNING("~ts: failed to start writer ~ts on ~ts in ~b Error: ~w",
[?MODULE, StreamId, Node, Epoch, Err]), [?MODULE, StreamId, Node, Epoch, Err]),
send_action_failed(StreamId, starting, Args0) send_action_failed(StreamId, starting, Args0)
end end
end. end.
@ -1232,12 +1232,12 @@ phase_update_retention(StreamId, #{pid := Pid,
send_self_command({retention_updated, StreamId, Args}); send_self_command({retention_updated, StreamId, Args});
{error, Reason} = Err -> {error, Reason} = Err ->
?LOG_WARNING("~ts: failed to update retention for ~ts ~w Reason: ~w", ?LOG_WARNING("~ts: failed to update retention for ~ts ~w Reason: ~w",
[?MODULE, StreamId, node(Pid), Reason]), [?MODULE, StreamId, node(Pid), Reason]),
maybe_sleep(Err), maybe_sleep(Err),
send_action_failed(StreamId, update_retention, Args) send_action_failed(StreamId, update_retention, Args)
catch _:Err -> catch _:Err ->
?LOG_WARNING("~ts: failed to update retention for ~ts ~w Error: ~w", ?LOG_WARNING("~ts: failed to update retention for ~ts ~w Error: ~w",
[?MODULE, StreamId, node(Pid), Err]), [?MODULE, StreamId, node(Pid), Err]),
maybe_sleep(Err), maybe_sleep(Err),
send_action_failed(StreamId, update_retention, Args) send_action_failed(StreamId, update_retention, Args)
end end
@ -1283,7 +1283,7 @@ phase_update_mnesia(StreamId, Args, #{reference := QName,
leader_pid := LeaderPid} = Conf) -> leader_pid := LeaderPid} = Conf) ->
fun() -> fun() ->
?LOG_DEBUG("~ts: running mnesia update for ~ts: ~W", ?LOG_DEBUG("~ts: running mnesia update for ~ts: ~W",
[?MODULE, StreamId, Conf, 10]), [?MODULE, StreamId, Conf, 10]),
Fun = fun (Q) -> Fun = fun (Q) ->
case amqqueue:get_type_state(Q) of case amqqueue:get_type_state(Q) of
#{name := S} when S == StreamId -> #{name := S} when S == StreamId ->
@ -1295,7 +1295,7 @@ phase_update_mnesia(StreamId, Args, #{reference := QName,
S = maps:get(name, Ts, undefined), S = maps:get(name, Ts, undefined),
%% TODO log as side-effect %% TODO log as side-effect
?LOG_DEBUG("~ts: refusing mnesia update for stale stream id ~s, current ~s", ?LOG_DEBUG("~ts: refusing mnesia update for stale stream id ~s, current ~s",
[?MODULE, StreamId, S]), [?MODULE, StreamId, S]),
%% if the stream id isn't a match this is a stale %% if the stream id isn't a match this is a stale
%% update from a previous stream incarnation for the %% update from a previous stream incarnation for the
%% same queue name and we ignore it %% same queue name and we ignore it
@ -1305,8 +1305,8 @@ phase_update_mnesia(StreamId, Args, #{reference := QName,
try rabbit_amqqueue:update(QName, Fun) of try rabbit_amqqueue:update(QName, Fun) of
not_found -> not_found ->
?LOG_DEBUG("~ts: resource for stream id ~ts not found, " ?LOG_DEBUG("~ts: resource for stream id ~ts not found, "
"recovering from rabbit_durable_queue", "recovering from rabbit_durable_queue",
[?MODULE, StreamId]), [?MODULE, StreamId]),
%% This can happen during recovery %% This can happen during recovery
%% we need to re-initialise the queue record %% we need to re-initialise the queue record
%% if the stream id is a match %% if the stream id is a match
@ -1318,7 +1318,7 @@ phase_update_mnesia(StreamId, Args, #{reference := QName,
case amqqueue:get_type_state(Q) of case amqqueue:get_type_state(Q) of
#{name := S} when S == StreamId -> #{name := S} when S == StreamId ->
?LOG_DEBUG("~ts: initializing queue record for stream id ~ts", ?LOG_DEBUG("~ts: initializing queue record for stream id ~ts",
[?MODULE, StreamId]), [?MODULE, StreamId]),
ok = rabbit_amqqueue:ensure_rabbit_queue_record_is_initialized(Fun(Q)), ok = rabbit_amqqueue:ensure_rabbit_queue_record_is_initialized(Fun(Q)),
ok; ok;
_ -> _ ->
@ -1330,7 +1330,7 @@ phase_update_mnesia(StreamId, Args, #{reference := QName,
send_self_command({mnesia_updated, StreamId, Args}) send_self_command({mnesia_updated, StreamId, Args})
catch _:E -> catch _:E ->
?LOG_DEBUG("~ts: failed to update mnesia for ~ts: ~W", ?LOG_DEBUG("~ts: failed to update mnesia for ~ts: ~W",
[?MODULE, StreamId, E, 10]), [?MODULE, StreamId, E, 10]),
send_action_failed(StreamId, updating_mnesia, Args) send_action_failed(StreamId, updating_mnesia, Args)
end end
end. end.
@ -1497,7 +1497,7 @@ update_stream0(#{system_time := _Ts},
%% do we just ignore any members started events from unexpected %% do we just ignore any members started events from unexpected
%% epochs? %% epochs?
?LOG_WARNING("~ts: member started unexpected ~w ~w", ?LOG_WARNING("~ts: member started unexpected ~w ~w",
[?MODULE, Args, Member]), [?MODULE, Args, Member]),
Stream0 Stream0
end; end;
update_stream0(#{system_time := _Ts}, update_stream0(#{system_time := _Ts},
@ -2058,8 +2058,8 @@ fail_active_actions(Streams, Exclude) ->
case Mnesia of case Mnesia of
{updating, E} -> {updating, E} ->
?LOG_DEBUG("~ts: failing stale action to trigger retry. " ?LOG_DEBUG("~ts: failing stale action to trigger retry. "
"Stream ID: ~ts, node: ~w, action: ~w", "Stream ID: ~ts, node: ~w, action: ~w",
[?MODULE, Id, node(), updating_mnesia]), [?MODULE, Id, node(), updating_mnesia]),
send_self_command({action_failed, Id, send_self_command({action_failed, Id,
#{action => updating_mnesia, #{action => updating_mnesia,
index => 0, index => 0,
@ -2078,8 +2078,8 @@ fail_action(_StreamId, _, #member{current = undefined}) ->
fail_action(StreamId, Node, #member{role = {_, E}, fail_action(StreamId, Node, #member{role = {_, E},
current = {Action, Idx}}) -> current = {Action, Idx}}) ->
?LOG_DEBUG("~ts: failing stale action to trigger retry. " ?LOG_DEBUG("~ts: failing stale action to trigger retry. "
"Stream ID: ~ts, node: ~w, action: ~w", "Stream ID: ~ts, node: ~w, action: ~w",
[?MODULE, StreamId, node(), Action]), [?MODULE, StreamId, node(), Action]),
%% if we have an action send failure message %% if we have an action send failure message
send_self_command({action_failed, StreamId, send_self_command({action_failed, StreamId,
#{action => Action, #{action => Action,
@ -2275,7 +2275,7 @@ machine_version(1, 2, State = #?MODULE{streams = Streams0,
listeners = undefined}, Effects}; listeners = undefined}, Effects};
machine_version(2, 3, State) -> machine_version(2, 3, State) ->
?LOG_INFO("Stream coordinator machine version changes from 2 to 3, " ?LOG_INFO("Stream coordinator machine version changes from 2 to 3, "
"updating state."), "updating state."),
SacState = rabbit_stream_sac_coordinator_v4:init_state(), SacState = rabbit_stream_sac_coordinator_v4:init_state(),
{State#?MODULE{single_active_consumer = SacState}, {State#?MODULE{single_active_consumer = SacState},
[]}; []};
@ -2298,7 +2298,7 @@ machine_version(4 = From, 5, #?MODULE{single_active_consumer = Sac0} = State) ->
{State#?MODULE{single_active_consumer = Sac1}, []}; {State#?MODULE{single_active_consumer = Sac1}, []};
machine_version(From, To, State) -> machine_version(From, To, State) ->
?LOG_INFO("Stream coordinator machine version changes from ~tp to ~tp, no state changes required.", ?LOG_INFO("Stream coordinator machine version changes from ~tp to ~tp, no state changes required.",
[From, To]), [From, To]),
{State, []}. {State, []}.
-spec transfer_leadership([node()]) -> {ok, in_progress | undefined | node()} | {error, any()}. -spec transfer_leadership([node()]) -> {ok, in_progress | undefined | node()} | {error, any()}.

View File

@ -650,8 +650,8 @@ handle_event(_QName, {stream_local_member_change, Pid},
osiris_log:close(Log0), osiris_log:close(Log0),
CounterSpec = {{?MODULE, QName, self()}, []}, CounterSpec = {{?MODULE, QName, self()}, []},
?LOG_DEBUG("Re-creating Osiris reader for consumer ~tp at offset ~tp " ?LOG_DEBUG("Re-creating Osiris reader for consumer ~tp at offset ~tp "
" with options ~tp", " with options ~tp",
[T, Offset, Options]), [T, Offset, Options]),
{ok, Log1} = osiris:init_reader(Pid, Offset, CounterSpec, Options), {ok, Log1} = osiris:init_reader(Pid, Offset, CounterSpec, Options),
NextOffset = osiris_log:next_offset(Log1) - 1, NextOffset = osiris_log:next_offset(Log1) - 1,
?LOG_DEBUG("Registering offset listener at offset ~tp", [NextOffset]), ?LOG_DEBUG("Registering offset listener at offset ~tp", [NextOffset]),
@ -1002,7 +1002,7 @@ init(Q) when ?is_amqqueue(Q) ->
{error, stream_not_found}; {error, stream_not_found};
{error, coordinator_unavailable} = E -> {error, coordinator_unavailable} = E ->
?LOG_WARNING("Failed to start stream client ~tp: coordinator unavailable", ?LOG_WARNING("Failed to start stream client ~tp: coordinator unavailable",
[rabbit_misc:rs(QName)]), [rabbit_misc:rs(QName)]),
E E
end. end.
@ -1086,7 +1086,7 @@ delete_all_replicas(Node) ->
lists:map(fun(Q) -> lists:map(fun(Q) ->
QName = amqqueue:get_name(Q), QName = amqqueue:get_name(Q),
?LOG_INFO("~ts: removing replica on node ~w", ?LOG_INFO("~ts: removing replica on node ~w",
[rabbit_misc:rs(QName), Node]), [rabbit_misc:rs(QName), Node]),
#{name := StreamId} = amqqueue:get_type_state(Q), #{name := StreamId} = amqqueue:get_type_state(Q),
{ok, Reply, _} = rabbit_stream_coordinator:delete_replica(StreamId, Node), {ok, Reply, _} = rabbit_stream_coordinator:delete_replica(StreamId, Node),
case Reply of case Reply of
@ -1094,7 +1094,7 @@ delete_all_replicas(Node) ->
{QName, ok}; {QName, ok};
Err -> Err ->
?LOG_WARNING("~ts: failed to remove replica on node ~w, error: ~w", ?LOG_WARNING("~ts: failed to remove replica on node ~w, error: ~w",
[rabbit_misc:rs(QName), Node, Err]), [rabbit_misc:rs(QName), Node, Err]),
{QName, {error, Err}} {QName, {error, Err}}
end end
end, Streams). end, Streams).
@ -1366,7 +1366,7 @@ resend_all(#stream_client{leader = LeaderPid,
[] -> ok; [] -> ok;
[{Seq, _} | _] -> [{Seq, _} | _] ->
?LOG_DEBUG("stream client: resending from seq ~w num ~b", ?LOG_DEBUG("stream client: resending from seq ~w num ~b",
[Seq, maps:size(Corrs)]) [Seq, maps:size(Corrs)])
end, end,
[begin [begin
ok = osiris:write(LeaderPid, WriterId, Seq, stream_message(Msg)) ok = osiris:write(LeaderPid, WriterId, Seq, stream_message(Msg))
@ -1445,7 +1445,7 @@ revive() ->
-spec transfer_leadership_of_stream_coordinator([node()]) -> ok. -spec transfer_leadership_of_stream_coordinator([node()]) -> ok.
transfer_leadership_of_stream_coordinator([]) -> transfer_leadership_of_stream_coordinator([]) ->
?LOG_WARNING("Skipping leadership transfer of stream coordinator: no candidate " ?LOG_WARNING("Skipping leadership transfer of stream coordinator: no candidate "
"(online, not under maintenance) nodes to transfer to!"); "(online, not under maintenance) nodes to transfer to!");
transfer_leadership_of_stream_coordinator(TransferCandidates) -> transfer_leadership_of_stream_coordinator(TransferCandidates) ->
% try to transfer to the node with the lowest uptime; the assumption is that % try to transfer to the node with the lowest uptime; the assumption is that
% nodes are usually restarted in a rolling fashion, in a consistent order; % nodes are usually restarted in a rolling fashion, in a consistent order;

View File

@ -288,8 +288,8 @@ apply(#command_activate_consumer{vhost = VH, stream = S, consumer_name = Name},
case lookup_group(VH, S, Name, StreamGroups0) of case lookup_group(VH, S, Name, StreamGroups0) of
undefined -> undefined ->
?LOG_WARNING("Trying to activate consumer in group ~tp, but " ?LOG_WARNING("Trying to activate consumer in group ~tp, but "
"the group does not longer exist", "the group does not longer exist",
[{VH, S, Name}]), [{VH, S, Name}]),
{undefined, []}; {undefined, []};
G0 -> G0 ->
%% keep track of the former active, if any %% keep track of the former active, if any

View File

@ -253,8 +253,8 @@ apply(#command_activate_consumer{vhost = VirtualHost,
case lookup_group(VirtualHost, Stream, ConsumerName, StreamGroups0) of case lookup_group(VirtualHost, Stream, ConsumerName, StreamGroups0) of
undefined -> undefined ->
?LOG_WARNING("Trying to activate consumer in group ~tp, but " ?LOG_WARNING("Trying to activate consumer in group ~tp, but "
"the group does not longer exist", "the group does not longer exist",
[{VirtualHost, Stream, ConsumerName}]), [{VirtualHost, Stream, ConsumerName}]),
{undefined, []}; {undefined, []};
Group -> Group ->
#consumer{pid = Pid, subscription_id = SubId} = #consumer{pid = Pid, subscription_id = SubId} =

View File

@ -130,8 +130,8 @@ update_config(Fun) ->
Sessions = rabbit_amqp_session:list_local(), Sessions = rabbit_amqp_session:list_local(),
NonAmqpPids = rabbit_networking:local_non_amqp_connections(), NonAmqpPids = rabbit_networking:local_non_amqp_connections(),
?LOG_DEBUG("Refreshing state of channels, ~b sessions and ~b non " ?LOG_DEBUG("Refreshing state of channels, ~b sessions and ~b non "
"AMQP 0.9.1 connections after virtual host tracing changes...", "AMQP 0.9.1 connections after virtual host tracing changes...",
[length(Sessions), length(NonAmqpPids)]), [length(Sessions), length(NonAmqpPids)]),
Pids = Sessions ++ NonAmqpPids, Pids = Sessions ++ NonAmqpPids,
lists:foreach(fun(Pid) -> gen_server:cast(Pid, refresh_config) end, Pids), lists:foreach(fun(Pid) -> gen_server:cast(Pid, refresh_config) end, Pids),
{Time, ok} = timer:tc(fun rabbit_channel:refresh_config_local/0), {Time, ok} = timer:tc(fun rabbit_channel:refresh_config_local/0),

View File

@ -68,12 +68,12 @@ do_await_safe_online_quorum(IterationsLeft) ->
case length(EndangeredQueues) of case length(EndangeredQueues) of
0 -> ok; 0 -> ok;
N -> ?LOG_INFO("Waiting for ~p queues and streams to have quorum+1 replicas online. " N -> ?LOG_INFO("Waiting for ~p queues and streams to have quorum+1 replicas online. "
"You can list them with `rabbitmq-diagnostics check_if_node_is_quorum_critical`", [N]) "You can list them with `rabbitmq-diagnostics check_if_node_is_quorum_critical`", [N])
end, end,
case endangered_critical_components() of case endangered_critical_components() of
[] -> ok; [] -> ok;
_ -> ?LOG_INFO("Waiting for the following critical components to have quorum+1 replicas online: ~p.", _ -> ?LOG_INFO("Waiting for the following critical components to have quorum+1 replicas online: ~p.",
[endangered_critical_components()]) [endangered_critical_components()])
end; end;
_ -> _ ->
ok ok

View File

@ -394,11 +394,11 @@ do_start_msg_store(VHost, Type, Refs, StartFunState) ->
?LOG_INFO("Started message store of type ~ts for vhost '~ts'", [abbreviated_type(Type), VHost]); ?LOG_INFO("Started message store of type ~ts for vhost '~ts'", [abbreviated_type(Type), VHost]);
{error, {no_such_vhost, VHost}} = Err -> {error, {no_such_vhost, VHost}} = Err ->
?LOG_ERROR("Failed to start message store of type ~ts for vhost '~ts': the vhost no longer exists!", ?LOG_ERROR("Failed to start message store of type ~ts for vhost '~ts': the vhost no longer exists!",
[Type, VHost]), [Type, VHost]),
exit(Err); exit(Err);
{error, Error} -> {error, Error} ->
?LOG_ERROR("Failed to start message store of type ~ts for vhost '~ts': ~tp", ?LOG_ERROR("Failed to start message store of type ~ts for vhost '~ts': ~tp",
[Type, VHost, Error]), [Type, VHost, Error]),
exit({error, Error}) exit({error, Error})
end. end.
@ -893,7 +893,7 @@ convert_from_v1_to_v2_loop(QueueName, V1Index0, V2Index0, V2Store0,
%% embedded messages can take quite some time. %% embedded messages can take quite some time.
#resource{virtual_host = VHost, name = Name} = QueueName, #resource{virtual_host = VHost, name = Name} = QueueName,
?LOG_INFO("Queue ~ts in vhost ~ts converted ~b messages from v1 to v2", ?LOG_INFO("Queue ~ts in vhost ~ts converted ~b messages from v1 to v2",
[Name, VHost, length(Messages)]), [Name, VHost, length(Messages)]),
convert_from_v1_to_v2_loop(QueueName, V1Index, V2Index, V2Store, Counters, UpSeqId, HiSeqId, SkipFun). convert_from_v1_to_v2_loop(QueueName, V1Index, V2Index, V2Store, Counters, UpSeqId, HiSeqId, SkipFun).
%% Get the Timestamp property of the first msg, if present. This is %% Get the Timestamp property of the first msg, if present. This is

View File

@ -78,14 +78,14 @@ recover(VHost) ->
false -> false ->
DefaultType = rabbit_queue_type:default_alias(), DefaultType = rabbit_queue_type:default_alias(),
?LOG_INFO("Setting missing default queue type to '~p' for vhost '~ts'.", ?LOG_INFO("Setting missing default queue type to '~p' for vhost '~ts'.",
[DefaultType, VHost]), [DefaultType, VHost]),
case rabbit_db_vhost:merge_metadata(VHost, #{default_queue_type => DefaultType}) of case rabbit_db_vhost:merge_metadata(VHost, #{default_queue_type => DefaultType}) of
{ok, _UpdatedVHostRecord} -> {ok, _UpdatedVHostRecord} ->
ok; ok;
{error, Reason} -> {error, Reason} ->
% Log the error but continue recovery % Log the error but continue recovery
?LOG_WARNING("Failed to set the default queue type for vhost '~ts': ~p", ?LOG_WARNING("Failed to set the default queue type for vhost '~ts': ~p",
[VHost, Reason]) [VHost, Reason])
end end
end end
end, end,
@ -126,7 +126,7 @@ ensure_config_file(VHost) ->
?LEGACY_INDEX_SEGMENT_ENTRY_COUNT ?LEGACY_INDEX_SEGMENT_ENTRY_COUNT
end, end,
?LOG_INFO("Setting segment_entry_count for vhost '~ts' with ~b queues to '~b'", ?LOG_INFO("Setting segment_entry_count for vhost '~ts' with ~b queues to '~b'",
[VHost, length(QueueDirs), SegmentEntryCount]), [VHost, length(QueueDirs), SegmentEntryCount]),
file:write_file(Path, io_lib:format( file:write_file(Path, io_lib:format(
"%% This file is auto-generated! Edit at your own risk!~n" "%% This file is auto-generated! Edit at your own risk!~n"
"{segment_entry_count, ~b}.", "{segment_entry_count, ~b}.",
@ -208,7 +208,7 @@ do_add(Name, Metadata0, ActingUser) ->
#{default_queue_type := DQT} -> #{default_queue_type := DQT} ->
%% check that the queue type is known %% check that the queue type is known
?LOG_DEBUG("Default queue type of virtual host '~ts' is ~tp", ?LOG_DEBUG("Default queue type of virtual host '~ts' is ~tp",
[Name, DQT]), [Name, DQT]),
try rabbit_queue_type:discover(DQT) of try rabbit_queue_type:discover(DQT) of
QueueType when is_atom(QueueType) -> QueueType when is_atom(QueueType) ->
case rabbit_queue_type:is_enabled(QueueType) of case rabbit_queue_type:is_enabled(QueueType) of
@ -229,7 +229,7 @@ do_add(Name, Metadata0, ActingUser) ->
?LOG_INFO("Adding vhost '~ts' without a description", [Name]); ?LOG_INFO("Adding vhost '~ts' without a description", [Name]);
Description -> Description ->
?LOG_INFO("Adding vhost '~ts' (description: '~ts', tags: ~tp)", ?LOG_INFO("Adding vhost '~ts' (description: '~ts', tags: ~tp)",
[Name, Description, Tags]) [Name, Description, Tags])
end, end,
DefaultLimits = rabbit_db_vhost_defaults:list_limits(Name), DefaultLimits = rabbit_db_vhost_defaults:list_limits(Name),

View File

@ -49,8 +49,8 @@ init([VHost]) ->
catch _:Reason:Stacktrace -> catch _:Reason:Stacktrace ->
rabbit_amqqueue:mark_local_durable_queues_stopped(VHost), rabbit_amqqueue:mark_local_durable_queues_stopped(VHost),
?LOG_ERROR("Unable to recover vhost ~tp data. Reason ~tp~n" ?LOG_ERROR("Unable to recover vhost ~tp data. Reason ~tp~n"
" Stacktrace ~tp", " Stacktrace ~tp",
[VHost, Reason, Stacktrace]), [VHost, Reason, Stacktrace]),
{stop, Reason} {stop, Reason}
end. end.
@ -65,8 +65,8 @@ handle_info(check_vhost, VHost) ->
true -> {noreply, VHost}; true -> {noreply, VHost};
false -> false ->
?LOG_WARNING("Virtual host '~ts' is gone. " ?LOG_WARNING("Virtual host '~ts' is gone. "
"Stopping its top level supervisor.", "Stopping its top level supervisor.",
[VHost]), [VHost]),
%% Stop vhost's top supervisor in a one-off process to avoid a deadlock: %% Stop vhost's top supervisor in a one-off process to avoid a deadlock:
%% us (a child process) waiting for supervisor shutdown and our supervisor(s) %% us (a child process) waiting for supervisor shutdown and our supervisor(s)
%% waiting for us to shutdown. %% waiting for us to shutdown.

View File

@ -92,8 +92,8 @@ stop_and_delete_vhost(VHost) ->
ok; ok;
true -> true ->
?LOG_INFO("Stopping vhost supervisor ~tp" ?LOG_INFO("Stopping vhost supervisor ~tp"
" for vhost '~ts'", " for vhost '~ts'",
[VHostSupPid, VHost]), [VHostSupPid, VHost]),
case supervisor:terminate_child(?MODULE, WrapperPid) of case supervisor:terminate_child(?MODULE, WrapperPid) of
ok -> ok ->
true = ets:delete(?MODULE, VHost), true = ets:delete(?MODULE, VHost),
@ -114,9 +114,9 @@ stop_and_delete_vhost(VHost, Node) ->
ok -> ok; ok -> ok;
{badrpc, RpcErr} -> {badrpc, RpcErr} ->
?LOG_ERROR("Failed to stop and delete a vhost ~tp" ?LOG_ERROR("Failed to stop and delete a vhost ~tp"
" on node ~tp." " on node ~tp."
" Reason: ~tp", " Reason: ~tp",
[VHost, Node, RpcErr]), [VHost, Node, RpcErr]),
{error, RpcErr} {error, RpcErr}
end. end.

View File

@ -93,7 +93,7 @@ terminate(_Reason, #state{on_shutdown = OnShutdown, label = Label, ip = IPAddres
OnShutdown(IPAddress, Port) OnShutdown(IPAddress, Port)
catch _:Error -> catch _:Error ->
?LOG_ERROR("Failed to stop ~ts on ~ts:~tp: ~tp", ?LOG_ERROR("Failed to stop ~ts on ~ts:~tp: ~tp",
[Label, rabbit_misc:ntoab(IPAddress), Port, Error]) [Label, rabbit_misc:ntoab(IPAddress), Port, Error])
end. end.
code_change(_OldVsn, State, _Extra) -> code_change(_OldVsn, State, _Extra) ->

View File

@ -222,7 +222,7 @@ prop_common(InitialState) ->
{History, State, Result} = run_commands(?MODULE, Commands), {History, State, Result} = run_commands(?MODULE, Commands),
cmd_teardown_queue(State), cmd_teardown_queue(State),
?WHENFAIL(?LOG_ERROR("History: ~tp~nState: ~tp~nResult: ~tp", ?WHENFAIL(?LOG_ERROR("History: ~tp~nState: ~tp~nResult: ~tp",
[History, State, Result]), [History, State, Result]),
aggregate(command_names(Commands), Result =:= ok)) aggregate(command_names(Commands), Result =:= ok))
end) end)
). ).

View File

@ -18,11 +18,11 @@ amqp_params(ConnPid, Timeout) ->
gen_server:call(ConnPid, {info, [amqp_params]}, Timeout) gen_server:call(ConnPid, {info, [amqp_params]}, Timeout)
catch exit:{noproc, Error} -> catch exit:{noproc, Error} ->
?LOG_DEBUG("file ~tp, line ~tp - connection process ~tp not alive: ~tp", ?LOG_DEBUG("file ~tp, line ~tp - connection process ~tp not alive: ~tp",
[?FILE, ?LINE, ConnPid, Error]), [?FILE, ?LINE, ConnPid, Error]),
[]; [];
_:Error -> _:Error ->
?LOG_DEBUG("file ~tp, line ~tp - failed to get amqp_params from connection process ~tp: ~tp", ?LOG_DEBUG("file ~tp, line ~tp - failed to get amqp_params from connection process ~tp: ~tp",
[?FILE, ?LINE, ConnPid, Error]), [?FILE, ?LINE, ConnPid, Error]),
[] []
end, end,
process_amqp_params_result(P). process_amqp_params_result(P).

View File

@ -1725,7 +1725,7 @@ collect_conf_env_file_output(Context, Port, Marker, Output) ->
Context, Port, Marker, [Output, UnicodeChunk]); Context, Port, Marker, [Output, UnicodeChunk]);
{Port, {data, Chunk}} -> {Port, {data, Chunk}} ->
?LOG_WARNING("~tp unexpected non-binary chunk in " ?LOG_WARNING("~tp unexpected non-binary chunk in "
"conf env file output: ~tp~n", [?MODULE, Chunk]) "conf env file output: ~tp~n", [?MODULE, Chunk])
end. end.
post_port_cmd_output(#{os_type := {OSType, _}}, UnicodeOutput, ExitStatus) -> post_port_cmd_output(#{os_type := {OSType, _}}, UnicodeOutput, ExitStatus) ->
@ -2158,4 +2158,4 @@ unicode_characters_to_list(Input) ->
log_characters_to_list_error(Input, Partial, Rest) -> log_characters_to_list_error(Input, Partial, Rest) ->
?LOG_ERROR("error converting '~tp' to unicode string " ?LOG_ERROR("error converting '~tp' to unicode string "
"(partial '~tp', rest '~tp')", [Input, Partial, Rest]). "(partial '~tp', rest '~tp')", [Input, Partial, Rest]).

View File

@ -787,8 +787,8 @@ get_expected_env_str(Key, Default) ->
V = case env(Key) of V = case env(Key) of
Default -> Default ->
?LOG_WARNING("rabbitmq_auth_backend_ldap configuration key '~tp' is set to " ?LOG_WARNING("rabbitmq_auth_backend_ldap configuration key '~tp' is set to "
"the default value of '~tp', expected to get a non-default value", "the default value of '~tp', expected to get a non-default value",
[Key, Default]), [Key, Default]),
Default; Default;
V0 -> V0 ->
V0 V0

View File

@ -56,6 +56,6 @@ parse_pattern(Pattern) ->
try lists:map(fun(Part) -> cow_qs:urldecode(Part) end, Parts) try lists:map(fun(Part) -> cow_qs:urldecode(Part) end, Parts)
catch Type:Error -> catch Type:Error ->
?LOG_WARNING("Invalid pattern ~tp : ~tp", ?LOG_WARNING("Invalid pattern ~tp : ~tp",
[Pattern, {Type, Error}]), [Pattern, {Type, Error}]),
invalid invalid
end. end.

View File

@ -186,8 +186,8 @@ delete_bindings_in_mnesia(Bindings, DeleteFun) ->
delete_binding_in_mnesia(#binding{source = S, destination = D, key = RK}, DeleteFun) -> delete_binding_in_mnesia(#binding{source = S, destination = D, key = RK}, DeleteFun) ->
?LOG_DEBUG("Consistent hashing exchange: removing binding " ?LOG_DEBUG("Consistent hashing exchange: removing binding "
"from exchange ~ts to destination ~ts with routing key '~ts'", "from exchange ~ts to destination ~ts with routing key '~ts'",
[rabbit_misc:rs(S), rabbit_misc:rs(D), RK]), [rabbit_misc:rs(S), rabbit_misc:rs(D), RK]),
case mnesia:read(?HASH_RING_STATE_TABLE, S) of case mnesia:read(?HASH_RING_STATE_TABLE, S) of
[Chx0] -> [Chx0] ->
case DeleteFun(Chx0, D) of case DeleteFun(Chx0, D) of

View File

@ -158,18 +158,18 @@ policy_changed(_X1, _X2) -> ok.
add_binding(_Serial, _X, #binding{source = S, destination = D, key = K}) -> add_binding(_Serial, _X, #binding{source = S, destination = D, key = K}) ->
Weight = rabbit_data_coercion:to_integer(K), Weight = rabbit_data_coercion:to_integer(K),
?LOG_DEBUG("Consistent hashing exchange: adding binding from " ?LOG_DEBUG("Consistent hashing exchange: adding binding from "
"exchange ~ts to destination ~ts with routing key '~ts'", [rabbit_misc:rs(S), rabbit_misc:rs(D), K]), "exchange ~ts to destination ~ts with routing key '~ts'", [rabbit_misc:rs(S), rabbit_misc:rs(D), K]),
case rabbit_db_ch_exchange:create_binding(S, D, Weight, fun chx_hash_ring_update_fun/3) of case rabbit_db_ch_exchange:create_binding(S, D, Weight, fun chx_hash_ring_update_fun/3) of
already_exists -> already_exists ->
?LOG_DEBUG("Consistent hashing exchange: NOT adding binding from " ?LOG_DEBUG("Consistent hashing exchange: NOT adding binding from "
"exchange ~s to destination ~s with routing key '~s' " "exchange ~s to destination ~s with routing key '~s' "
"because this binding (possibly with a different " "because this binding (possibly with a different "
"routing key) already exists", "routing key) already exists",
[rabbit_misc:rs(S), rabbit_misc:rs(D), K]); [rabbit_misc:rs(S), rabbit_misc:rs(D), K]);
created -> created ->
?LOG_DEBUG("Consistent hashing exchange: adding binding from " ?LOG_DEBUG("Consistent hashing exchange: adding binding from "
"exchange ~s to destination ~s with routing key '~s'", "exchange ~s to destination ~s with routing key '~s'",
[rabbit_misc:rs(S), rabbit_misc:rs(D), K]) [rabbit_misc:rs(S), rabbit_misc:rs(D), K])
end. end.
chx_hash_ring_update_fun(#chx_hash_ring{bucket_map = BM0, chx_hash_ring_update_fun(#chx_hash_ring{bucket_map = BM0,

View File

@ -179,7 +179,7 @@ handle_info(check_internal_exchange, State = #state{internal_exchange = IntXName
case check_internal_exchange(IntXNameBin, State) of case check_internal_exchange(IntXNameBin, State) of
upstream_not_found -> upstream_not_found ->
?LOG_WARNING("Federation link could not find upstream exchange '~ts' and will restart", ?LOG_WARNING("Federation link could not find upstream exchange '~ts' and will restart",
[IntXNameBin]), [IntXNameBin]),
{stop, {shutdown, restart}, State}; {stop, {shutdown, restart}, State};
_ -> _ ->
TRef = erlang:send_after(Interval, self(), check_internal_exchange), TRef = erlang:send_after(Interval, self(), check_internal_exchange),
@ -472,7 +472,7 @@ go(S0 = {not_started, {Upstream, UParams, DownXName}}) ->
internal_exchange_interval = Interval}), internal_exchange_interval = Interval}),
Bindings), Bindings),
?LOG_INFO("Federation link for ~ts (upstream: ~ts) will perform internal exchange checks " ?LOG_INFO("Federation link for ~ts (upstream: ~ts) will perform internal exchange checks "
"every ~b seconds", [rabbit_misc:rs(DownXName), UName, round(Interval / 1000)]), "every ~b seconds", [rabbit_misc:rs(DownXName), UName, round(Interval / 1000)]),
TRef = erlang:send_after(Interval, self(), check_internal_exchange), TRef = erlang:send_after(Interval, self(), check_internal_exchange),
{noreply, State#state{internal_exchange_timer = TRef}} {noreply, State#state{internal_exchange_timer = TRef}}
end, Upstream, UParams, DownXName, S0). end, Upstream, UParams, DownXName, S0).
@ -485,12 +485,12 @@ log_link_startup_attempt(#upstream{name = Name, channel_use_mode = ChMode}, Down
%% Otherwise open a separate one. %% Otherwise open a separate one.
reuse_command_channel(MainCh, #upstream{name = UName}, DownXName) -> reuse_command_channel(MainCh, #upstream{name = UName}, DownXName) ->
?LOG_DEBUG("Will use a single channel for both schema operations and message transfer on links to upstream '~ts' for downstream federated ~ts", ?LOG_DEBUG("Will use a single channel for both schema operations and message transfer on links to upstream '~ts' for downstream federated ~ts",
[UName, rabbit_misc:rs(DownXName)]), [UName, rabbit_misc:rs(DownXName)]),
{ok, MainCh}. {ok, MainCh}.
open_command_channel(Conn, Upstream = #upstream{name = UName}, UParams, DownXName, S0) -> open_command_channel(Conn, Upstream = #upstream{name = UName}, UParams, DownXName, S0) ->
?LOG_DEBUG("Will open a command channel to upstream '~ts' for downstream federated ~ts", ?LOG_DEBUG("Will open a command channel to upstream '~ts' for downstream federated ~ts",
[UName, rabbit_misc:rs(DownXName)]), [UName, rabbit_misc:rs(DownXName)]),
case amqp_connection:open_channel(Conn) of case amqp_connection:open_channel(Conn) of
{ok, CCh} -> {ok, CCh} ->
erlang:monitor(process, CCh), erlang:monitor(process, CCh),
@ -585,7 +585,7 @@ ensure_internal_exchange(IntXNameBin,
channel = Ch, channel = Ch,
downstream_exchange = #resource{virtual_host = DVhost}}) -> downstream_exchange = #resource{virtual_host = DVhost}}) ->
?LOG_DEBUG("Exchange federation will set up exchange '~ts' in upstream '~ts'", ?LOG_DEBUG("Exchange federation will set up exchange '~ts' in upstream '~ts'",
[IntXNameBin, UName]), [IntXNameBin, UName]),
#upstream_params{params = Params} = rabbit_federation_util:deobfuscate_upstream_params(UParams), #upstream_params{params = Params} = rabbit_federation_util:deobfuscate_upstream_params(UParams),
?LOG_DEBUG("Will delete upstream exchange '~ts'", [IntXNameBin]), ?LOG_DEBUG("Will delete upstream exchange '~ts'", [IntXNameBin]),
delete_upstream_exchange(Conn, IntXNameBin), delete_upstream_exchange(Conn, IntXNameBin),
@ -615,7 +615,7 @@ check_internal_exchange(IntXNameBin,
#upstream_params{params = Params} = #upstream_params{params = Params} =
rabbit_federation_util:deobfuscate_upstream_params(UParams), rabbit_federation_util:deobfuscate_upstream_params(UParams),
?LOG_DEBUG("Exchange federation will check on exchange '~ts' in upstream '~ts'", ?LOG_DEBUG("Exchange federation will check on exchange '~ts' in upstream '~ts'",
[IntXNameBin, UName]), [IntXNameBin, UName]),
Base = #'exchange.declare'{exchange = IntXNameBin, Base = #'exchange.declare'{exchange = IntXNameBin,
passive = true, passive = true,
durable = true, durable = true,
@ -635,7 +635,7 @@ check_internal_exchange(IntXNameBin,
upstream_not_found; upstream_not_found;
(Code, Text) -> (Code, Text) ->
?LOG_WARNING("Federation ~ts internal upstream exchange check failed: ~tp ~tp", ?LOG_WARNING("Federation ~ts internal upstream exchange check failed: ~tp ~tp",
[rabbit_misc:rs(XName), Code, Text]), [rabbit_misc:rs(XName), Code, Text]),
error error
end). end).

View File

@ -39,7 +39,7 @@ start(_Type, _StartArgs) ->
start(); start();
false -> false ->
?LOG_WARNING("Metrics collection disabled in management agent, " ?LOG_WARNING("Metrics collection disabled in management agent, "
"management only interface started", []), "management only interface started", []),
start() start()
end. end.
@ -89,8 +89,8 @@ get_listeners_config() ->
{true, true, true} -> {true, true, true} ->
%% what is happening? %% what is happening?
?LOG_WARNING("Management plugin: TCP, TLS and a legacy (management.listener.*) listener are all configured. " ?LOG_WARNING("Management plugin: TCP, TLS and a legacy (management.listener.*) listener are all configured. "
"Only two listeners at a time are supported. " "Only two listeners at a time are supported. "
"Ignoring the legacy listener"), "Ignoring the legacy listener"),
[get_tcp_listener(), [get_tcp_listener(),
get_tls_listener()] get_tls_listener()]
end, end,

View File

@ -89,7 +89,7 @@ session_infos(Pids) ->
{true, Infos}; {true, Infos};
{error, Reason} -> {error, Reason} ->
?LOG_WARNING("failed to get infos for session ~p: ~tp", ?LOG_WARNING("failed to get infos for session ~p: ~tp",
[Pid, Reason]), [Pid, Reason]),
false false
end end
end, Pids). end, Pids).

View File

@ -203,9 +203,9 @@ get_autoscaling_group_node_list(Instance, Tag) ->
end; end;
error -> error ->
?LOG_WARNING("Cannot discover any nodes because no AWS " ?LOG_WARNING("Cannot discover any nodes because no AWS "
"autoscaling group could be found in " "autoscaling group could be found in "
"the instance description. Make sure that this instance" "the instance description. Make sure that this instance"
" belongs to an autoscaling group.", []), " belongs to an autoscaling group.", []),
{ok, {[], disc}} {ok, {[], disc}}
end; end;
_ -> _ ->
@ -341,7 +341,7 @@ get_hostname_by_tags(Tags) ->
case get_hostname_names(Path) of case get_hostname_names(Path) of
error -> error ->
?LOG_WARNING("Cannot discover any nodes because AWS " ?LOG_WARNING("Cannot discover any nodes because AWS "
"instance description with tags ~tp failed", [Tags]), "instance description with tags ~tp failed", [Tags]),
[]; [];
Names -> Names ->
Names Names

View File

@ -53,10 +53,10 @@ list_nodes() ->
Fun0 = fun() -> {ok, {[], disc}} end, Fun0 = fun() -> {ok, {[], disc}} end,
Fun1 = fun() -> Fun1 = fun() ->
?LOG_WARNING("Peer discovery backend is set to ~ts " ?LOG_WARNING("Peer discovery backend is set to ~ts "
"but final config does not contain " "but final config does not contain "
"rabbit.cluster_formation.peer_discovery_etcd. " "rabbit.cluster_formation.peer_discovery_etcd. "
"Cannot discover any nodes because etcd cluster details are not configured!", "Cannot discover any nodes because etcd cluster details are not configured!",
[?MODULE]), [?MODULE]),
{ok, {[], disc}} {ok, {[], disc}}
end, end,
Fun2 = fun(_Proplist) -> Fun2 = fun(_Proplist) ->

View File

@ -87,7 +87,7 @@ callback_mode() -> [state_functions, state_enter].
terminate(Reason, State, Data) -> terminate(Reason, State, Data) ->
?LOG_DEBUG("etcd v3 API client will terminate in state ~tp, reason: ~tp", ?LOG_DEBUG("etcd v3 API client will terminate in state ~tp, reason: ~tp",
[State, Reason]), [State, Reason]),
_ = disconnect(?ETCD_CONN_NAME, Data), _ = disconnect(?ETCD_CONN_NAME, Data),
?LOG_DEBUG("etcd v3 API client has disconnected"), ?LOG_DEBUG("etcd v3 API client has disconnected"),
?LOG_DEBUG("etcd v3 API client: total number of connections to etcd is ~tp", [length(eetcd_conn_sup:info())]), ?LOG_DEBUG("etcd v3 API client: total number of connections to etcd is ~tp", [length(eetcd_conn_sup:info())]),
@ -135,11 +135,11 @@ unlock(ServerRef, LockKey) ->
recover(enter, _PrevState, #statem_data{endpoints = Endpoints}) -> recover(enter, _PrevState, #statem_data{endpoints = Endpoints}) ->
?LOG_DEBUG("etcd v3 API client has entered recovery state, endpoints: ~ts", ?LOG_DEBUG("etcd v3 API client has entered recovery state, endpoints: ~ts",
[string:join(Endpoints, ",")]), [string:join(Endpoints, ",")]),
keep_state_and_data; keep_state_and_data;
recover(internal, start, Data = #statem_data{endpoints = Endpoints, connection_monitor = Ref}) -> recover(internal, start, Data = #statem_data{endpoints = Endpoints, connection_monitor = Ref}) ->
?LOG_DEBUG("etcd v3 API client will attempt to connect, endpoints: ~ts", ?LOG_DEBUG("etcd v3 API client will attempt to connect, endpoints: ~ts",
[string:join(Endpoints, ",")]), [string:join(Endpoints, ",")]),
maybe_demonitor(Ref), maybe_demonitor(Ref),
case connect(?ETCD_CONN_NAME, Endpoints, Data) of case connect(?ETCD_CONN_NAME, Endpoints, Data) of
{ok, Pid} -> {ok, Pid} ->
@ -202,7 +202,7 @@ connected({call, From}, {unlock, GeneratedKey}, Data = #statem_data{connection_n
reply_and_retain_state(From, ok); reply_and_retain_state(From, ok);
{error, _} = Error -> {error, _} = Error ->
?LOG_DEBUG("etcd peer discovery: failed to release registration lock, lock owner key: ~ts, error ~tp", ?LOG_DEBUG("etcd peer discovery: failed to release registration lock, lock owner key: ~ts, error ~tp",
[GeneratedKey, Error]), [GeneratedKey, Error]),
reply_and_retain_state(From, Error) reply_and_retain_state(From, Error)
end; end;
connected({call, From}, register, Data = #statem_data{connection_name = Conn}) -> connected({call, From}, register, Data = #statem_data{connection_name = Conn}) ->
@ -234,7 +234,7 @@ connected({call, From}, list_keys, Data = #statem_data{connection_name = Conn})
[length(Values)]), [length(Values)]),
ParsedNodes = lists:filtermap(fun extract_node/1, Values), ParsedNodes = lists:filtermap(fun extract_node/1, Values),
?LOG_INFO("etcd peer discovery: successfully extracted nodes: ~0tp", ?LOG_INFO("etcd peer discovery: successfully extracted nodes: ~0tp",
[ParsedNodes]), [ParsedNodes]),
gen_statem:reply(From, lists:usort(ParsedNodes)), gen_statem:reply(From, lists:usort(ParsedNodes)),
keep_state_and_data. keep_state_and_data.
@ -298,7 +298,7 @@ extract_node({CreatedRev, Payload}) ->
case rabbit_json:try_decode(Payload) of case rabbit_json:try_decode(Payload) of
{error, _Error} -> {error, _Error} ->
?LOG_ERROR("etcd peer discovery: failed to extract node name from etcd value ~tp", ?LOG_ERROR("etcd peer discovery: failed to extract node name from etcd value ~tp",
[Payload]), [Payload]),
false; false;
{ok, Map} -> {ok, Map} ->
case maps:get(<<"node">>, Map, undefined) of case maps:get(<<"node">>, Map, undefined) of
@ -341,9 +341,9 @@ do_connect(Name, Endpoints, Data = #statem_data{username = Username}) ->
false -> [Errors0] false -> [Errors0]
end, end,
?LOG_DEBUG("etcd peer discovery: connection errors: ~tp", ?LOG_DEBUG("etcd peer discovery: connection errors: ~tp",
[Errors]), [Errors]),
?LOG_DEBUG("etcd peer discovery: are all connection errors benign?: ~tp", ?LOG_DEBUG("etcd peer discovery: are all connection errors benign?: ~tp",
[lists:all(fun error_is_already_started/1, Errors)]), [lists:all(fun error_is_already_started/1, Errors)]),
%% If all errors are already_started we can ignore them. %% If all errors are already_started we can ignore them.
%% eetcd registers connections under a name %% eetcd registers connections under a name
case lists:all(fun error_is_already_started/1, Errors) of case lists:all(fun error_is_already_started/1, Errors) of

View File

@ -64,7 +64,7 @@ seed_node(undefined, SeedNodeOrdinal) ->
[Nodename], [Nodename],
#{domain => ?RMQLOG_DOMAIN_PEER_DISC}), #{domain => ?RMQLOG_DOMAIN_PEER_DISC}),
{error, lists:flatten(io_lib:format("my nodename (~s) doesn't seem to have the expected -ID suffix " {error, lists:flatten(io_lib:format("my nodename (~s) doesn't seem to have the expected -ID suffix "
"like StatefulSet pods should", [?MODULE:node()]))} "like StatefulSet pods should", [?MODULE:node()]))}
end; end;
seed_node(SeedNode, _SeedNodeOrdinal) -> seed_node(SeedNode, _SeedNodeOrdinal) ->
% elp:ignore atoms_exhaustion % elp:ignore atoms_exhaustion

View File

@ -62,7 +62,7 @@ collect_mf(_Registry, Callback) ->
catch catch
exit:{timeout, _} -> exit:{timeout, _} ->
?LOG_ERROR("alarm_metrics_collector failed to emit metrics: " ?LOG_ERROR("alarm_metrics_collector failed to emit metrics: "
"rabbitm_alarm:get_local_alarms timed out"), "rabbitm_alarm:get_local_alarms timed out"),
%% We are not going to render any alarm metrics here. %% We are not going to render any alarm metrics here.
%% Breaks continuity but at least doesn't crash the %% Breaks continuity but at least doesn't crash the
%% whole scraping endpoint %% whole scraping endpoint

View File

@ -92,8 +92,8 @@ declare_queue(XName, Durable, N, Node) ->
catch catch
_Error:Reason -> _Error:Reason ->
?LOG_ERROR("sharding failed to declare queue for exchange ~tp" ?LOG_ERROR("sharding failed to declare queue for exchange ~tp"
" - soft error:~n~tp", " - soft error:~n~tp",
[exchange_bin(XName), Reason]), [exchange_bin(XName), Reason]),
error error
end. end.

View File

@ -214,8 +214,8 @@ terminate({shutdown, restart}, State = #state{name = Name}) ->
ok; ok;
terminate({{shutdown, {server_initiated_close, Code, Reason}}, _}, State = #state{name = Name}) -> terminate({{shutdown, {server_initiated_close, Code, Reason}}, _}, State = #state{name = Name}) ->
?LOG_ERROR("Shovel ~ts is stopping: one of its connections closed " ?LOG_ERROR("Shovel ~ts is stopping: one of its connections closed "
"with code ~b, reason: ~ts", "with code ~b, reason: ~ts",
[human_readable_name(Name), Code, Reason]), [human_readable_name(Name), Code, Reason]),
rabbit_shovel_status:report(State#state.name, State#state.type, rabbit_shovel_status:report(State#state.name, State#state.type,
{terminated, "needed a restart"}), {terminated, "needed a restart"}),
close_connections(State), close_connections(State),

View File

@ -49,7 +49,7 @@ resource_exists(ReqData, Context) ->
case get_shovel_node(VHost, Name, ReqData, Context) of case get_shovel_node(VHost, Name, ReqData, Context) of
undefined -> undefined ->
?LOG_ERROR("Shovel with the name '~ts' was not found on virtual host '~ts'. " ?LOG_ERROR("Shovel with the name '~ts' was not found on virtual host '~ts'. "
"It may be failing to connect and report its status.", "It may be failing to connect and report its status.",
[Name, VHost]), [Name, VHost]),
case cowboy_req:method(ReqData) of case cowboy_req:method(ReqData) of
<<"DELETE">> -> <<"DELETE">> ->

View File

@ -89,7 +89,7 @@ parse_default_user([{passcode, Passcode} | Rest], Configuration) ->
default_passcode = Passcode}); default_passcode = Passcode});
parse_default_user([Unknown | Rest], Configuration) -> parse_default_user([Unknown | Rest], Configuration) ->
?LOG_WARNING("rabbit_stomp: ignoring invalid default_user " ?LOG_WARNING("rabbit_stomp: ignoring invalid default_user "
"configuration option: ~tp", [Unknown]), "configuration option: ~tp", [Unknown]),
parse_default_user(Rest, Configuration). parse_default_user(Rest, Configuration).
report_configuration(#stomp_configuration{ report_configuration(#stomp_configuration{
@ -99,7 +99,7 @@ report_configuration(#stomp_configuration{
case Login of case Login of
undefined -> ok; undefined -> ok;
_ -> ?LOG_INFO("rabbit_stomp: default user '~ts' " _ -> ?LOG_INFO("rabbit_stomp: default user '~ts' "
"enabled", [Login]) "enabled", [Login])
end, end,
case ImplicitConnect of case ImplicitConnect of

View File

@ -616,19 +616,19 @@ do_login(Username, Passwd, VirtualHost, Heartbeat, AdapterInfo, Version,
binary_to_list(Username) ++ "'", [], State); binary_to_list(Username) ++ "'", [], State);
{error, not_allowed} -> {error, not_allowed} ->
?LOG_WARNING("STOMP login failed for user '~ts': " ?LOG_WARNING("STOMP login failed for user '~ts': "
"virtual host access not allowed", [Username]), "virtual host access not allowed", [Username]),
error("Bad CONNECT", "Virtual host '" ++ error("Bad CONNECT", "Virtual host '" ++
binary_to_list(VirtualHost) ++ binary_to_list(VirtualHost) ++
"' access denied", State); "' access denied", State);
{error, access_refused} -> {error, access_refused} ->
?LOG_WARNING("STOMP login failed for user '~ts': " ?LOG_WARNING("STOMP login failed for user '~ts': "
"virtual host access not allowed", [Username]), "virtual host access not allowed", [Username]),
error("Bad CONNECT", "Virtual host '" ++ error("Bad CONNECT", "Virtual host '" ++
binary_to_list(VirtualHost) ++ binary_to_list(VirtualHost) ++
"' access denied", State); "' access denied", State);
{error, not_loopback} -> {error, not_loopback} ->
?LOG_WARNING("STOMP login failed for user '~ts': " ?LOG_WARNING("STOMP login failed for user '~ts': "
"this user's access is restricted to localhost", [Username]), "this user's access is restricted to localhost", [Username]),
error("Bad CONNECT", "non-loopback access denied", State) error("Bad CONNECT", "non-loopback access denied", State)
end. end.
@ -1196,10 +1196,10 @@ priv_error(Message, Format, Args, ServerPrivateDetail, State) ->
log_error(Message, Detail, ServerPrivateDetail) -> log_error(Message, Detail, ServerPrivateDetail) ->
?LOG_ERROR("STOMP error frame sent:~n" ?LOG_ERROR("STOMP error frame sent:~n"
"Message: ~tp~n" "Message: ~tp~n"
"Detail: ~tp~n" "Detail: ~tp~n"
"Server private detail: ~tp", "Server private detail: ~tp",
[Message, Detail, ServerPrivateDetail]). [Message, Detail, ServerPrivateDetail]).
%%---------------------------------------------------------------------------- %%----------------------------------------------------------------------------
%% Frame sending utilities %% Frame sending utilities

View File

@ -79,7 +79,7 @@ init([SupHelperPid, Ref, Configuration]) ->
ProcInitArgs), ProcInitArgs),
?LOG_INFO("accepting STOMP connection ~tp (~ts)", ?LOG_INFO("accepting STOMP connection ~tp (~ts)",
[self(), ConnName]), [self(), ConnName]),
ParseState = rabbit_stomp_frame:initial_state(), ParseState = rabbit_stomp_frame:initial_state(),
_ = register_resource_alarm(), _ = register_resource_alarm(),
@ -339,7 +339,7 @@ code_change(_OldVsn, State, _Extra) ->
log_reason({network_error, {ssl_upgrade_error, closed}, ConnName}, _State) -> log_reason({network_error, {ssl_upgrade_error, closed}, ConnName}, _State) ->
?LOG_ERROR("STOMP detected TLS upgrade error on ~ts: connection closed", ?LOG_ERROR("STOMP detected TLS upgrade error on ~ts: connection closed",
[ConnName]); [ConnName]);
log_reason({network_error, log_reason({network_error,
@ -359,12 +359,10 @@ log_reason({network_error,
{tls_alert, Alert}}, ConnName}, _State) -> {tls_alert, Alert}}, ConnName}, _State) ->
log_tls_alert(Alert, ConnName); log_tls_alert(Alert, ConnName);
log_reason({network_error, {ssl_upgrade_error, Reason}, ConnName}, _State) -> log_reason({network_error, {ssl_upgrade_error, Reason}, ConnName}, _State) ->
?LOG_ERROR("STOMP detected TLS upgrade error on ~ts: ~tp", ?LOG_ERROR("STOMP detected TLS upgrade error on ~ts: ~tp", [ConnName, Reason]);
[ConnName, Reason]);
log_reason({network_error, Reason, ConnName}, _State) -> log_reason({network_error, Reason, ConnName}, _State) ->
?LOG_ERROR("STOMP detected network error on ~ts: ~tp", ?LOG_ERROR("STOMP detected network error on ~ts: ~tp", [ConnName, Reason]);
[ConnName, Reason]);
log_reason({network_error, Reason}, _State) -> log_reason({network_error, Reason}, _State) ->
?LOG_ERROR("STOMP detected network error: ~tp", [Reason]); ?LOG_ERROR("STOMP detected network error: ~tp", [Reason]);
@ -373,12 +371,12 @@ log_reason({shutdown, client_heartbeat_timeout},
#reader_state{ processor_state = ProcState }) -> #reader_state{ processor_state = ProcState }) ->
AdapterName = rabbit_stomp_processor:adapter_name(ProcState), AdapterName = rabbit_stomp_processor:adapter_name(ProcState),
?LOG_WARNING("STOMP detected missed client heartbeat(s) " ?LOG_WARNING("STOMP detected missed client heartbeat(s) "
"on connection ~ts, closing it", [AdapterName]); "on connection ~ts, closing it", [AdapterName]);
log_reason({shutdown, {server_initiated_close, Reason}}, log_reason({shutdown, {server_initiated_close, Reason}},
#reader_state{conn_name = ConnName}) -> #reader_state{conn_name = ConnName}) ->
?LOG_INFO("closing STOMP connection ~tp (~ts), reason: ~ts", ?LOG_INFO("closing STOMP connection ~tp (~ts), reason: ~ts",
[self(), ConnName, Reason]); [self(), ConnName, Reason]);
log_reason(normal, #reader_state{conn_name = ConnName}) -> log_reason(normal, #reader_state{conn_name = ConnName}) ->
?LOG_INFO("closing STOMP connection ~tp (~ts)", [self(), ConnName]); ?LOG_INFO("closing STOMP connection ~tp (~ts)", [self(), ConnName]);
@ -389,7 +387,7 @@ log_reason(shutdown, undefined) ->
log_reason(Reason, #reader_state{processor_state = ProcState}) -> log_reason(Reason, #reader_state{processor_state = ProcState}) ->
AdapterName = rabbit_stomp_processor:adapter_name(ProcState), AdapterName = rabbit_stomp_processor:adapter_name(ProcState),
?LOG_WARNING("STOMP connection ~ts terminated" ?LOG_WARNING("STOMP connection ~ts terminated"
" with reason ~tp, closing it", [AdapterName, Reason]). " with reason ~tp, closing it", [AdapterName, Reason]).
log_tls_alert(handshake_failure, ConnName) -> log_tls_alert(handshake_failure, ConnName) ->
?LOG_ERROR("STOMP detected TLS upgrade error on ~ts: handshake failure", ?LOG_ERROR("STOMP detected TLS upgrade error on ~ts: handshake failure",

View File

@ -66,23 +66,23 @@ delete(VirtualHost, Reference, Username) ->
case rabbit_amqqueue:lookup(Name) of case rabbit_amqqueue:lookup(Name) of
{ok, Q} -> {ok, Q} ->
?LOG_DEBUG("Found queue record ~tp, checking if it is a stream", ?LOG_DEBUG("Found queue record ~tp, checking if it is a stream",
[Reference]), [Reference]),
case is_stream_queue(Q) of case is_stream_queue(Q) of
true -> true ->
?LOG_DEBUG("Queue record ~tp is a stream, trying to delete it", ?LOG_DEBUG("Queue record ~tp is a stream, trying to delete it",
[Reference]), [Reference]),
{ok, _} = {ok, _} =
rabbit_stream_queue:delete(Q, false, false, Username), rabbit_stream_queue:delete(Q, false, false, Username),
?LOG_DEBUG("Stream ~tp deleted", [Reference]), ?LOG_DEBUG("Stream ~tp deleted", [Reference]),
{ok, deleted}; {ok, deleted};
_ -> _ ->
?LOG_DEBUG("Queue record ~tp is NOT a stream, returning error", ?LOG_DEBUG("Queue record ~tp is NOT a stream, returning error",
[Reference]), [Reference]),
{error, reference_not_found} {error, reference_not_found}
end; end;
{error, not_found} -> {error, not_found} ->
?LOG_DEBUG("Stream ~tp not found, cannot delete it", ?LOG_DEBUG("Stream ~tp not found, cannot delete it",
[Reference]), [Reference]),
{error, reference_not_found} {error, reference_not_found}
end. end.
@ -173,8 +173,8 @@ delete_super_stream(VirtualHost, SuperStream, Username) ->
ok; ok;
{error, Error} -> {error, Error} ->
?LOG_WARNING("Error while deleting super stream exchange ~tp, " ?LOG_WARNING("Error while deleting super stream exchange ~tp, "
"~tp", "~tp",
[SuperStream, Error]), [SuperStream, Error]),
ok ok
end, end,
[begin [begin
@ -183,8 +183,8 @@ delete_super_stream(VirtualHost, SuperStream, Username) ->
ok; ok;
{error, Err} -> {error, Err} ->
?LOG_WARNING("Error while delete partition ~tp of super stream " ?LOG_WARNING("Error while delete partition ~tp of super stream "
"~tp, ~tp", "~tp, ~tp",
[Stream, SuperStream, Err]), [Stream, SuperStream, Err]),
ok ok
end end
end end
@ -304,7 +304,7 @@ topology(VirtualHost, Stream) ->
Members)}; Members)};
Err -> Err ->
?LOG_INFO("Error locating ~tp stream members: ~tp", ?LOG_INFO("Error locating ~tp stream members: ~tp",
[StreamName, Err]), [StreamName, Err]),
{error, stream_not_available} {error, stream_not_available}
end; end;
{error, not_found} -> {error, not_found} ->
@ -335,7 +335,7 @@ route(RoutingKey, VirtualHost, SuperStream) ->
catch catch
exit:Error -> exit:Error ->
?LOG_WARNING("Error while looking up exchange ~tp, ~tp", ?LOG_WARNING("Error while looking up exchange ~tp, ~tp",
[rabbit_misc:rs(ExchangeName), Error]), [rabbit_misc:rs(ExchangeName), Error]),
{error, stream_not_found} {error, stream_not_found}
end. end.
@ -349,8 +349,8 @@ partitions(VirtualHost, SuperStream) ->
partition_index(VirtualHost, SuperStream, Stream) -> partition_index(VirtualHost, SuperStream, Stream) ->
ExchangeName = rabbit_misc:r(VirtualHost, exchange, SuperStream), ExchangeName = rabbit_misc:r(VirtualHost, exchange, SuperStream),
?LOG_DEBUG("Looking for partition index of stream ~tp in " ?LOG_DEBUG("Looking for partition index of stream ~tp in "
"super stream ~tp (virtual host ~tp)", "super stream ~tp (virtual host ~tp)",
[Stream, SuperStream, VirtualHost]), [Stream, SuperStream, VirtualHost]),
try try
_ = rabbit_exchange:lookup_or_die(ExchangeName), _ = rabbit_exchange:lookup_or_die(ExchangeName),
UnorderedBindings = UnorderedBindings =
@ -395,7 +395,7 @@ partition_index(VirtualHost, SuperStream, Stream) ->
catch catch
exit:Error -> exit:Error ->
?LOG_ERROR("Error while looking up exchange ~tp, ~tp", ?LOG_ERROR("Error while looking up exchange ~tp, ~tp",
[ExchangeName, Error]), [ExchangeName, Error]),
{error, stream_not_found} {error, stream_not_found}
end. end.
@ -538,32 +538,32 @@ do_create_stream(VirtualHost, Reference, StreamQueueArguments, Username) ->
{error, reference_already_exists}; {error, reference_already_exists};
{error, Err} -> {error, Err} ->
?LOG_WARNING("Error while creating ~tp stream, ~tp", ?LOG_WARNING("Error while creating ~tp stream, ~tp",
[Reference, Err]), [Reference, Err]),
{error, internal_error}; {error, internal_error};
{error, {error,
queue_limit_exceeded, Reason, ReasonArg} -> queue_limit_exceeded, Reason, ReasonArg} ->
?LOG_WARNING("Cannot declare stream ~tp because, " ?LOG_WARNING("Cannot declare stream ~tp because, "
++ Reason, ++ Reason,
[Reference] ++ ReasonArg), [Reference] ++ ReasonArg),
{error, validation_failed}; {error, validation_failed};
{protocol_error, {protocol_error,
precondition_failed, precondition_failed,
Msg, Msg,
Args} -> Args} ->
?LOG_WARNING("Error while creating ~tp stream, " ?LOG_WARNING("Error while creating ~tp stream, "
++ Msg, ++ Msg,
[Reference] ++ Args), [Reference] ++ Args),
{error, validation_failed} {error, validation_failed}
end end
catch catch
exit:Error -> exit:Error ->
?LOG_ERROR("Error while creating ~tp stream, ~tp", ?LOG_ERROR("Error while creating ~tp stream, ~tp",
[Reference, Error]), [Reference, Error]),
{error, internal_error} {error, internal_error}
end; end;
{error, {absent, _, Reason}} -> {error, {absent, _, Reason}} ->
?LOG_ERROR("Error while creating ~tp stream, ~tp", ?LOG_ERROR("Error while creating ~tp stream, ~tp",
[Reference, Reason]), [Reference, Reason]),
{error, internal_error} {error, internal_error}
end end
catch catch
@ -572,12 +572,12 @@ do_create_stream(VirtualHost, Reference, StreamQueueArguments, Username) ->
% likely a problem of inequivalent args on an existing stream % likely a problem of inequivalent args on an existing stream
{amqp_error, precondition_failed, M, _} -> {amqp_error, precondition_failed, M, _} ->
?LOG_INFO("Error while creating ~tp stream, " ?LOG_INFO("Error while creating ~tp stream, "
++ M, ++ M,
[Reference]), [Reference]),
{error, validation_failed}; {error, validation_failed};
E -> E ->
?LOG_WARNING("Error while creating ~tp stream, ~tp", ?LOG_WARNING("Error while creating ~tp stream, ~tp",
[Reference, E]), [Reference, E]),
{error, validation_failed} {error, validation_failed}
end end
end. end.
@ -605,7 +605,7 @@ super_stream_partitions(VirtualHost, SuperStream) ->
catch catch
exit:Error -> exit:Error ->
?LOG_ERROR("Error while looking up exchange ~tp, ~tp", ?LOG_ERROR("Error while looking up exchange ~tp, ~tp",
[ExchangeName, Error]), [ExchangeName, Error]),
{error, stream_not_found} {error, stream_not_found}
end. end.
@ -734,8 +734,8 @@ declare_super_stream_exchange(VirtualHost, Name, Username) ->
exit:ExitError -> exit:ExitError ->
% likely to be a problem of inequivalent args on an existing stream % likely to be a problem of inequivalent args on an existing stream
?LOG_ERROR("Error while creating ~tp super stream exchange: " ?LOG_ERROR("Error while creating ~tp super stream exchange: "
"~tp", "~tp",
[Name, ExitError]), [Name, ExitError]),
{error, validation_failed} {error, validation_failed}
end; end;
{error, timeout} = Err -> {error, timeout} = Err ->

View File

@ -125,7 +125,7 @@ terminate(Reason, State,
rabbit_networking:unregister_non_amqp_connection(self()), rabbit_networking:unregister_non_amqp_connection(self()),
notify_connection_closed(StatemData), notify_connection_closed(StatemData),
?LOG_DEBUG("~ts terminating in state '~ts' with reason '~W'", ?LOG_DEBUG("~ts terminating in state '~ts' with reason '~W'",
[?MODULE, State, Reason, 10]). [?MODULE, State, Reason, 10]).
start_link(KeepaliveSup, Transport, Ref, Opts) -> start_link(KeepaliveSup, Transport, Ref, Opts) ->
{ok, {ok,
@ -223,7 +223,7 @@ init([KeepaliveSup,
{Error, Reason} -> {Error, Reason} ->
rabbit_net:fast_close(RealSocket), rabbit_net:fast_close(RealSocket),
?LOG_WARNING("Closing connection because of ~tp ~tp", ?LOG_WARNING("Closing connection because of ~tp ~tp",
[Error, Reason]) [Error, Reason])
end. end.
tcp_connected(enter, _OldState, tcp_connected(enter, _OldState,
@ -414,8 +414,8 @@ tuned({call, From}, {info, _Items}, _StateData) ->
state_timeout(State, Transport, Socket) -> state_timeout(State, Transport, Socket) ->
?LOG_WARNING("Closing connection because of timeout in state " ?LOG_WARNING("Closing connection because of timeout in state "
"'~ts' likely due to lack of client action.", "'~ts' likely due to lack of client action.",
[State]), [State]),
close_immediately(Transport, Socket), close_immediately(Transport, Socket),
stop. stop.
@ -441,12 +441,10 @@ handle_info(Msg,
#stream_connection{connection_step = NewConnectionStep} = #stream_connection{connection_step = NewConnectionStep} =
Connection1, Connection1,
?LOG_DEBUG("Transitioned from ~ts to ~ts", ?LOG_DEBUG("Transitioned from ~ts to ~ts",
[PreviousConnectionStep, [PreviousConnectionStep, NewConnectionStep]),
NewConnectionStep]),
Transition(NewConnectionStep, StatemData, Connection1, State1); Transition(NewConnectionStep, StatemData, Connection1, State1);
{Closed, S} -> {Closed, S} ->
?LOG_DEBUG("Stream protocol connection socket ~w closed", ?LOG_DEBUG("Stream protocol connection socket ~w closed", [S]),
[S]),
stop; stop;
{Error, S, Reason} -> {Error, S, Reason} ->
?LOG_WARNING("Socket error ~tp [~w]", [Reason, S]), ?LOG_WARNING("Socket error ~tp [~w]", [Reason, S]),
@ -494,8 +492,7 @@ transition_to_opened(Transport,
invalid_transition(Transport, Socket, From, To) -> invalid_transition(Transport, Socket, From, To) ->
?LOG_WARNING("Closing socket ~w. Invalid transition from ~ts " ?LOG_WARNING("Closing socket ~w. Invalid transition from ~ts "
"to ~ts.", "to ~ts.", [Socket, From, To]),
[Socket, From, To]),
close_immediately(Transport, Socket), close_immediately(Transport, Socket),
stop. stop.
@ -515,7 +512,7 @@ socket_op(Sock, Fun) ->
Res; Res;
{error, Reason} -> {error, Reason} ->
?LOG_WARNING("Error during socket operation ~tp", ?LOG_WARNING("Error during socket operation ~tp",
[Reason]), [Reason]),
rabbit_net:fast_close(RealSocket), rabbit_net:fast_close(RealSocket),
exit(normal) exit(normal)
end. end.
@ -639,8 +636,7 @@ open(info, {resource_alarm, IsThereAlarm},
CreditsRequiredForUnblocking}} = CreditsRequiredForUnblocking}} =
StatemData) -> StatemData) ->
?LOG_DEBUG("Connection ~tp received resource alarm. Alarm " ?LOG_DEBUG("Connection ~tp received resource alarm. Alarm "
"on? ~tp", "on? ~tp", [ConnectionName, IsThereAlarm]),
[ConnectionName, IsThereAlarm]),
EnoughCreditsToUnblock = EnoughCreditsToUnblock =
has_enough_credits_to_unblock(Credits, CreditsRequiredForUnblocking), has_enough_credits_to_unblock(Credits, CreditsRequiredForUnblocking),
NewBlockedState = NewBlockedState =
@ -651,18 +647,18 @@ open(info, {resource_alarm, IsThereAlarm},
not EnoughCredits not EnoughCredits
end, end,
?LOG_DEBUG("Connection ~tp had blocked status set to ~tp, " ?LOG_DEBUG("Connection ~tp had blocked status set to ~tp, "
"new blocked status is now ~tp", "new blocked status is now ~tp",
[ConnectionName, Blocked, NewBlockedState]), [ConnectionName, Blocked, NewBlockedState]),
case {Blocked, NewBlockedState} of case {Blocked, NewBlockedState} of
{true, false} -> {true, false} ->
setopts(Transport, S, [{active, once}]), setopts(Transport, S, [{active, once}]),
ok = rabbit_heartbeat:resume_monitor(Heartbeater), ok = rabbit_heartbeat:resume_monitor(Heartbeater),
?LOG_DEBUG("Unblocking connection ~tp", ?LOG_DEBUG("Unblocking connection ~tp",
[ConnectionName]); [ConnectionName]);
{false, true} -> {false, true} ->
ok = rabbit_heartbeat:pause_monitor(Heartbeater), ok = rabbit_heartbeat:pause_monitor(Heartbeater),
?LOG_DEBUG("Blocking connection ~tp after resource alarm", ?LOG_DEBUG("Blocking connection ~tp after resource alarm",
[ConnectionName]); [ConnectionName]);
_ -> _ ->
ok ok
end, end,
@ -744,8 +740,8 @@ open(info,
end, end,
?LOG_DEBUG("Subscription ~tp on ~tp instructed to become active: " ?LOG_DEBUG("Subscription ~tp on ~tp instructed to become active: "
"~tp", "~tp",
[SubId, Stream, Active]), [SubId, Stream, Active]),
{Connection1, ConnState1} = {Connection1, ConnState1} =
case Consumers0 of case Consumers0 of
#{SubId := #{SubId :=
@ -763,8 +759,8 @@ open(info,
undefined; undefined;
{false, L} -> {false, L} ->
?LOG_DEBUG("Closing Osiris segment of subscription ~tp for " ?LOG_DEBUG("Closing Osiris segment of subscription ~tp for "
"now", "now",
[SubId]), [SubId]),
osiris_log:close(L), osiris_log:close(L),
undefined; undefined;
_ -> _ ->
@ -790,20 +786,20 @@ open(info,
Consumer1}}}; Consumer1}}};
false -> false ->
?LOG_WARNING("Received SAC event for subscription ~tp, which " ?LOG_WARNING("Received SAC event for subscription ~tp, which "
"is not a SAC. Not doing anything.", "is not a SAC. Not doing anything.",
[SubId]), [SubId]),
{Connection0, ConnState0} {Connection0, ConnState0}
end; end;
_ -> _ ->
?LOG_DEBUG("Subscription ~tp on ~tp has been deleted.", ?LOG_DEBUG("Subscription ~tp on ~tp has been deleted.",
[SubId, Stream]), [SubId, Stream]),
?LOG_DEBUG("Active ~tp, message ~tp", [Active, Msg]), ?LOG_DEBUG("Active ~tp, message ~tp", [Active, Msg]),
_ = case {Active, Msg} of _ = case {Active, Msg} of
{false, #{stepping_down := true, {false, #{stepping_down := true,
stream := St, stream := St,
consumer_name := ConsumerName}} -> consumer_name := ConsumerName}} ->
?LOG_DEBUG("Former active consumer gone, activating consumer " ++ ?LOG_DEBUG("Former active consumer gone, activating consumer " ++
"on stream ~tp, group ~tp", [St, ConsumerName]), "on stream ~tp, group ~tp", [St, ConsumerName]),
sac_activate_consumer(VirtualHost, St, ConsumerName); sac_activate_consumer(VirtualHost, St, ConsumerName);
_ -> _ ->
ok ok
@ -817,14 +813,14 @@ open(info, {Closed, Socket}, #statem_data{connection = Connection})
when Closed =:= tcp_closed; Closed =:= ssl_closed -> when Closed =:= tcp_closed; Closed =:= ssl_closed ->
_ = demonitor_all_streams(Connection), _ = demonitor_all_streams(Connection),
?LOG_WARNING("Stream reader socket ~w closed [~w]", ?LOG_WARNING("Stream reader socket ~w closed [~w]",
[Socket, self()]), [Socket, self()]),
stop; stop;
open(info, {Error, Socket, Reason}, open(info, {Error, Socket, Reason},
#statem_data{connection = Connection}) #statem_data{connection = Connection})
when Error =:= tcp_error; Error =:= ssl_error -> when Error =:= tcp_error; Error =:= ssl_error ->
_ = demonitor_all_streams(Connection), _ = demonitor_all_streams(Connection),
?LOG_ERROR("Stream reader socket error ~tp [~w] [~w]", ?LOG_ERROR("Stream reader socket error ~tp [~w] [~w]",
[Reason, Socket, self()]), [Reason, Socket, self()]),
stop; stop;
open(info, {'DOWN', MonitorRef, process, _OsirisPid, _Reason}, open(info, {'DOWN', MonitorRef, process, _OsirisPid, _Reason},
#statem_data{transport = Transport, #statem_data{transport = Transport,
@ -867,7 +863,7 @@ open(info, heartbeat_send,
keep_state_and_data; keep_state_and_data;
Unexpected -> Unexpected ->
?LOG_INFO("Heartbeat send error ~tp, closing connection", ?LOG_INFO("Heartbeat send error ~tp, closing connection",
[Unexpected]), [Unexpected]),
_C1 = demonitor_all_streams(Connection), _C1 = demonitor_all_streams(Connection),
stop stop
end; end;
@ -899,7 +895,7 @@ open(info, check_outstanding_requests,
case (Time - Start) > Timeout of case (Time - Start) > Timeout of
true -> true ->
?LOG_DEBUG("Request ~tp with content ~tp has timed out", ?LOG_DEBUG("Request ~tp with content ~tp has timed out",
[K, Ctnt]), [K, Ctnt]),
true; true;
false -> false ->
@ -909,7 +905,7 @@ open(info, check_outstanding_requests,
case HasTimedOut of case HasTimedOut of
true -> true ->
?LOG_INFO("Forcing stream connection ~tp closing: request to client timed out", ?LOG_INFO("Forcing stream connection ~tp closing: request to client timed out",
[self()]), [self()]),
_ = demonitor_all_streams(Connection0), _ = demonitor_all_streams(Connection0),
{stop, {request_timeout, <<"Request timeout">>}}; {stop, {request_timeout, <<"Request timeout">>}};
false -> false ->
@ -928,12 +924,12 @@ open(info, {shutdown, Explanation} = Reason,
%% rabbitmq_management or rabbitmq_stream_management plugin %% rabbitmq_management or rabbitmq_stream_management plugin
%% requests to close connection. %% requests to close connection.
?LOG_INFO("Forcing stream connection ~tp closing: ~tp", ?LOG_INFO("Forcing stream connection ~tp closing: ~tp",
[self(), Explanation]), [self(), Explanation]),
_ = demonitor_all_streams(Connection), _ = demonitor_all_streams(Connection),
{stop, Reason}; {stop, Reason};
open(info, Unknown, _StatemData) -> open(info, Unknown, _StatemData) ->
?LOG_WARNING("Received unknown message ~tp in state ~ts", ?LOG_WARNING("Received unknown message ~tp in state ~ts",
[Unknown, ?FUNCTION_NAME]), [Unknown, ?FUNCTION_NAME]),
%% FIXME send close %% FIXME send close
keep_state_and_data; keep_state_and_data;
open({call, From}, info, open({call, From}, info,
@ -1055,8 +1051,8 @@ open(cast,
{osiris_offset, _QueueResource, -1}}, {osiris_offset, _QueueResource, -1}},
_StatemData) -> _StatemData) ->
?LOG_DEBUG("Stream protocol connection received osiris offset " ?LOG_DEBUG("Stream protocol connection received osiris offset "
"event for ~tp with offset ~tp", "event for ~tp with offset ~tp",
[StreamName, -1]), [StreamName, -1]),
keep_state_and_data; keep_state_and_data;
open(cast, open(cast,
{queue_event, #resource{name = StreamName}, {queue_event, #resource{name = StreamName},
@ -1076,14 +1072,14 @@ open(cast,
case maps:get(StreamName, StreamSubscriptions, undefined) of case maps:get(StreamName, StreamSubscriptions, undefined) of
undefined -> undefined ->
?LOG_DEBUG("Stream protocol connection: osiris offset event " ?LOG_DEBUG("Stream protocol connection: osiris offset event "
"for ~tp, but no subscription (leftover messages " "for ~tp, but no subscription (leftover messages "
"after unsubscribe?)", "after unsubscribe?)",
[StreamName]), [StreamName]),
{Connection, State}; {Connection, State};
[] -> [] ->
?LOG_DEBUG("Stream protocol connection: osiris offset event " ?LOG_DEBUG("Stream protocol connection: osiris offset event "
"for ~tp, but no registered consumers!", "for ~tp, but no registered consumers!",
[StreamName]), [StreamName]),
{Connection#stream_connection{stream_subscriptions = {Connection#stream_connection{stream_subscriptions =
maps:remove(StreamName, maps:remove(StreamName,
StreamSubscriptions)}, StreamSubscriptions)},
@ -1106,13 +1102,11 @@ open(cast,
SendFileOct) SendFileOct)
of of
{error, closed} -> {error, closed} ->
?LOG_INFO("Stream protocol connection has been closed by " ?LOG_INFO("Stream protocol connection has been closed by peer", []),
"peer",
[]),
throw({stop, normal}); throw({stop, normal});
{error, Reason} -> {error, Reason} ->
?LOG_INFO("Error while sending chunks: ~tp", ?LOG_INFO("Error while sending chunks: ~tp",
[Reason]), [Reason]),
%% likely a connection problem %% likely a connection problem
Consumer; Consumer;
{ok, Csmr} -> Csmr {ok, Csmr} -> Csmr
@ -1152,8 +1146,8 @@ close_sent(enter, _OldState,
{keep_state_and_data, {state_timeout, StateTimeout, close}}; {keep_state_and_data, {state_timeout, StateTimeout, close}};
close_sent(state_timeout, close, #statem_data{}) -> close_sent(state_timeout, close, #statem_data{}) ->
?LOG_WARNING("Closing connection because of timeout in state " ?LOG_WARNING("Closing connection because of timeout in state "
"'~ts' likely due to lack of client action.", "'~ts' likely due to lack of client action.",
[?FUNCTION_NAME]), [?FUNCTION_NAME]),
stop; stop;
close_sent(info, {tcp, S, Data}, close_sent(info, {tcp, S, Data},
#statem_data{transport = Transport, #statem_data{transport = Transport,
@ -1165,7 +1159,7 @@ close_sent(info, {tcp, S, Data},
handle_inbound_data_post_close(Transport, Connection, State, Data), handle_inbound_data_post_close(Transport, Connection, State, Data),
#stream_connection{connection_step = Step} = Connection1, #stream_connection{connection_step = Step} = Connection1,
?LOG_DEBUG("Stream reader has transitioned from ~ts to ~ts", ?LOG_DEBUG("Stream reader has transitioned from ~ts to ~ts",
[?FUNCTION_NAME, Step]), [?FUNCTION_NAME, Step]),
case Step of case Step of
closing_done -> closing_done ->
stop; stop;
@ -1177,25 +1171,25 @@ close_sent(info, {tcp, S, Data},
end; end;
close_sent(info, {tcp_closed, S}, _StatemData) -> close_sent(info, {tcp_closed, S}, _StatemData) ->
?LOG_DEBUG("Stream protocol connection socket ~w closed [~w]", ?LOG_DEBUG("Stream protocol connection socket ~w closed [~w]",
[S, self()]), [S, self()]),
stop; stop;
close_sent(info, {tcp_error, S, Reason}, #statem_data{}) -> close_sent(info, {tcp_error, S, Reason}, #statem_data{}) ->
?LOG_ERROR("Stream protocol connection socket error: ~tp " ?LOG_ERROR("Stream protocol connection socket error: ~tp "
"[~w] [~w]", "[~w] [~w]",
[Reason, S, self()]), [Reason, S, self()]),
stop; stop;
close_sent(info, {resource_alarm, IsThereAlarm}, close_sent(info, {resource_alarm, IsThereAlarm},
StatemData = #statem_data{connection = Connection}) -> StatemData = #statem_data{connection = Connection}) ->
?LOG_WARNING("Stream protocol connection ignored a resource " ?LOG_WARNING("Stream protocol connection ignored a resource "
"alarm ~tp in state ~ts", "alarm ~tp in state ~ts",
[IsThereAlarm, ?FUNCTION_NAME]), [IsThereAlarm, ?FUNCTION_NAME]),
{keep_state, {keep_state,
StatemData#statem_data{connection = StatemData#statem_data{connection =
Connection#stream_connection{resource_alarm = Connection#stream_connection{resource_alarm =
IsThereAlarm}}}; IsThereAlarm}}};
close_sent(info, Msg, _StatemData) -> close_sent(info, Msg, _StatemData) ->
?LOG_WARNING("Ignored unknown message ~tp in state ~ts", ?LOG_WARNING("Ignored unknown message ~tp in state ~ts",
[Msg, ?FUNCTION_NAME]), [Msg, ?FUNCTION_NAME]),
keep_state_and_data; keep_state_and_data;
close_sent({call, From}, {info, _Items}, _StateData) -> close_sent({call, From}, {info, _Items}, _StateData) ->
%% must be a CLI call, returning no information %% must be a CLI call, returning no information
@ -1390,7 +1384,7 @@ handle_frame_pre_auth(Transport,
Username, Username,
stream), stream),
?LOG_WARNING("User '~ts' can only connect via localhost", ?LOG_WARNING("User '~ts' can only connect via localhost",
[Username]), [Username]),
{C1#stream_connection{connection_step = {C1#stream_connection{connection_step =
failure}, failure},
{sasl_authenticate, ?RESPONSE_SASL_AUTHENTICATION_FAILURE_LOOPBACK, {sasl_authenticate, ?RESPONSE_SASL_AUTHENTICATION_FAILURE_LOOPBACK,
@ -1427,7 +1421,7 @@ handle_frame_pre_auth(_Transport,
#stream_connection_state{blocked = Blocked} = State, #stream_connection_state{blocked = Blocked} = State,
{tune, FrameMax, Heartbeat}) -> {tune, FrameMax, Heartbeat}) ->
?LOG_DEBUG("Tuning response ~tp ~tp ", ?LOG_DEBUG("Tuning response ~tp ~tp ",
[FrameMax, Heartbeat]), [FrameMax, Heartbeat]),
Parent = self(), Parent = self(),
%% sending a message to the main process so the heartbeat frame is sent from this main process %% sending a message to the main process so the heartbeat frame is sent from this main process
%% otherwise heartbeat frames can interleave with chunk delivery %% otherwise heartbeat frames can interleave with chunk delivery
@ -1524,7 +1518,7 @@ handle_frame_pre_auth(_Transport, Connection, State, heartbeat) ->
{Connection, State}; {Connection, State};
handle_frame_pre_auth(_Transport, Connection, State, Command) -> handle_frame_pre_auth(_Transport, Connection, State, Command) ->
?LOG_WARNING("unknown command ~w, closing connection.", ?LOG_WARNING("unknown command ~w, closing connection.",
[Command]), [Command]),
{Connection#stream_connection{connection_step = failure}, State}. {Connection#stream_connection{connection_step = failure}, State}.
auth_fail(Username, Msg, Args, Connection, ConnectionState) -> auth_fail(Username, Msg, Args, Connection, ConnectionState) ->
@ -1568,8 +1562,8 @@ handle_frame_post_auth(Transport,
_WriterRef, _WriterRef,
Stream}}) -> Stream}}) ->
?LOG_INFO("Cannot create publisher ~tp on stream ~tp, connection " ?LOG_INFO("Cannot create publisher ~tp on stream ~tp, connection "
"is blocked because of resource alarm", "is blocked because of resource alarm",
[PublisherId, Stream]), [PublisherId, Stream]),
response(Transport, response(Transport,
Connection0, Connection0,
declare_publisher, declare_publisher,
@ -1645,7 +1639,7 @@ handle_frame_post_auth(Transport,
Username, Username,
stream), stream),
?LOG_WARNING("Not allowed to change username '~ts'. Only password", ?LOG_WARNING("Not allowed to change username '~ts'. Only password",
[Username]), [Username]),
{C1#stream_connection{connection_step = {C1#stream_connection{connection_step =
failure}, failure},
{sasl_authenticate, {sasl_authenticate,
@ -1666,7 +1660,7 @@ handle_frame_post_auth(Transport,
end; end;
{OtherMechanism, _} -> {OtherMechanism, _} ->
?LOG_WARNING("User '~ts' cannot change initial auth mechanism '~ts' for '~ts'", ?LOG_WARNING("User '~ts' cannot change initial auth mechanism '~ts' for '~ts'",
[Username, NewMechanism, OtherMechanism]), [Username, NewMechanism, OtherMechanism]),
CmdBody = CmdBody =
{sasl_authenticate, ?RESPONSE_SASL_CANNOT_CHANGE_MECHANISM, <<>>}, {sasl_authenticate, ?RESPONSE_SASL_CANNOT_CHANGE_MECHANISM, <<>>},
Frame = rabbit_stream_core:frame({response, CorrelationId, CmdBody}), Frame = rabbit_stream_core:frame({response, CorrelationId, CmdBody}),
@ -1770,10 +1764,10 @@ handle_frame_post_auth(Transport,
end; end;
{PublisherIdTaken, ReferenceTaken} -> {PublisherIdTaken, ReferenceTaken} ->
?LOG_WARNING("Error while declaring publisher ~tp for stream '~ts', " ?LOG_WARNING("Error while declaring publisher ~tp for stream '~ts', "
"with reference '~ts'. ID already taken: ~tp. " "with reference '~ts'. ID already taken: ~tp. "
"Reference already taken: ~tp.", "Reference already taken: ~tp.",
[PublisherId, Stream, WriterRef, [PublisherId, Stream, WriterRef,
PublisherIdTaken, ReferenceTaken]), PublisherIdTaken, ReferenceTaken]),
response(Transport, response(Transport,
Connection0, Connection0,
declare_publisher, declare_publisher,
@ -1985,19 +1979,16 @@ handle_frame_post_auth(Transport,
{Connection, State}; {Connection, State};
false -> false ->
?LOG_DEBUG("Creating subscription ~tp to ~tp, with offset " ?LOG_DEBUG("Creating subscription ~tp to ~tp, with offset "
"specification ~tp, properties ~0p", "specification ~tp, properties ~0p",
[SubscriptionId, [SubscriptionId, Stream, OffsetSpec, Properties]),
Stream,
OffsetSpec,
Properties]),
Sac = single_active_consumer(Properties), Sac = single_active_consumer(Properties),
ConsumerName = consumer_name(Properties), ConsumerName = consumer_name(Properties),
case {Sac, ConsumerName} case {Sac, ConsumerName}
of of
{true, undefined} -> {true, undefined} ->
?LOG_WARNING("Cannot create subcription ~tp, a single active " ?LOG_WARNING("Cannot create subcription ~tp, a single active "
"consumer must have a name", "consumer must have a name",
[SubscriptionId]), [SubscriptionId]),
response(Transport, response(Transport,
Connection, Connection,
subscribe, subscribe,
@ -2034,7 +2025,7 @@ handle_frame_post_auth(Transport,
%% from a formerly active consumer. Taking the credits, %% from a formerly active consumer. Taking the credits,
%% logging and sending an error %% logging and sending an error
?LOG_DEBUG("Giving credit to an inactive consumer: ~tp", ?LOG_DEBUG("Giving credit to an inactive consumer: ~tp",
[SubscriptionId]), [SubscriptionId]),
#consumer{credit = AvailableCredit} = Consumer, #consumer{credit = AvailableCredit} = Consumer,
Consumer1 = Consumer#consumer{credit = AvailableCredit + Credit}, Consumer1 = Consumer#consumer{credit = AvailableCredit + Credit},
@ -2058,9 +2049,7 @@ handle_frame_post_auth(Transport,
SendFileOct) SendFileOct)
of of
{error, closed} -> {error, closed} ->
?LOG_INFO("Stream protocol connection has been closed by " ?LOG_INFO("Stream protocol connection has been closed by peer", []),
"peer",
[]),
throw({stop, normal}); throw({stop, normal});
{ok, Consumer1} -> {ok, Consumer1} ->
{Connection, {Connection,
@ -2071,7 +2060,7 @@ handle_frame_post_auth(Transport,
end; end;
_ -> _ ->
?LOG_WARNING("Giving credit to unknown subscription: ~tp", ?LOG_WARNING("Giving credit to unknown subscription: ~tp",
[SubscriptionId]), [SubscriptionId]),
Code = ?RESPONSE_CODE_SUBSCRIPTION_ID_DOES_NOT_EXIST, Code = ?RESPONSE_CODE_SUBSCRIPTION_ID_DOES_NOT_EXIST,
Frame = Frame =
@ -2096,7 +2085,7 @@ handle_frame_post_auth(_Transport,
store_offset(Reference, Stream, Offset, Connection0); store_offset(Reference, Stream, Offset, Connection0);
_ -> _ ->
?LOG_WARNING("Not authorized to store offset on stream ~tp", ?LOG_WARNING("Not authorized to store offset on stream ~tp",
[Stream]), [Stream]),
Connection0 Connection0
end end
end, end,
@ -2184,8 +2173,8 @@ handle_frame_post_auth(Transport,
#{leader_node := LeaderPid, #{leader_node := LeaderPid,
replica_nodes := ReturnedReplicas}} -> replica_nodes := ReturnedReplicas}} ->
?LOG_DEBUG("Created stream cluster with leader on ~tp and " ?LOG_DEBUG("Created stream cluster with leader on ~tp and "
"replicas on ~tp", "replicas on ~tp",
[LeaderPid, ReturnedReplicas]), [LeaderPid, ReturnedReplicas]),
response_ok(Transport, response_ok(Transport,
Connection, Connection,
create_stream, create_stream,
@ -2348,7 +2337,7 @@ handle_frame_post_auth(Transport,
{true, true} -> Acc#{Node => {Host, Port}}; {true, true} -> Acc#{Node => {Host, Port}};
_ -> _ ->
?LOG_WARNING("Error when retrieving broker metadata: ~tp ~tp", ?LOG_WARNING("Error when retrieving broker metadata: ~tp ~tp",
[Host, Port]), [Host, Port]),
Acc Acc
end end
end, end,
@ -2447,15 +2436,14 @@ handle_frame_post_auth(Transport,
?RESPONSE_CODE_OK -> ?RESPONSE_CODE_OK ->
ok; ok;
RC -> RC ->
?LOG_INFO("Unexpected consumer update response code: ~tp", ?LOG_INFO("Unexpected consumer update response code: ~tp", [RC])
[RC])
end, end,
case maps:take(CorrelationId, Requests0) of case maps:take(CorrelationId, Requests0) of
{#request{content = #{subscription_id := SubscriptionId} = Msg}, Rs} -> {#request{content = #{subscription_id := SubscriptionId} = Msg}, Rs} ->
Stream = stream_from_consumers(SubscriptionId, Consumers), Stream = stream_from_consumers(SubscriptionId, Consumers),
?LOG_DEBUG("Received consumer update response for subscription " ?LOG_DEBUG("Received consumer update response for subscription "
"~tp on stream ~tp, correlation ID ~tp", "~tp on stream ~tp, correlation ID ~tp",
[SubscriptionId, Stream, CorrelationId]), [SubscriptionId, Stream, CorrelationId]),
Consumers1 = Consumers1 =
case Consumers of case Consumers of
#{SubscriptionId := #{SubscriptionId :=
@ -2482,9 +2470,9 @@ handle_frame_post_auth(Transport,
end, end,
?LOG_DEBUG("Initializing reader for active consumer " ?LOG_DEBUG("Initializing reader for active consumer "
"(subscription ~tp, stream ~tp), offset " "(subscription ~tp, stream ~tp), offset "
"spec is ~tp", "spec is ~tp",
[SubscriptionId, Stream, OffsetSpec]), [SubscriptionId, Stream, OffsetSpec]),
QueueResource = QueueResource =
#resource{name = Stream, #resource{name = Stream,
kind = queue, kind = queue,
@ -2503,11 +2491,8 @@ handle_frame_post_auth(Transport,
configuration = #consumer_configuration{counters = ConsumerCounters}} = Consumer1, configuration = #consumer_configuration{counters = ConsumerCounters}} = Consumer1,
?LOG_DEBUG("Dispatching to subscription ~tp (stream ~tp), " ?LOG_DEBUG("Dispatching to subscription ~tp (stream ~tp), "
"credit(s) ~tp, send limit ~tp", "credit(s) ~tp, send limit ~tp",
[SubscriptionId, [SubscriptionId, Stream, Crdt, SndLmt]),
Stream,
Crdt,
SndLmt]),
ConsumedMessagesBefore = messages_consumed(ConsumerCounters), ConsumedMessagesBefore = messages_consumed(ConsumerCounters),
@ -2518,13 +2503,11 @@ handle_frame_post_auth(Transport,
SendFileOct) SendFileOct)
of of
{error, closed} -> {error, closed} ->
?LOG_INFO("Stream protocol connection has been closed by " ?LOG_INFO("Stream protocol connection has been closed by peer", []),
"peer",
[]),
throw({stop, normal}); throw({stop, normal});
{error, Reason} -> {error, Reason} ->
?LOG_INFO("Error while sending chunks: ~tp", ?LOG_INFO("Error while sending chunks: ~tp",
[Reason]), [Reason]),
%% likely a connection problem %% likely a connection problem
Consumer; Consumer;
{ok, Csmr} -> {ok, Csmr} ->
@ -2535,11 +2518,9 @@ handle_frame_post_auth(Transport,
ConsumedMessagesAfter = messages_consumed(ConsumerCounters), ConsumedMessagesAfter = messages_consumed(ConsumerCounters),
?LOG_DEBUG("Subscription ~tp (stream ~tp) is now at offset ~tp with ~tp " ?LOG_DEBUG("Subscription ~tp (stream ~tp) is now at offset ~tp with ~tp "
"message(s) distributed after subscription", "message(s) distributed after subscription",
[SubscriptionId, [SubscriptionId, Stream, ConsumerOffset,
Stream, ConsumedMessagesAfter - ConsumedMessagesBefore]),
ConsumerOffset,
ConsumedMessagesAfter - ConsumedMessagesBefore]),
Consumers#{SubscriptionId => Consumer2}; Consumers#{SubscriptionId => Consumer2};
#{SubscriptionId := #{SubscriptionId :=
@ -2554,8 +2535,8 @@ handle_frame_post_auth(Transport,
#{stepping_down := true} -> #{stepping_down := true} ->
ConsumerName = consumer_name(Properties), ConsumerName = consumer_name(Properties),
?LOG_DEBUG("Subscription ~tp on stream ~tp, group ~tp " ++ ?LOG_DEBUG("Subscription ~tp on stream ~tp, group ~tp " ++
"has stepped down, activating consumer", "has stepped down, activating consumer",
[SubscriptionId, Stream, ConsumerName]), [SubscriptionId, Stream, ConsumerName]),
_ = sac_activate_consumer(VirtualHost, Stream, _ = sac_activate_consumer(VirtualHost, Stream,
ConsumerName), ConsumerName),
ok; ok;
@ -2566,7 +2547,7 @@ handle_frame_post_auth(Transport,
Consumers; Consumers;
_ -> _ ->
?LOG_DEBUG("No consumer found for subscription ~tp", ?LOG_DEBUG("No consumer found for subscription ~tp",
[SubscriptionId]), [SubscriptionId]),
Consumers Consumers
end, end,
@ -2574,14 +2555,14 @@ handle_frame_post_auth(Transport,
State#stream_connection_state{consumers = Consumers1}}; State#stream_connection_state{consumers = Consumers1}};
{V, _Rs} -> {V, _Rs} ->
?LOG_WARNING("Unexpected outstanding requests for correlation " ?LOG_WARNING("Unexpected outstanding requests for correlation "
"ID ~tp: ~tp", "ID ~tp: ~tp",
[CorrelationId, V]), [CorrelationId, V]),
{Connection, State}; {Connection, State};
error -> error ->
?LOG_WARNING("Could not find outstanding consumer update request " ?LOG_WARNING("Could not find outstanding consumer update request "
"with correlation ID ~tp. No actions taken for " "with correlation ID ~tp. No actions taken for "
"the subscription.", "the subscription.",
[CorrelationId]), [CorrelationId]),
{Connection, State} {Connection, State}
end; end;
handle_frame_post_auth(Transport, handle_frame_post_auth(Transport,
@ -2667,7 +2648,7 @@ handle_frame_post_auth(Transport,
{Connection, State}; {Connection, State};
{error, {validation_failed, Msg}} -> {error, {validation_failed, Msg}} ->
?LOG_WARNING("Error while trying to create super stream ~tp: ~tp", ?LOG_WARNING("Error while trying to create super stream ~tp: ~tp",
[SuperStreamName, Msg]), [SuperStreamName, Msg]),
response(Transport, response(Transport,
Connection, Connection,
create_super_stream, create_super_stream,
@ -2677,7 +2658,7 @@ handle_frame_post_auth(Transport,
{Connection, State}; {Connection, State};
{error, {reference_already_exists, Msg}} -> {error, {reference_already_exists, Msg}} ->
?LOG_WARNING("Error while trying to create super stream ~tp: ~tp", ?LOG_WARNING("Error while trying to create super stream ~tp: ~tp",
[SuperStreamName, Msg]), [SuperStreamName, Msg]),
response(Transport, response(Transport,
Connection, Connection,
create_super_stream, create_super_stream,
@ -2687,7 +2668,7 @@ handle_frame_post_auth(Transport,
{Connection, State}; {Connection, State};
{error, Error} -> {error, Error} ->
?LOG_WARNING("Error while trying to create super stream ~tp: ~tp", ?LOG_WARNING("Error while trying to create super stream ~tp: ~tp",
[SuperStreamName, Error]), [SuperStreamName, Error]),
response(Transport, response(Transport,
Connection, Connection,
create_super_stream, create_super_stream,
@ -2766,8 +2747,8 @@ handle_frame_post_auth(Transport,
{request, CorrelationId, {request, CorrelationId,
{close, ClosingCode, ClosingReason}}) -> {close, ClosingCode, ClosingReason}}) ->
?LOG_DEBUG("Stream protocol reader received close command " ?LOG_DEBUG("Stream protocol reader received close command "
"~tp ~tp", "~tp ~tp",
[ClosingCode, ClosingReason]), [ClosingCode, ClosingReason]),
Frame = Frame =
rabbit_stream_core:frame({response, CorrelationId, rabbit_stream_core:frame({response, CorrelationId,
{close, ?RESPONSE_CODE_OK}}), {close, ?RESPONSE_CODE_OK}}),
@ -2782,7 +2763,7 @@ handle_frame_post_auth(Transport,
State, State,
Command) -> Command) ->
?LOG_WARNING("unknown command ~tp, sending close command.", ?LOG_WARNING("unknown command ~tp, sending close command.",
[Command]), [Command]),
CloseReason = <<"unknown frame">>, CloseReason = <<"unknown frame">>,
Frame = Frame =
rabbit_stream_core:frame({request, 1, rabbit_stream_core:frame({request, 1,
@ -2844,17 +2825,15 @@ maybe_dispatch_on_subscription(Transport,
SendFileOct, SendFileOct,
false = _Sac) -> false = _Sac) ->
?LOG_DEBUG("Distributing existing messages to subscription " ?LOG_DEBUG("Distributing existing messages to subscription "
"~tp on ~tp", "~tp on ~tp",
[SubscriptionId, Stream]), [SubscriptionId, Stream]),
case send_chunks(DeliverVersion, case send_chunks(DeliverVersion,
Transport, Transport,
ConsumerState, ConsumerState,
SendFileOct) SendFileOct)
of of
{error, closed} -> {error, closed} ->
?LOG_INFO("Stream protocol connection has been closed by " ?LOG_INFO("Stream protocol connection has been closed by peer", []),
"peer",
[]),
throw({stop, normal}); throw({stop, normal});
{ok, #consumer{log = Log1, credit = Credit1} = ConsumerState1} -> {ok, #consumer{log = Log1, credit = Credit1} = ConsumerState1} ->
Consumers1 = Consumers#{SubscriptionId => ConsumerState1}, Consumers1 = Consumers#{SubscriptionId => ConsumerState1},
@ -2868,9 +2847,9 @@ maybe_dispatch_on_subscription(Transport,
ConsumerOffsetLag = consumer_i(offset_lag, ConsumerState1), ConsumerOffsetLag = consumer_i(offset_lag, ConsumerState1),
?LOG_DEBUG("Subscription ~tp on ~tp is now at offset ~tp with ~tp " ?LOG_DEBUG("Subscription ~tp on ~tp is now at offset ~tp with ~tp "
"message(s) distributed after subscription", "message(s) distributed after subscription",
[SubscriptionId, Stream, ConsumerOffset, [SubscriptionId, Stream, ConsumerOffset,
messages_consumed(ConsumerCounters1)]), messages_consumed(ConsumerCounters1)]),
rabbit_stream_metrics:consumer_created(self(), rabbit_stream_metrics:consumer_created(self(),
stream_r(Stream, Connection), stream_r(Stream, Connection),
@ -2895,9 +2874,9 @@ maybe_dispatch_on_subscription(_Transport,
_SendFileOct, _SendFileOct,
true = _Sac) -> true = _Sac) ->
?LOG_DEBUG("No initial dispatch for subscription ~tp for " ?LOG_DEBUG("No initial dispatch for subscription ~tp for "
"now, waiting for consumer update response from " "now, waiting for consumer update response from "
"client (single active consumer)", "client (single active consumer)",
[SubscriptionId]), [SubscriptionId]),
#consumer{credit = Credit, #consumer{credit = Credit,
configuration = configuration =
#consumer_configuration{offset = Offset, active = Active}} = #consumer_configuration{offset = Offset, active = Active}} =
@ -3004,7 +2983,7 @@ handle_subscription(Transport,#stream_connection{
State1}; State1};
{error, Reason} -> {error, Reason} ->
?LOG_WARNING("Cannot create SAC subcription ~tp: ~tp", ?LOG_WARNING("Cannot create SAC subcription ~tp: ~tp",
[SubscriptionId, Reason]), [SubscriptionId, Reason]),
response(Transport, response(Transport,
Connection, Connection,
subscribe, subscribe,
@ -3041,7 +3020,7 @@ register_request(#stream_connection{outstanding_requests = Requests0,
correlation_id_sequence = CorrIdSeq} = C, correlation_id_sequence = CorrIdSeq} = C,
RequestContent) -> RequestContent) ->
?LOG_DEBUG("Registering RPC request ~tp with correlation ID ~tp", ?LOG_DEBUG("Registering RPC request ~tp with correlation ID ~tp",
[RequestContent, CorrIdSeq]), [RequestContent, CorrIdSeq]),
Requests1 = maps:put(CorrIdSeq, request(RequestContent), Requests0), Requests1 = maps:put(CorrIdSeq, request(RequestContent), Requests0),
@ -3171,8 +3150,8 @@ maybe_unregister_consumer(VirtualHost,
_ = sac_activate_consumer(VirtualHost, Stream, _ = sac_activate_consumer(VirtualHost, Stream,
ConsumerName), ConsumerName),
?LOG_DEBUG("Outstanding SAC activation request for stream '~tp', " ++ ?LOG_DEBUG("Outstanding SAC activation request for stream '~tp', " ++
"group '~tp', sending activation.", "group '~tp', sending activation.",
[Stream, ConsumerName]), [Stream, ConsumerName]),
Acc; Acc;
(K, V, Acc) -> (K, V, Acc) ->
Acc#{K => V} Acc#{K => V}
@ -3403,8 +3382,8 @@ store_offset(Reference, Stream, Offset, Connection0) ->
case lookup_leader(Stream, Connection0) of case lookup_leader(Stream, Connection0) of
{error, Error} -> {error, Error} ->
?LOG_WARNING("Could not find leader to store offset on ~tp: " ?LOG_WARNING("Could not find leader to store offset on ~tp: "
"~tp", "~tp",
[Stream, Error]), [Stream, Error]),
Connection0; Connection0;
{ClusterLeader, Connection1} -> {ClusterLeader, Connection1} ->
osiris:write_tracking(ClusterLeader, Reference, Offset), osiris:write_tracking(ClusterLeader, Reference, Offset),
@ -3447,7 +3426,7 @@ remove_subscription(SubscriptionId,
configuration = #consumer_configuration{stream = Stream, member_pid = MemberPid}} = configuration = #consumer_configuration{stream = Stream, member_pid = MemberPid}} =
Consumer, Consumer,
?LOG_DEBUG("Deleting subscription ~tp (stream ~tp)", ?LOG_DEBUG("Deleting subscription ~tp (stream ~tp)",
[SubscriptionId, Stream]), [SubscriptionId, Stream]),
close_log(Log), close_log(Log),
#{Stream := SubscriptionsForThisStream} = StreamSubscriptions, #{Stream := SubscriptionsForThisStream} = StreamSubscriptions,
SubscriptionsForThisStream1 = SubscriptionsForThisStream1 =
@ -4057,7 +4036,7 @@ sac_call(Call) ->
Err; Err;
_ -> _ ->
?LOG_INFO("Stream SAC coordinator call failed with ~tp", ?LOG_INFO("Stream SAC coordinator call failed with ~tp",
[Reason]), [Reason]),
throw({stop, {shutdown, stream_sac_coordinator_error}}) throw({stop, {shutdown, stream_sac_coordinator_error}})
end; end;
R -> R ->

View File

@ -780,7 +780,7 @@ parse_request(<<?REQUEST:1,
parse_map(Bin, #{}); parse_map(Bin, #{});
_ -> _ ->
?LOG_WARNING("Incorrect binary for subscription properties: ~w", ?LOG_WARNING("Incorrect binary for subscription properties: ~w",
[PropsBin]), [PropsBin]),
#{} #{}
end, end,
request(CorrelationId, request(CorrelationId,

View File

@ -185,6 +185,6 @@ ets_select(T, Spec) ->
catch error:Reason -> catch error:Reason ->
%% badarg can occur if the table has no been created yet %% badarg can occur if the table has no been created yet
?LOG_WARNING("Error while querying ETS table '~tp': ~tp", ?LOG_WARNING("Error while querying ETS table '~tp': ~tp",
[T, Reason]), [T, Reason]),
[] []
end. end.

View File

@ -77,7 +77,7 @@ init(Args0) ->
rabbit_tracing_traces:announce(VHost, Name, self()), rabbit_tracing_traces:announce(VHost, Name, self()),
Format = list_to_atom(binary_to_list(pget(format, Args))), Format = list_to_atom(binary_to_list(pget(format, Args))),
?LOG_INFO("Tracer opened log file ~tp with " ?LOG_INFO("Tracer opened log file ~tp with "
"format ~tp", [Filename, Format]), "format ~tp", [Filename, Format]),
{ok, #state{conn = Conn, ch = Ch, vhost = VHost, queue = Q, {ok, #state{conn = Conn, ch = Ch, vhost = VHost, queue = Q,
file = F, filename = Filename, file = F, filename = Filename,
format = Format, buf = [], buf_cnt = 0, format = Format, buf = [], buf_cnt = 0,

View File

@ -43,7 +43,7 @@ file_info(Name) ->
Info#file_info.size; Info#file_info.size;
{error, Error} -> {error, Error} ->
?LOG_WARNING("error getting file info for ~ts: ~tp", ?LOG_WARNING("error getting file info for ~ts: ~tp",
[Name, Error]), [Name, Error]),
0 0
end, end,
[{name, list_to_binary(Name)}, {size, Size}]. [{name, list_to_binary(Name)}, {size, Size}].

View File

@ -234,8 +234,8 @@ refresh_provider_certs(Provider, Config, ProviderState) ->
NewProviderState; NewProviderState;
{error, Reason} -> {error, Reason} ->
?LOG_ERROR("Unable to load certificate list for provider ~tp," ?LOG_ERROR("Unable to load certificate list for provider ~tp,"
" reason: ~tp", " reason: ~tp",
[Provider, Reason]), [Provider, Reason]),
ProviderState ProviderState
end. end.
@ -258,9 +258,9 @@ update_certs(CertsList, Provider, Config) ->
save_cert(CertId, Provider, IssuerId, Cert, Name); save_cert(CertId, Provider, IssuerId, Cert, Name);
{error, Reason} -> {error, Reason} ->
?LOG_ERROR("Unable to load CA certificate ~tp" ?LOG_ERROR("Unable to load CA certificate ~tp"
" with provider ~tp," " with provider ~tp,"
" reason: ~tp", " reason: ~tp",
[CertId, Provider, Reason]) [CertId, Provider, Reason])
end end
end, end,
NewCertIds -- OldCertIds), NewCertIds -- OldCertIds),
@ -313,8 +313,8 @@ providers(Config) ->
{module, Provider} -> true; {module, Provider} -> true;
{error, Error} -> {error, Error} ->
?LOG_WARNING("Unable to load trust store certificates" ?LOG_WARNING("Unable to load trust store certificates"
" with provider module ~tp. Reason: ~tp", " with provider module ~tp. Reason: ~tp",
[Provider, Error]), [Provider, Error]),
false false
end end
end, end,
@ -345,4 +345,3 @@ clean_deleted_providers(Providers) ->
ets:fun2ms(fun(#entry{provider = P})-> true end), ets:fun2ms(fun(#entry{provider = P})-> true end),
Condition = [ {'=/=', '$1', Provider} || Provider <- Providers ], Condition = [ {'=/=', '$1', Provider} || Provider <- Providers ],
ets:select_delete(table_name(), [{EntryMatch, Condition, [true]}]). ets:select_delete(table_name(), [{EntryMatch, Condition, [true]}]).

View File

@ -52,8 +52,8 @@ edit(Options) ->
ok; ok;
Val -> Val ->
?LOG_WARNING("RabbitMQ trust store plugin is used " ?LOG_WARNING("RabbitMQ trust store plugin is used "
"and the verify_fun TLS option is set: ~tp. " "and the verify_fun TLS option is set: ~tp. "
"It will be overwritten by the plugin.", [Val]), "It will be overwritten by the plugin.", [Val]),
ok ok
end, end,
%% Only enter those options neccessary for this application. %% Only enter those options neccessary for this application.

View File

@ -39,8 +39,7 @@ list_certs(Config, _) ->
load_cert({FileName, _, _}, _, Config) -> load_cert({FileName, _, _}, _, Config) ->
Path = directory_path(Config), Path = directory_path(Config),
Cert = extract_cert(Path, FileName), Cert = extract_cert(Path, FileName),
?LOG_INFO( ?LOG_INFO("trust store: loading certificate '~ts'", [FileName]),
"trust store: loading certificate '~ts'", [FileName]),
{ok, Cert}. {ok, Cert}.
extract_cert(Path, FileName) -> extract_cert(Path, FileName) ->

View File

@ -131,7 +131,7 @@ is_authorized(ReqData, Context, Username, Password, ErrorMsg, Fun, AuthConfig) -
is_authorized(ReqData, Context, Username, Password, ErrorMsg, Fun, AuthConfig, ReplyWhenFailed) -> is_authorized(ReqData, Context, Username, Password, ErrorMsg, Fun, AuthConfig, ReplyWhenFailed) ->
ErrFun = fun (ResolvedUserName, Msg) -> ErrFun = fun (ResolvedUserName, Msg) ->
?LOG_WARNING("HTTP access denied: user '~ts' - ~ts", ?LOG_WARNING("HTTP access denied: user '~ts' - ~ts",
[ResolvedUserName, Msg]), [ResolvedUserName, Msg]),
case ReplyWhenFailed of case ReplyWhenFailed of
true -> not_authorised(Msg, ReqData, Context); true -> not_authorised(Msg, ReqData, Context);
false -> {false, ReqData, "Not_Authorized"} false -> {false, ReqData, "Not_Authorized"}
@ -173,7 +173,7 @@ is_authorized(ReqData, Context, Username, Password, ErrorMsg, Fun, AuthConfig, R
{refused, _Username, Msg, Args} -> {refused, _Username, Msg, Args} ->
rabbit_core_metrics:auth_attempt_failed(IP, Username, http), rabbit_core_metrics:auth_attempt_failed(IP, Username, http),
?LOG_WARNING("HTTP access denied: ~ts", ?LOG_WARNING("HTTP access denied: ~ts",
[rabbit_misc:format(Msg, Args)]), [rabbit_misc:format(Msg, Args)]),
case ReplyWhenFailed of case ReplyWhenFailed of
true -> not_authenticated(<<"Not_Authorized">>, ReqData, Context, AuthConfig); true -> not_authenticated(<<"Not_Authorized">>, ReqData, Context, AuthConfig);
false -> {false, ReqData, "Not_Authorized"} false -> {false, ReqData, "Not_Authorized"}

View File

@ -95,7 +95,7 @@ handle_call({remove, Name}, _From,
case listener_by_name(Name) of case listener_by_name(Name) of
{error, not_found} -> {error, not_found} ->
?LOG_WARNING("HTTP listener registry could not find context ~tp", ?LOG_WARNING("HTTP listener registry could not find context ~tp",
[Name]), [Name]),
{reply, ok, undefined}; {reply, ok, undefined};
{ok, Listener} -> {ok, Listener} ->
{ok, {Selectors, Fallback}} = lookup_dispatch(Listener), {ok, {Selectors, Fallback}} = lookup_dispatch(Listener),

View File

@ -120,7 +120,7 @@ start_tcp_listener(TCPConf0, CowboyOpts) ->
end, end,
listener_started(?TCP_PROTOCOL, TCPConf), listener_started(?TCP_PROTOCOL, TCPConf),
?LOG_INFO("rabbit_web_mqtt: listening for HTTP connections on ~s:~w", ?LOG_INFO("rabbit_web_mqtt: listening for HTTP connections on ~s:~w",
[IpStr, Port]). [IpStr, Port]).
start_tls_listener([], _) -> ok; start_tls_listener([], _) -> ok;
@ -148,7 +148,7 @@ start_tls_listener(TLSConf0, CowboyOpts) ->
end, end,
listener_started(?TLS_PROTOCOL, TLSConf), listener_started(?TLS_PROTOCOL, TLSConf),
?LOG_INFO("rabbit_web_mqtt: listening for HTTPS connections on ~s:~w", ?LOG_INFO("rabbit_web_mqtt: listening for HTTPS connections on ~s:~w",
[TLSIpStr, TLSPort]). [TLSIpStr, TLSPort]).
listener_started(Protocol, Listener) -> listener_started(Protocol, Listener) ->
Port = rabbit_misc:pget(port, Listener), Port = rabbit_misc:pget(port, Listener),

View File

@ -108,7 +108,7 @@ websocket_init(State) ->
-spec close_connection(pid(), string()) -> 'ok'. -spec close_connection(pid(), string()) -> 'ok'.
close_connection(Pid, Reason) -> close_connection(Pid, Reason) ->
?LOG_INFO("Web STOMP: will terminate connection process ~tp, reason: ~ts", ?LOG_INFO("Web STOMP: will terminate connection process ~tp, reason: ~ts",
[Pid, Reason]), [Pid, Reason]),
sys:terminate(Pid, Reason), sys:terminate(Pid, Reason),
ok. ok.
@ -245,7 +245,7 @@ websocket_info(emit_stats, State) ->
websocket_info(Msg, State) -> websocket_info(Msg, State) ->
?LOG_INFO("Web STOMP: unexpected message ~tp", ?LOG_INFO("Web STOMP: unexpected message ~tp",
[Msg]), [Msg]),
{ok, State}. {ok, State}.
terminate(_Reason, _Req, #state{proc_state = undefined}) -> terminate(_Reason, _Req, #state{proc_state = undefined}) ->