[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [tor/master 5/9] Allow some skew in checking when a router said it was hibernating
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Wed, 18 Aug 2010 11:38:41 -0400
Subject: Allow some skew in checking when a router said it was hibernating
Commit: 23fdf0b30fd9fdfe1f82e5aa1b8a196c3ca68575
This solves the problem Roger noted as:
What if the router has a clock that's 5 minutes off, so it
publishes a descriptor for 5 minutes in the future, and we test it
three minutes in. In this edge case, we will continue to advertise
it as Running for the full 45 minute period.
---
src/or/dirserv.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index dd90267..80831b5 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -923,6 +923,11 @@ running_long_enough_to_decide_unreachable(void)
* the directory. */
#define REACHABLE_TIMEOUT (45*60)
+/** If we tested a router and found it reachable _at least this long_ after it
+ * declared itself hibernating, it is probably done hibernating and we just
+ * missed a descriptor from it. */
+#define ALLOW_REACHABILITY_PUBLICATION_SKEW (60*60)
+
/** Treat a router as alive if
* - It's me, and I'm not hibernating.
* or - We've found it reachable recently. */
@@ -939,7 +944,8 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
/* We always know if we are down ourselves. */
answer = ! we_are_hibernating();
} else if (router->is_hibernating &&
- router->cache_info.published_on > router->last_reachable) {
+ (router->cache_info.published_on +
+ ALLOW_REACHABILITY_PUBLICATION_SKEW) > router->last_reachable) {
/* A hibernating router is down unless we (somehow) had contact with it
* since it declared itself to be hibernating. */
answer = 0;
--
1.7.1