aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2019-03-26 01:25:11 +0200
committerGeorge Kadianakis <desnacked@riseup.net>2019-03-26 01:25:11 +0200
commitf8304cc6fb82d3a6bf4029f0352497c5b80eb609 (patch)
treeefd3fe2c3e7c436e4a8c77d8b4ba9c385be9056a
parent1e154d7a156de68f41a52c067ba47fd38ce2a520 (diff)
parentee43bc706cd27c23f64833526190c640f1be8c87 (diff)
downloadtor-f8304cc6fb82d3a6bf4029f0352497c5b80eb609.tar.gz
tor-f8304cc6fb82d3a6bf4029f0352497c5b80eb609.zip
Merge branch 'maint-0.3.4' into release-0.3.4
-rw-r--r--changes/ticket298067
-rw-r--r--src/or/dirserv.c8
-rw-r--r--src/test/test_dir.c57
3 files changed, 71 insertions, 1 deletions
diff --git a/changes/ticket29806 b/changes/ticket29806
new file mode 100644
index 0000000000..6afefd4c04
--- /dev/null
+++ b/changes/ticket29806
@@ -0,0 +1,7 @@
+ o Minor features (bandwidth authority):
+ - Make bandwidth authorities to ignore relays that are reported in the
+ bandwidth file with the key-value "vote=0".
+ This change allows to report the relays that were not measured due
+ some failure and diagnose the reasons without the bandwidth being included in the
+ bandwidth authorities vote.
+ Closes ticket 29806.
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 4e09c1c65b..ae1975f166 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -2497,7 +2497,13 @@ measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line,
}
do {
- if (strcmpstart(cp, "bw=") == 0) {
+ // If the line contains vote=0, ignore it.
+ if (strcmpstart(cp, "vote=0") == 0) {
+ log_debug(LD_DIRSERV, "Ignoring bandwidth file line that contains "
+ "vote=0: %s",escaped(orig_line));
+ tor_free(line);
+ return -1;
+ } else if (strcmpstart(cp, "bw=") == 0) {
int parse_ok = 0;
char *endptr;
if (got_bw) {
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 37b015b72d..52d3ef159c 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -1508,6 +1508,19 @@ test_dir_measured_bw_kb(void *arg)
/* check whether node_id can be at the end and something in the
* in the middle of bw and node_id */
"bw=1024 foo=bar node_id=$557365204145532d32353620696e73746561642e\n",
+
+ /* Test that a line with vote=1 will pass. */
+ "node_id=$557365204145532d32353620696e73746561642e bw=1024 vote=1\n",
+ /* Test that a line with unmeasured=1 will pass. */
+ "node_id=$557365204145532d32353620696e73746561642e bw=1024 unmeasured=1\n",
+ /* Test that a line with vote=1 and unmeasured=1 will pass. */
+ "node_id=$557365204145532d32353620696e73746561642e bw=1024 vote=1"
+ "unmeasured=1\n",
+ /* Test that a line with unmeasured=0 will pass. */
+ "node_id=$557365204145532d32353620696e73746561642e bw=1024 unmeasured=0\n",
+ /* Test that a line with vote=1 and unmeasured=0 will pass. */
+ "node_id=$557365204145532d32353620696e73746561642e bw=1024 vote=1"
+ "unmeasured=0\n",
"end"
};
const char *lines_fail[] = {
@@ -1541,6 +1554,12 @@ test_dir_measured_bw_kb(void *arg)
"node_id=$55736520414552d32353620696e73746561642e bw=1024\n",
"node_id=557365204145532d32353620696e73746561642e bw=1024\n",
"node_id= $557365204145532d32353620696e73746561642e bw=0.23\n",
+
+ /* Test that a line with vote=0 will fail too, so that it is ignored. */
+ "node_id=$557365204145532d32353620696e73746561642e bw=1024 vote=0\n",
+ /* Test that a line with vote=0 will fail even if unmeasured=0. */
+ "node_id=$557365204145532d32353620696e73746561642e bw=1024 vote=0 "
+ "unmeasured=0\n",
"end"
};
@@ -1706,6 +1725,44 @@ test_dir_dirserv_read_measured_bandwidths(void *arg)
tor_free(content);
tt_int_op(0, OP_EQ, dirserv_read_measured_bandwidths(fname, NULL));
+ /* Test v1.x.x bandwidth line with vote=0.
+ * It will be ignored it and logged it at debug level. */
+ const char *relay_lines_ignore =
+ "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 bw=1024 vote=0\n"
+ "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 bw=1024 vote=0"
+ "unmeasured=1\n"
+ "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 bw=1024 vote=0"
+ "unmeasured=0\n";
+
+ /* Create the bandwidth file */
+ tor_asprintf(&content, "%ld\n%s", (long)timestamp, relay_lines_ignore);
+ write_str_to_file(fname, content, 0);
+ tor_free(content);
+
+ /* Read the bandwidth file */
+ setup_full_capture_of_logs(LOG_DEBUG);
+ tt_int_op(0, OP_EQ, dirserv_read_measured_bandwidths(fname, NULL));
+ expect_log_msg_containing("Ignoring bandwidth file line");
+ teardown_capture_of_logs();
+
+ /* Test v1.x.x bandwidth line with "vote=1" or "unmeasured=1" or
+ * "unmeasured=0".
+ * They will not be ignored. */
+ /* Create the bandwidth file */
+ const char *relay_lines_vote =
+ "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 bw=1024 vote=1\n"
+ "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 bw=1024 unmeasured=0\n"
+ "node_id=$68A483E05A2ABDCA6DA5A3EF8DB5177638A27F80 bw=1024 unmeasured=1\n";
+ tor_asprintf(&content, "%ld\n%s", (long)timestamp, relay_lines_vote);
+ write_str_to_file(fname, content, 0);
+ tor_free(content);
+
+ /* Read the bandwidth file */
+ setup_full_capture_of_logs(LOG_DEBUG);
+ tt_int_op(0, OP_EQ, dirserv_read_measured_bandwidths(fname, NULL));
+ expect_log_msg_not_containing("Ignoring bandwidth file line");
+ teardown_capture_of_logs();
+
done:
tor_free(fname);
}