From 25e6c89df50ba7d52bbee1ad4d5fe9e62d1ad232 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 24 Mar 2021 18:45:35 +0100 Subject: [PATCH] resolved: reset initial_jitter_elapsed properly This fixes resetting of initial_jitter_elapsed: the first time the timer hits after initial_jitter_scheduled is set we need to mark things as elapsed. (Also improve log messages around this while we are at it) (cherry picked from commit 213cb4f7e443241ef942cfbd0263cde33b4672c1) --- src/resolve/resolved-dns-transaction.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c index f084a70e45..d8c7fcfad5 100644 --- a/src/resolve/resolved-dns-transaction.c +++ b/src/resolve/resolved-dns-transaction.c @@ -1510,7 +1510,10 @@ static int on_transaction_timeout(sd_event_source *s, usec_t usec, void *userdat assert(s); assert(t); - if (!t->initial_jitter_scheduled || t->initial_jitter_elapsed) { + if (t->initial_jitter_scheduled && !t->initial_jitter_elapsed) { + log_debug("Initial jitter phase for transaction %" PRIu16 " elapsed.", t->id); + t->initial_jitter_elapsed = true; + } else { /* Timeout reached? Increase the timeout for the server used */ switch (t->scope->protocol) { @@ -1528,14 +1531,12 @@ static int on_transaction_timeout(sd_event_source *s, usec_t usec, void *userdat assert_not_reached("Invalid DNS protocol."); } - if (t->initial_jitter_scheduled) - t->initial_jitter_elapsed = true; + log_debug("Timeout reached on transaction %" PRIu16 ".", t->id); } - log_debug("Timeout reached on transaction %" PRIu16 ".", t->id); - - dns_transaction_retry(t, true); /* try a different server, but given this means packet loss, let's do - * so even if we already tried a bunch */ + dns_transaction_retry(t, /* next_server= */ true); /* try a different server, but given this means + * packet loss, let's do so even if we already + * tried a bunch */ return 0; } @@ -1928,8 +1929,8 @@ int dns_transaction_go(DnsTransaction *t) { if (r <= 0) return r; - log_debug("%s transaction %" PRIu16 " for <%s> scope %s on %s/%s (validate=%s).", - t->bypass ? "Bypass" : "Regular", + log_debug("Firing %s transaction %" PRIu16 " for <%s> scope %s on %s/%s (validate=%s).", + t->bypass ? "bypass" : "regular", t->id, dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str), dns_protocol_to_string(t->scope->protocol), -- 2.25.1