浏览代码

stop authority reachability check on startup

Roger Dingledine 15 年之前
父节点
当前提交
6952b445cc
共有 4 个文件被更改,包括 12 次插入13 次删除
  1. 6 0
      changes/no_reachability_test_on_startup
  2. 4 6
      src/or/dirserv.c
  3. 1 6
      src/or/main.c
  4. 1 1
      src/or/or.h

+ 6 - 0
changes/no_reachability_test_on_startup

@@ -0,0 +1,6 @@
+  o Minor features:
+    - Directory authorities no longer launch a TLS connection to every
+      relay as they startup. Now that we have 2k+ descriptors cached,
+      the resulting network hiccup is becoming a burden. Besides,
+      authorities already avoid voting about Running for the first half
+      hour of their uptime.

+ 4 - 6
src/or/dirserv.c

@@ -3108,8 +3108,7 @@ dirserv_single_reachability_test(time_t now, routerinfo_t *router)
                         router->cache_info.identity_digest);
 }
 
-/** Auth dir server only: if <b>try_all</b> is 1, launch connections to
- * all known routers; else we want to load balance such that we only
+/** Auth dir server only: load balance such that we only
  * try a few connections per call.
  *
  * The load balancing is such that if we get called once every ten
@@ -3117,7 +3116,7 @@ dirserv_single_reachability_test(time_t now, routerinfo_t *router)
  * bit over 20 minutes).
  */
 void
-dirserv_test_reachability(time_t now, int try_all)
+dirserv_test_reachability(time_t now)
 {
   /* XXX decide what to do here; see or-talk thread "purging old router
    * information, revocation." -NM
@@ -3140,12 +3139,11 @@ dirserv_test_reachability(time_t now, int try_all)
       continue; /* bridge authorities only test reachability on bridges */
 //    if (router->cache_info.published_on > cutoff)
 //      continue;
-    if (try_all || (((uint8_t)id_digest[0]) % 128) == ctr) {
+    if ((((uint8_t)id_digest[0]) % 128) == ctr) {
       dirserv_single_reachability_test(now, router);
     }
   } SMARTLIST_FOREACH_END(router);
-  if (!try_all) /* increment ctr */
-    ctr = (ctr + 1) % 128;
+  ctr = (ctr + 1) % 128; /* increment ctr */
 }
 
 /** Given a fingerprint <b>fp</b> which is either set if we're looking for a

+ 1 - 6
src/or/main.c

@@ -918,7 +918,7 @@ run_scheduled_events(time_t now)
   if (now % 10 == 0 && (authdir_mode_tests_reachability(options)) &&
       !we_are_hibernating()) {
     /* try to determine reachability of the other Tor relays */
-    dirserv_test_reachability(now, 0);
+    dirserv_test_reachability(now);
   }
 
   /** 1d. Periodically, we discount older stability information so that new
@@ -1479,11 +1479,6 @@ do_main_loop(void)
   now = time(NULL);
   directory_info_has_arrived(now, 1);
 
-  if (authdir_mode_tests_reachability(get_options())) {
-    /* the directory is already here, run startup things */
-    dirserv_test_reachability(now, 1);
-  }
-
   if (server_mode(get_options())) {
     /* launch cpuworkers. Need to do this *after* we've read the onion key. */
     cpu_init();

+ 1 - 1
src/or/or.h

@@ -3914,7 +3914,7 @@ void dirserv_orconn_tls_done(const char *address,
                              const char *digest_rcvd,
                              int as_advertised);
 void dirserv_single_reachability_test(time_t now, routerinfo_t *router);
-void dirserv_test_reachability(time_t now, int try_all);
+void dirserv_test_reachability(time_t now);
 int authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
                                    int complain);
 int dirserv_would_reject_router(routerstatus_t *rs);