diff options
-rw-r--r-- | changes/bug40698 | 11 | ||||
-rw-r--r-- | src/feature/dirauth/dirauth_options.inc | 3 | ||||
-rw-r--r-- | src/feature/dirauth/dirvote.c | 3 | ||||
-rw-r--r-- | src/feature/nodelist/fmt_routerstatus.c | 15 |
4 files changed, 25 insertions, 7 deletions
diff --git a/changes/bug40698 b/changes/bug40698 new file mode 100644 index 0000000000..98ddd4f968 --- /dev/null +++ b/changes/bug40698 @@ -0,0 +1,11 @@ + o Minor bugfixes (dirauth): + - Directory authorities stop voting a consensus "Measured" weight + for relays with the Authority flag. Now these relays will be + considered unmeasured, which should reserve their bandwidth + for their dir auth role and minimize distractions from other + roles. In place of the "Measured" weight, they now include a + "MeasuredButAuthority" weight (not used by anything) so the + bandwidth authority's opinion on this relay can be recorded for + posterity. Lastly, remove the AuthDirDontVoteOnDirAuthBandwidth + torrc option which never worked right. Fixes bugs 40698 and 40700; + bugfix on 0.4.7.2-alpha. diff --git a/src/feature/dirauth/dirauth_options.inc b/src/feature/dirauth/dirauth_options.inc index 7ee0201e1a..a43ed285ce 100644 --- a/src/feature/dirauth/dirauth_options.inc +++ b/src/feature/dirauth/dirauth_options.inc @@ -138,7 +138,4 @@ CONF_VAR(VersioningAuthoritativeDirectory, BOOL, 0, "0") * pressure or not. */ CONF_VAR(AuthDirRejectRequestsUnderLoad, BOOL, 0, "1") -/** Boolean: Should we not give bandwidth weight measurements to dirauths? */ -CONF_VAR(AuthDirDontVoteOnDirAuthBandwidth, BOOL, 0, "1") - END_CONF_STRUCT(dirauth_options_t) diff --git a/src/feature/dirauth/dirvote.c b/src/feature/dirauth/dirvote.c index cdd2c132ef..1bb4fd7de1 100644 --- a/src/feature/dirauth/dirvote.c +++ b/src/feature/dirauth/dirvote.c @@ -2302,8 +2302,7 @@ networkstatus_compute_consensus(smartlist_t *votes, smartlist_add_asprintf(chunks, "pr %s\n", chosen_protocol_list); } /* Now the weight line. */ - if (rs_out.has_bandwidth && (!rs_out.is_authority || - !dirauth_get_options()->AuthDirDontVoteOnDirAuthBandwidth)) { + if (rs_out.has_bandwidth) { char *guardfraction_str = NULL; int unmeasured = rs_out.bw_is_unmeasured; diff --git a/src/feature/nodelist/fmt_routerstatus.c b/src/feature/nodelist/fmt_routerstatus.c index 95379a7721..8c02a302af 100644 --- a/src/feature/nodelist/fmt_routerstatus.c +++ b/src/feature/nodelist/fmt_routerstatus.c @@ -169,9 +169,20 @@ routerstatus_format_entry(const routerstatus_t *rs, const char *version, smartlist_add_asprintf(chunks, "w Bandwidth=%d", bw_kb); + /* Include the bandwidth weight from our external bandwidth + * authority, if we have one. */ if (format == NS_V3_VOTE && vrs && vrs->has_measured_bw) { - smartlist_add_asprintf(chunks, - " Measured=%d", vrs->measured_bw_kb); + if (!rs->is_authority) { /* normal case */ + smartlist_add_asprintf(chunks, + " Measured=%d", vrs->measured_bw_kb); + } else { + /* dir auth special case: don't give it a Measured line, so we + * can reserve its attention for authority-specific activities. + * But do include the bwauth's opinion so it can be recorded for + * posterity. See #40698 for details. */ + smartlist_add_asprintf(chunks, + " MeasuredButAuthority=%d", vrs->measured_bw_kb); + } } /* Write down guardfraction information if we have it. */ if (format == NS_V3_VOTE && vrs && vrs->status.has_guardfraction) { |