hs: Fix a spurious warn in rend_log_intro_limit

We do dump HS stats now at log info everytime the intro circuit creation retry
period limit has been reached. However, the log was upgraded to warning if we
actually were over the elapsed time (plus an extra slop).

It is actually something that will happen in tor in normal case. For instance,
if the network goes down for 10 minutes then back up again making
have_completed_a_circuit() return false which results in never updating that
retry period marker for a service.

Fixes #22032

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
David Goulet 2017-04-21 11:09:34 -04:00
parent b7dd3518b9
commit 74f7657e56

View File

@ -1054,20 +1054,13 @@ rend_log_intro_limit(const rend_service_t *service, int min_severity)
} }
time_t intro_period_elapsed = time(NULL) - service->intro_period_started; time_t intro_period_elapsed = time(NULL) - service->intro_period_started;
tor_assert_nonfatal(intro_period_elapsed >= 0); tor_assert_nonfatal(intro_period_elapsed >= 0);
/* We delayed resuming circuits longer than expected */
int exceeded_elapsed = (intro_period_elapsed > INTRO_CIRC_RETRY_PERIOD +
INTRO_CIRC_RETRY_PERIOD_SLOP);
if (exceeded_elapsed) {
severity = LOG_WARN;
}
log_fn(severity, LD_REND, "Hidden service %s %s %d intro points in the last " log_fn(severity, LD_REND, "Hidden service %s %s %d intro points in the last "
"%d seconds%s. Intro circuit launches are limited to %d per %d " "%d seconds. Intro circuit launches are limited to %d per %d "
"seconds.", "seconds.",
service->service_id, service->service_id,
exceeded_limit ? "exceeded launch limit with" : "launched", exceeded_limit ? "exceeded launch limit with" : "launched",
service->n_intro_circuits_launched, service->n_intro_circuits_launched,
(int)intro_period_elapsed, (int)intro_period_elapsed,
exceeded_elapsed ? " (delayed)" : "",
rend_max_intro_circs_per_period(service->n_intro_points_wanted), rend_max_intro_circs_per_period(service->n_intro_points_wanted),
INTRO_CIRC_RETRY_PERIOD); INTRO_CIRC_RETRY_PERIOD);
rend_service_dump_stats(severity); rend_service_dump_stats(severity);