From: Peter Palfrader Date: Fri, 13 Jun 2008 21:22:49 +0000 (+0000) Subject: implement proposal 138: removing down routers from consensus X-Git-Tag: tor-0.2.1.2-alpha~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4ef606b8fc3c47c95de471059ad15cd13bdb1299;p=thirdparty%2Ftor.git implement proposal 138: removing down routers from consensus svn:r15230 --- diff --git a/ChangeLog b/ChangeLog index a446172dea..2ba424e9b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,9 @@ Changes in version 0.2.1.2-alpha - 2008-??-?? o Minor features: - Allow OpenSSL to use dynamic locks if it wants. + - When building a consensus do not include routers that are down. + This will cut down 30% to 40% on consensus size. Implements + proposal 138. o Bugfixes: - Asking for a conditional consensus at .../consensus/ would crash a dirserver if it did not already have a consensus. diff --git a/src/or/dirvote.c b/src/or/dirvote.c index a34b7f1803..421f9c26c9 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -105,7 +105,7 @@ format_networkstatus_vote(crypto_pk_env_t *private_signing_key, tor_snprintf(status, len, "network-status-version 3\n" "vote-status vote\n" - "consensus-methods 1 2 3\n" + "consensus-methods 1 2 3 4\n" "published %s\n" "valid-after %s\n" "fresh-until %s\n" @@ -443,7 +443,7 @@ compute_consensus_method(smartlist_t *votes) static int consensus_method_is_supported(int method) { - return (method >= 1) && (method <= 3); + return (method >= 1) && (method <= 4); } /** Given a list of vote networkstatus_t in votes, our public @@ -788,7 +788,7 @@ networkstatus_compute_consensus(smartlist_t *votes, const char *lowest_id = NULL; const char *chosen_version; const char *chosen_name = NULL; - int is_named = 0, is_unnamed = 0; + int is_named = 0, is_unnamed = 0, is_running = 0; int naming_conflict = 0; int n_listing = 0; int i; @@ -892,11 +892,19 @@ networkstatus_compute_consensus(smartlist_t *votes, if (is_unnamed) smartlist_add(chosen_flags, (char*)fl); } else { - if (flag_counts[fl_sl_idx] > n_flag_voters[fl_sl_idx]/2) + if (flag_counts[fl_sl_idx] > n_flag_voters[fl_sl_idx]/2) { smartlist_add(chosen_flags, (char*)fl); + if (!strcmp(fl, "Running")) + is_running = 1; + } } }); + /* Starting with consensus method 4 we do not list servers + * that are not running in a consensus. See Proposal 138 */ + if (consensus_method >= 4 && !is_running) + continue; + /* Pick the version. */ if (smartlist_len(versions)) { sort_version_list(versions, 0); @@ -2057,4 +2065,3 @@ dirvote_get_vote(const char *fp, int flags) } return NULL; } -