Skip to content

Commit

Permalink
Merge remote-tracking branch 'tor-github/pr/820' into maint-0.3.4
Browse files Browse the repository at this point in the history
  • Loading branch information
teor2345 committed Mar 27, 2019
2 parents d7a5fdc + 4ab2e9a commit 6d057c5
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 1 deletion.
7 changes: 7 additions & 0 deletions changes/ticket29806
Original file line number Diff line number Diff line change
@@ -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.
8 changes: 7 additions & 1 deletion src/or/dirserv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
57 changes: 57 additions & 0 deletions src/test/test_dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -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[] = {
Expand Down Expand Up @@ -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"
};

Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 6d057c5

Please sign in to comment.