|
@@ -971,8 +971,18 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
|
|
}
|
|
}
|
|
|
|
|
|
if (!answer && running_long_enough_to_decide_unreachable()) {
|
|
if (!answer && running_long_enough_to_decide_unreachable()) {
|
|
- /* not considered reachable. tell rephist. */
|
|
|
|
- rep_hist_note_router_unreachable(router->cache_info.identity_digest, now);
|
|
|
|
|
|
+ /* Not considered reachable. tell rephist about that.
|
|
|
|
+
|
|
|
|
+ Because we launch a reachability test for each router every
|
|
|
|
+ REACHABILITY_TEST_CYCLE_PERIOD seconds, then the router has probably
|
|
|
|
+ been down since at least that time after we last successfully reached
|
|
|
|
+ it.
|
|
|
|
+ */
|
|
|
|
+ time_t when = now;
|
|
|
|
+ if (router->last_reachable &&
|
|
|
|
+ router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD < now)
|
|
|
|
+ when = router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD;
|
|
|
|
+ rep_hist_note_router_unreachable(router->cache_info.identity_digest, when);
|
|
}
|
|
}
|
|
|
|
|
|
router->is_running = answer;
|
|
router->is_running = answer;
|
|
@@ -3204,8 +3214,8 @@ dirserv_single_reachability_test(time_t now, routerinfo_t *router)
|
|
* try a few connections per call.
|
|
* try a few connections per call.
|
|
*
|
|
*
|
|
* The load balancing is such that if we get called once every ten
|
|
* The load balancing is such that if we get called once every ten
|
|
- * seconds, we will cycle through all the tests in 1280 seconds (a
|
|
|
|
- * bit over 20 minutes).
|
|
|
|
|
|
+ * seconds, we will cycle through all the tests in
|
|
|
|
+ * REACHABILITY_TEST_CYCLE_PERIOD seconds (a bit over 20 minutes).
|
|
*/
|
|
*/
|
|
void
|
|
void
|
|
dirserv_test_reachability(time_t now)
|
|
dirserv_test_reachability(time_t now)
|
|
@@ -3231,11 +3241,11 @@ dirserv_test_reachability(time_t now)
|
|
continue; /* bridge authorities only test reachability on bridges */
|
|
continue; /* bridge authorities only test reachability on bridges */
|
|
// if (router->cache_info.published_on > cutoff)
|
|
// if (router->cache_info.published_on > cutoff)
|
|
// continue;
|
|
// continue;
|
|
- if ((((uint8_t)id_digest[0]) % 128) == ctr) {
|
|
|
|
|
|
+ if ((((uint8_t)id_digest[0]) % REACHABILITY_MODULO_PER_TEST) == ctr) {
|
|
dirserv_single_reachability_test(now, router);
|
|
dirserv_single_reachability_test(now, router);
|
|
}
|
|
}
|
|
} SMARTLIST_FOREACH_END(router);
|
|
} SMARTLIST_FOREACH_END(router);
|
|
- ctr = (ctr + 1) % 128; /* increment ctr */
|
|
|
|
|
|
+ ctr = (ctr + 1) % REACHABILITY_MODULO_PER_TEST; /* increment ctr */
|
|
}
|
|
}
|
|
|
|
|
|
/** Given a fingerprint <b>fp</b> which is either set if we're looking for a
|
|
/** Given a fingerprint <b>fp</b> which is either set if we're looking for a
|