From 9c81f4901dc72a5392caea027fcd05a4ca89c5ed Mon Sep 17 00:00:00 2001 From: David Ansari Date: Thu, 6 Jun 2024 10:59:15 +0200 Subject: [PATCH] Prefer monotonic time to measure durations Monotonic time instead of wall clock time should be used to measure a duration. This is mostly a cosmetic change given that consumer timeouts are 30 mins by default. See also https://github.com/rabbitmq/khepri/issues/239 https://github.com/rabbitmq/rabbitmq-server/pull/10928 (cherry picked from commit f5d2fd68e36f4715b1ddf1923fefc9855eb46ced) --- deps/rabbit/src/rabbit_channel.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl index b83d768fa1df..eedec82451a5 100644 --- a/deps/rabbit/src/rabbit_channel.erl +++ b/deps/rabbit/src/rabbit_channel.erl @@ -126,7 +126,7 @@ delivery_tag, %% consumer tag tag, - delivered_at, + delivered_at :: integer(), %% queue name queue, %% message ID used by queue and message store implementations @@ -1985,10 +1985,10 @@ record_sent(Type, QueueType, Tag, AckRequired, false -> ok end, - DeliveredAt = os:system_time(millisecond), rabbit_trace:tap_out(Msg, ConnName, ChannelNum, Username, TraceState), UAMQ1 = case AckRequired of true -> + DeliveredAt = erlang:monotonic_time(millisecond), ?QUEUE:in(#pending_ack{delivery_tag = DeliveryTag, tag = Tag, delivered_at = DeliveredAt, @@ -2778,7 +2778,7 @@ evaluate_consumer_timeout(State = #ch{unacked_message_q = UAMQ}) -> evaluate_consumer_timeout1(PA = #pending_ack{delivered_at = Time}, State) -> - Now = os:system_time(millisecond), + Now = erlang:monotonic_time(millisecond), case get_consumer_timeout(PA, State) of Timeout when is_integer(Timeout) andalso Time < Now - Timeout ->