소스 검색

If we've gone 12 hours since our last bandwidth check, and we
estimate we have less than 50KB bandwidth capacity but we could
handle more, do another bandwidth test.


svn:r13176

Roger Dingledine 18 년 전
부모
커밋
43dce232ad
3개의 변경된 파일22개의 추가작업 그리고 5개의 파일을 삭제
  1. 3 0
      ChangeLog
  2. 1 1
      doc/TODO
  3. 18 4
      src/or/main.c

+ 3 - 0
ChangeLog

@@ -3,6 +3,9 @@ Changes in version 0.2.0.18-alpha - 2008-01-??
     - Avoid going directly to the directory authorities even if you're a
       relay, if you haven't found yourself reachable yet or if you've
       decided not to advertise your dirport yet. Addresses bug 556.
+    - If we've gone 12 hours since our last bandwidth check, and we
+      estimate we have less than 50KB bandwidth capacity but we could
+      handle more, do another bandwidth test.
 
   o Minor features:
     - Don't answer "/tor/networkstatus-bridges" directory requests if

+ 1 - 1
doc/TODO

@@ -93,7 +93,7 @@ N - Before the feature freeze:
           even when the network came back and arma clicked on things.
           also 0.2.0.
 R       - for above two, roger should turn them into flyspray entry.
-R     - we should do another bandwidth test every 12 hours or something
+      o we should do another bandwidth test every 12 hours or something
         if we're showing less than 50KB and our bandwidthrate says we can
         do more than that. I think some servers are forgetting the results
         of their first test, and then never seeing use.

+ 18 - 4
src/or/main.c

@@ -837,6 +837,7 @@ run_scheduled_events(time_t now)
   static time_t time_to_save_stability = 0;
 #define CLEAN_CACHES_INTERVAL (30*60)
   static time_t time_to_clean_caches = 0;
+  static time_t time_to_recheck_bandwidth = 0;
   or_options_t *options = get_options();
   int i;
   int have_dir_info;
@@ -1003,11 +1004,24 @@ run_scheduled_events(time_t now)
      * 20 minutes of our uptime. */
     if (server_mode(options) &&
         (has_completed_circuit || !any_predicted_circuits(now)) &&
-        stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT &&
         !we_are_hibernating()) {
-      consider_testing_reachability(1, dirport_reachability_count==0);
-      if (++dirport_reachability_count > 5)
-        dirport_reachability_count = 0;
+      if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
+        consider_testing_reachability(1, dirport_reachability_count==0);
+        if (++dirport_reachability_count > 5)
+          dirport_reachability_count = 0;
+      } else if (time_to_recheck_bandwidth < now) {
+        /* If we haven't checked for 12 hours and our bandwidth estimate is
+         * low, do another bandwidth test. This is especially important for
+         * bridges, since they might go long periods without much use. */
+        routerinfo_t *me = router_get_my_routerinfo();
+        if (time_to_recheck_bandwidth && me &&
+            me->bandwidthcapacity < me->bandwidthrate &&
+            me->bandwidthcapacity < 51200) {
+          reset_bandwidth_test();
+        }
+#define BANDWIDTH_RECHECK_INTERVAL (12*60*60)
+        time_to_recheck_bandwidth = now + BANDWIDTH_RECHECK_INTERVAL;
+      }
     }
 
     /* If any networkstatus documents are no longer recent, we need to