Don't delay uploading a new desc if bw estimate was 0

When a tor relay starts up and has no historical information about its
bandwidth capability, it uploads a descriptor with a bw estimate of 0.
It then starts its bw selftest, but has to wait 20 minutes to upload the
next descriptor due to the MAX_BANDWIDTH_CHANGE_FREQ delay. This change
should mean that on average, relays start seeing meaningful traffic a
little quicker, since they will have a higher chance to appear in the
consensus with a nonzero bw.

Patch by Roger, changes file and comment by Sebastian.
This commit is contained in:
Sebastian Hahn 2014-08-30 08:36:20 +02:00 committed by Nick Mathewson
parent bce32e0a35
commit 14abf1c3f1
2 changed files with 8 additions and 2 deletions

5
changes/bug13000 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes:
- If our previous bandwidth estimate was 0 bytes, allow publishing a
new relay descriptor immediately. Fixes bug 13000; bugfix on
0.1.1.6-alpha.

View File

@ -2063,7 +2063,8 @@ mark_my_descriptor_dirty(const char *reason)
} }
/** How frequently will we republish our descriptor because of large (factor /** How frequently will we republish our descriptor because of large (factor
* of 2) shifts in estimated bandwidth? */ * of 2) shifts in estimated bandwidth? Note: We don't use this constant
* if our previous bandwidth estimate was exactly 0. */
#define MAX_BANDWIDTH_CHANGE_FREQ (20*60) #define MAX_BANDWIDTH_CHANGE_FREQ (20*60)
/** Check whether bandwidth has changed a lot since the last time we announced /** Check whether bandwidth has changed a lot since the last time we announced
@ -2081,7 +2082,7 @@ check_descriptor_bandwidth_changed(time_t now)
if ((prev != cur && (!prev || !cur)) || if ((prev != cur && (!prev || !cur)) ||
cur > prev*2 || cur > prev*2 ||
cur < prev/2) { cur < prev/2) {
if (last_changed+MAX_BANDWIDTH_CHANGE_FREQ < now) { if (last_changed+MAX_BANDWIDTH_CHANGE_FREQ < now || !prev) {
log_info(LD_GENERAL, log_info(LD_GENERAL,
"Measured bandwidth has changed; rebuilding descriptor."); "Measured bandwidth has changed; rebuilding descriptor.");
mark_my_descriptor_dirty("bandwidth has changed"); mark_my_descriptor_dirty("bandwidth has changed");