r15907@catbus: nickm | 2007-10-18 10:18:53 -0400

Fix up logic for choosing the time at which to download a consensus: Never attempt it when the current consensus is still the most recent.


svn:r12020
This commit is contained in:
Nick Mathewson 2007-10-18 14:19:56 +00:00
parent c96167a6bd
commit 8f21a0a0b7
2 changed files with 15 additions and 10 deletions

View File

@ -40,6 +40,8 @@ Changes in version 0.2.0.9-alpha - 2007-10-??
- Delete unverified-consensus when the real consensus is set.
- Consider retrying a consensus networkstatus fetch immediately after one
fails: don't wait 60 seconds to notice.
- When fetching a consensus as a cache, wait until a newer consensus
exists before trying to replace the current one.
o Minor bugfixes (controller):
- Don't reset trusted dir server list when we set a configuration option.

View File

@ -761,21 +761,24 @@ update_consensus_networkstatus_fetch_time(time_t now)
/* XXXX020 call this when DirPort switches on or off. NMNM */
networkstatus_vote_t *c = networkstatus_get_live_consensus(now);
if (c) {
long dl_interval;
long interval = c->fresh_until - c->valid_after;
time_t start;
long interval;
if (dirserver_mode(options)) {
start = c->valid_after + 120; /*XXXX020 make this a macro. */
/* XXXX020 too much magic. */
interval = (c->fresh_until - c->valid_after) / 2;
start = c->fresh_until + 120; /*XXXX020 make this a macro. */
dl_interval = interval/2;
} else {
start = c->fresh_until;
start = c->fresh_until + (interval*3)/4;
/* XXXX020 too much magic. */
interval = (c->valid_until - c->fresh_until) * 7 / 8;
dl_interval = (c->valid_until - start) * 7 / 8;
}
if (interval < 1)
interval = 1;
tor_assert(start+interval < c->valid_until);
time_to_download_next_consensus = start + crypto_rand_int(interval);
if (dl_interval < 1)
dl_interval = 1;
/* We must not try to replace c while it's still the most valid: */
tor_assert(c->fresh_until < start);
/* We must download the next one before c is invalid: */
tor_assert(start+dl_interval < c->valid_until);
time_to_download_next_consensus = start + crypto_rand_int(dl_interval);
{
char tbuf[ISO_TIME_LEN+1];
format_local_iso_time(tbuf, time_to_download_next_consensus);