From ea2ba4f5a89e60ef1b9d589b8a9013ba9cd87e77 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Mon, 24 Oct 2022 04:30:23 -0400 Subject: [PATCH 1/2] back out most of commit b7992d4f The AuthDirDontVoteOnDirAuthBandwidth torrc option never worked, and it was implemented in a way that could have produced consensus conflicts if it had. Resolves bug 40700. --- src/feature/dirauth/dirauth_options.inc | 3 --- src/feature/dirauth/dirvote.c | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) 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; From bab8375ef5e4a917f9512e4250c52a45d33fb9ba Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Thu, 20 Oct 2022 20:56:33 -0400 Subject: [PATCH 2/2] dir auths now omit Measured= if rs->is_authority 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. Resolves ticket 40698. --- changes/bug40698 | 11 +++++++++++ src/feature/nodelist/fmt_routerstatus.c | 15 +++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 changes/bug40698 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/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) {