backport r17917, r17993: tors that haven't run lately take 10+ minutes
to start, and when they do they still use incredibly obsolete descriptors. svn:r18187
This commit is contained in:
parent
08f1406cfb
commit
5954698422
|
@ -22,6 +22,13 @@ Changes in version 0.2.0.33 - 2009-01-??
|
|||
to anybody who asks, now that extrainfo docs include potentially
|
||||
sensitive aggregated client geoip summaries. Bugfix on
|
||||
0.2.0.13-alpha.
|
||||
- If the cached networkstatus consensus is more than five days old,
|
||||
discard it rather than trying to use it. In theory it could be
|
||||
useful because it lists alternate directory mirrors, but in practice
|
||||
it just means we spend many minutes trying directory mirrors that
|
||||
are long gone from the network. Also discard router descriptors as
|
||||
we load them if they are more than five days old, since the onion
|
||||
key is probably wrong by now. Bugfix on 0.2.0.x. Fixes bug 887.
|
||||
|
||||
o Minor bugfixes:
|
||||
- Do not mark smartlist_bsearch_idx() function as ATTR_PURE. This bug
|
||||
|
|
|
@ -17,7 +17,7 @@ Backport for 0.2.0 once better tested:
|
|||
- r17886: Don't remove routerinfos as unlisted unless we have a
|
||||
consensus.
|
||||
- r17887: Don't accept 1.2.3 as a valid IP address.
|
||||
- r17917, r17993: tors that haven't run lately take 10+ minutes to start
|
||||
o r17917, r17993: tors that haven't run lately take 10+ minutes to start
|
||||
- r17924: Close streams when an exit hands us a local IP.
|
||||
|
||||
Backport for 0.2.0, maybe:
|
||||
|
|
|
@ -211,7 +211,8 @@ router_reload_consensus_networkstatus(void)
|
|||
s = read_file_to_str(options->FallbackNetworkstatusFile,
|
||||
RFTS_IGNORE_MISSING, NULL);
|
||||
if (s) {
|
||||
if (networkstatus_set_current_consensus(s, flags)) {
|
||||
if (networkstatus_set_current_consensus(s,
|
||||
flags|NSSET_ACCEPT_OBSOLETE)) {
|
||||
log_info(LD_FS, "Couldn't load consensus networkstatus from \"%s\"",
|
||||
options->FallbackNetworkstatusFile);
|
||||
} else {
|
||||
|
@ -1372,6 +1373,7 @@ networkstatus_set_current_consensus(const char *consensus, unsigned flags)
|
|||
const unsigned from_cache = flags & NSSET_FROM_CACHE;
|
||||
const unsigned was_waiting_for_certs = flags & NSSET_WAS_WAITING_FOR_CERTS;
|
||||
const unsigned dl_certs = !(flags & NSSET_DONT_DOWNLOAD_CERTS);
|
||||
const unsigned accept_obsolete = flags & NSSET_ACCEPT_OBSOLETE;
|
||||
|
||||
/* Make sure it's parseable. */
|
||||
c = networkstatus_parse_vote_from_string(consensus, NULL, 0);
|
||||
|
@ -1381,6 +1383,15 @@ networkstatus_set_current_consensus(const char *consensus, unsigned flags)
|
|||
goto done;
|
||||
}
|
||||
|
||||
if (from_cache && !accept_obsolete &&
|
||||
c->valid_until < now-OLD_ROUTER_DESC_MAX_AGE) {
|
||||
/* XXX022 when we try to make fallbackconsensus work again, we should
|
||||
* consider taking this out. Until then, believing obsolete consensuses
|
||||
* is causing more harm than good. See also bug 887. */
|
||||
log_info(LD_DIR, "Loaded an obsolete consensus. Discarding.");
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (current_consensus &&
|
||||
!memcmp(c->networkstatus_digest, current_consensus->networkstatus_digest,
|
||||
DIGEST_LEN)) {
|
||||
|
|
|
@ -3415,6 +3415,7 @@ networkstatus_t *networkstatus_get_reasonably_live_consensus(time_t now);
|
|||
#define NSSET_FROM_CACHE 1
|
||||
#define NSSET_WAS_WAITING_FOR_CERTS 2
|
||||
#define NSSET_DONT_DOWNLOAD_CERTS 4
|
||||
#define NSSET_ACCEPT_OBSOLETE 8
|
||||
int networkstatus_set_current_consensus(const char *consensus, unsigned flags);
|
||||
void networkstatus_note_certs_arrived(void);
|
||||
void routers_update_all_from_networkstatus(time_t now, int dir_version);
|
||||
|
|
|
@ -2864,6 +2864,12 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
|
|||
}
|
||||
}
|
||||
|
||||
if (!in_consensus && from_cache &&
|
||||
router->cache_info.published_on < time(NULL) - OLD_ROUTER_DESC_MAX_AGE) {
|
||||
*msg = "Router descriptor was really old.";
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* We haven't seen a router with this identity before. Add it to the end of
|
||||
* the list. */
|
||||
routerlist_insert(routerlist, router);
|
||||
|
|
Loading…
Reference in New Issue