mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
resolved: add 'next_attempt_after' field to DnsTransaction
For each transaction, record when the earliest point in time when the query packet may hit the wire. This is the same time stamp for which the timer is scheduled in retries, except for the initial query packets which are delayed by a random jitter. In this case, we denote that the packet may actually be sent at the nominal time, without the jitter. Transactions that share the same timestamp will also have identical values in this field. It is used to coalesce pending queries in a later patch.
This commit is contained in:
parent
1effe96568
commit
a9da14e1e9
@ -814,6 +814,7 @@ int dns_transaction_go(DnsTransaction *t) {
|
||||
return r;
|
||||
|
||||
t->n_attempts = 0;
|
||||
t->next_attempt_after = ts;
|
||||
t->state = DNS_TRANSACTION_PENDING;
|
||||
|
||||
log_debug("Delaying %s transaction for " USEC_FMT "us.", dns_protocol_to_string(t->scope->protocol), jitter);
|
||||
@ -863,16 +864,20 @@ int dns_transaction_go(DnsTransaction *t) {
|
||||
return dns_transaction_go(t);
|
||||
}
|
||||
|
||||
ts += transaction_get_resend_timeout(t);
|
||||
|
||||
r = sd_event_add_time(
|
||||
t->scope->manager->event,
|
||||
&t->timeout_event_source,
|
||||
clock_boottime_or_monotonic(),
|
||||
ts + transaction_get_resend_timeout(t), 0,
|
||||
ts, 0,
|
||||
on_transaction_timeout, t);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
t->state = DNS_TRANSACTION_PENDING;
|
||||
t->next_attempt_after = ts;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -73,6 +73,7 @@ struct DnsTransaction {
|
||||
bool answer_authenticated;
|
||||
|
||||
usec_t start_usec;
|
||||
usec_t next_attempt_after;
|
||||
sd_event_source *timeout_event_source;
|
||||
unsigned n_attempts;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user