]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r15887@catbus: nickm | 2007-10-17 17:25:32 -0400
authorNick Mathewson <nickm@torproject.org>
Wed, 17 Oct 2007 21:26:22 +0000 (21:26 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 17 Oct 2007 21:26:22 +0000 (21:26 +0000)
 When a networkstatus consensus download fails, do not wait 60 seconds to decide whether to retry. (Also, log the time at which we'll try to replace the current networkstatus.)

svn:r12005

ChangeLog
src/or/main.c
src/or/networkstatus.c

index c752329646ec24b6e421d9568109b6eeaf707c06..2e3f0311a49f703f12b9c464dc9da034adf00332 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -38,6 +38,8 @@ Changes in version 0.2.0.9-alpha - 2007-10-??
 
   o Minor bugfixes (v3 directory protocol)
     - 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.
 
   o Minor bugfixes (controller):
     - Don't reset trusted dir server list when we set a configuration option.
index 5616fd1794c6812fb6c7bc123353403690ad7f8b..cfe474564275deb64ea45d7129bbf717cb9420ab 100644 (file)
@@ -997,9 +997,6 @@ run_scheduled_events(time_t now)
     networkstatus_v2_list_clean(now);
     /* Remove dead routers. */
     routerlist_remove_old_routers();
-#if 0
-    networkstatus_v2_list_update_recent(now);
-#endif
 
     /* Also, once per minute, check whether we want to download any
      * networkstatus documents.
index e7bb6405f53ea419a8e76daa692461501095c69e..8a174482e58ac762143acfee848aadfd993b489f 100644 (file)
@@ -728,6 +728,8 @@ static void
 update_consensus_networkstatus_downloads(time_t now)
 {
   or_options_t *options = get_options();
+  if (!networkstatus_get_live_consensus(now))
+    time_to_download_next_consensus = now;
   if (time_to_download_next_consensus > now)
     return;
   if (authdir_mode_v3(options))
@@ -747,6 +749,8 @@ void
 networkstatus_consensus_download_failed(int status_code)
 {
   download_status_failed(&consensus_dl_status, status_code);
+  /* Retry immediately, if appropriate. */
+  update_consensus_networkstatus_downloads(time(NULL));
 }
 
 /** DOCDOC */
@@ -755,8 +759,8 @@ update_consensus_networkstatus_fetch_time(time_t now)
 {
   or_options_t *options = get_options();
   /* XXXX020 call this when DirPort switches on or off. NMNM */
-  if (current_consensus) {
-    const networkstatus_vote_t *c = current_consensus;
+  networkstatus_vote_t *c = networkstatus_get_live_consensus(now);
+  if (c) {
     time_t start;
     long interval;
     if (dirserver_mode(options)) {
@@ -772,9 +776,16 @@ update_consensus_networkstatus_fetch_time(time_t now)
       interval = 1;
     tor_assert(start+interval < c->valid_until);
     time_to_download_next_consensus = start + crypto_rand_int(interval);
+    {
+      char tbuf[ISO_TIME_LEN+1];
+      format_local_iso_time(tbuf, time_to_download_next_consensus);
+      log_info(LD_DIR, "Have a live consensus; fetching next one at %s.",tbuf);
+    }
   } else {
     time_to_download_next_consensus = now;
+    log_info(LD_DIR, "No live consensus; we should fetch one immediately.");
   }
+
 }
 
 /** Return 1 if there's a reason we shouldn't try any directory