From: Nick Mathewson Date: Thu, 25 Oct 2007 01:53:49 +0000 (+0000) Subject: r16115@catbus: nickm | 2007-10-24 21:52:33 -0400 X-Git-Tag: tor-0.2.0.9-alpha~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93331ebf692eb77bf141d8e288eb701cdd5f332c;p=thirdparty%2Ftor.git r16115@catbus: nickm | 2007-10-24 21:52:33 -0400 Tolerate a slightly dead consensus when deciding whether to download descriptors and build circuits. svn:r12167 --- diff --git a/ChangeLog b/ChangeLog index 3e461cb88f..9e5ba0ef87 100644 --- a/ChangeLog +++ b/ChangeLog @@ -42,6 +42,9 @@ Changes in version 0.2.0.9-alpha - 2007-10-24 consensus that we already have (or one that isn't valid) as a failure, and count failing to get the certificates after 20 minutes as a failure. + - Build circuits and download descriptors even if our consensus is a + little expired. (This feature will go away once authorities are more + reliable.) o Minor features (router descriptor cache): - If we find a cached-routers file that's been sitting around for more diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index b82b0be173..332e7b0ad2 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -1122,6 +1122,19 @@ networkstatus_get_live_consensus(time_t now) return NULL; } +/* XXXX020 remove this in favor of get_live_consensus. */ +networkstatus_vote_t * +networkstatus_get_reasonably_live_consensus(time_t now) +{ +#define REASONABLY_LIVE_TIME (24*60*60) + if (current_consensus && + current_consensus->valid_after <= now+REASONABLY_LIVE_TIME && + now <= current_consensus->valid_until) + return current_consensus; + else + return NULL; +} + /** Copy all the ancillary information (like router download status and so on) * from old_c to new_c. */ static void diff --git a/src/or/or.h b/src/or/or.h index 57f657dcf9..344745d8e7 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3112,6 +3112,7 @@ void update_certificate_downloads(time_t now); networkstatus_v2_t *networkstatus_v2_get_by_digest(const char *digest); networkstatus_vote_t *networkstatus_get_latest_consensus(void); networkstatus_vote_t *networkstatus_get_live_consensus(time_t now); +networkstatus_vote_t *networkstatus_get_reasonably_live_consensus(time_t now); int networkstatus_set_current_consensus(const char *consensus, int from_cache, int was_waiting_for_certs); void networkstatus_note_certs_arrived(void); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 95e45fa425..9da42a3a2a 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -3685,7 +3685,8 @@ update_consensus_router_descriptor_downloads(time_t now) smartlist_t *downloadable = smartlist_create(); int authdir = authdir_mode(options); int dirserver = dirserver_mode(options); - networkstatus_vote_t *consensus = networkstatus_get_live_consensus(now); + networkstatus_vote_t *consensus = + networkstatus_get_reasonably_live_consensus(now); int n_delayed=0, n_have=0, n_would_reject=0, n_wouldnt_use=0, n_inprogress=0; @@ -3864,7 +3865,7 @@ update_router_have_minimum_dir_info(void) int res; or_options_t *options = get_options(); const networkstatus_vote_t *consensus = - networkstatus_get_live_consensus(now); + networkstatus_get_reasonably_live_consensus(now); if (!consensus) { res = 0;