diff options
author | Mike Perry <mikeperry-git@torproject.org> | 2018-05-16 06:42:41 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-06-02 10:36:36 -0700 |
commit | fe5764012a05e5d9382e1a59d015ff6ca0bd804b (patch) | |
tree | 7a32d15a0fd1c4c66633438815842e53a91465c7 /src/or | |
parent | 3c4353179f2304767f5084734a7d1550f51f4542 (diff) | |
download | tor-fe5764012a05e5d9382e1a59d015ff6ca0bd804b.tar.gz tor-fe5764012a05e5d9382e1a59d015ff6ca0bd804b.zip |
Bug 26121: Improve BUILDTIMEOUT_SET accuracy.
We were miscounting the total number of circuits for the TIMEOUT_RATE and
CLOSE_RATE fields of this event.
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/circuitstats.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c index f87bbd822b..f06c2e5e38 100644 --- a/src/or/circuitstats.c +++ b/src/or/circuitstats.c @@ -1908,13 +1908,20 @@ cbt_control_event_buildtimeout_set(const circuit_build_times_t *cbt, /* The timeout rate is the ratio of the timeout count over * the total number of circuits attempted. The total number of - * circuits is (timeouts+succeeded+closed), since a circuit can - * either timeout, close, or succeed. We cast the denominator + * circuits is (timeouts+succeeded), since every circuit + * either succeeds, or times out. "Closed" circuits are + * MEASURE_TIMEOUT circuits whose measurement period expired. + * All MEASURE_TIMEOUT circuits are counted in the timeouts stat + * before transitioning to MEASURE_TIMEOUT (in + * circuit_build_times_mark_circ_as_measurement_only()). + * MEASURE_TIMEOUT circuits that succeed are *not* counted as + * "succeeded". See circuit_build_times_handle_completed_hop(). + * + * We cast the denominator * to promote it to double before the addition, to avoid int32 * overflow. */ const double total_circuits = - ((double)cbt->num_circ_timeouts) + cbt->num_circ_succeeded - + cbt->num_circ_closed; + ((double)cbt->num_circ_timeouts) + cbt->num_circ_succeeded; if (total_circuits >= 1.0) { timeout_rate = cbt->num_circ_timeouts / total_circuits; close_rate = cbt->num_circ_closed / total_circuits; |