Browse Source

Stop allowing hibernating servers to be "stable" or "fast".

This is what I meant to do in r9690 but didn't actually do.


svn:r9808
Roger Dingledine 18 years ago
parent
commit
bf3b3a44f3
3 changed files with 18 additions and 11 deletions
  1. 3 0
      ChangeLog
  2. 13 11
      doc/spec/dir-spec.txt
  3. 2 0
      src/or/dirserv.c

+ 3 - 0
ChangeLog

@@ -32,6 +32,9 @@ Changes in version 0.2.0.1-alpha - 2007-??-??
       try to use \ consistently on windows and / consistently on unix: it
       try to use \ consistently on windows and / consistently on unix: it
       makes the log messages nicer.
       makes the log messages nicer.
 
 
+  o Minor bugfixes:
+    - Stop allowing hibernating servers to be "stable" or "fast".
+
 
 
 Changes in version 0.1.2.10-rc - 2007-03-07
 Changes in version 0.1.2.10-rc - 2007-03-07
   o Major bugfixes (Windows):
   o Major bugfixes (Windows):

+ 13 - 11
doc/spec/dir-spec.txt

@@ -425,6 +425,9 @@ $Id$
    authorities MAY do things differently, so long as clients keep working
    authorities MAY do things differently, so long as clients keep working
    well.  Clients MUST NOT depend on the exact behaviors in this section.)
    well.  Clients MUST NOT depend on the exact behaviors in this section.)
 
 
+   In the below definitions, a router is considered "active" if it is
+   running, valid, and not hibernating.
+
    "Valid" -- a router is 'Valid' if it is running a version of Tor not
    "Valid" -- a router is 'Valid' if it is running a version of Tor not
    known to be broken, and the directory authority has not blacklisted
    known to be broken, and the directory authority has not blacklisted
    it as suspicious.
    it as suspicious.
@@ -441,20 +444,19 @@ $Id$
    "Running" -- A router is 'Running' if the authority managed to connect to
    "Running" -- A router is 'Running' if the authority managed to connect to
    it successfully within the last 30 minutes.
    it successfully within the last 30 minutes.
 
 
-   "Stable" -- A router is 'Stable' if it is running, valid, not
+   "Stable" -- A router is 'Stable' if it is active, and either its
-   hibernating, and either its uptime is at least the median uptime for
+   uptime is at least the median uptime for known active routers, or
-   known running, valid, non-hibernating routers, or its uptime is at
+   its uptime is at least 30 days. Routers are never called stable if
-   least 30 days. Routers are never called stable if they are running
+   they are running a version of Tor known to drop circuits stupidly.
-   a version of Tor known to drop circuits stupidly.  (0.1.1.10-alpha
+   (0.1.1.10-alpha through 0.1.1.16-rc are stupid this way.)
-   through 0.1.1.16-rc are stupid this way.)
 
 
-   "Fast" -- A router is 'Fast' if its bandwidth is in the top 7/8ths for
+   "Fast" -- A router is 'Fast' if it is active, and its bandwidth is
-   known running, valid routers.
+   in the top 7/8ths for known active routers.
 
 
    "Guard" -- A router is a possible 'Guard' if it is 'Stable' and its
    "Guard" -- A router is a possible 'Guard' if it is 'Stable' and its
-   bandwidth is above median for known running, valid routers.  If the total
+   bandwidth is above median for known active routers. If the total
-   bandwidth of Running Valid non-BadExit Exit servers is less than one third
+   bandwidth of active non-BadExit Exit servers is less than one third
-   of the total bandwidth of all Running Valid servers, no Exit is listed as
+   of the total bandwidth of all active servers, no Exit is listed as
    a Guard.
    a Guard.
 
 
    "Authority" -- A router is called an 'Authority' if the authority
    "Authority" -- A router is called an 'Authority' if the authority

+ 2 - 0
src/or/dirserv.c

@@ -1629,9 +1629,11 @@ generate_v2_networkstatus(void)
         tor_version_as_new_as(ri->platform,"0.1.1.10-alpha") &&
         tor_version_as_new_as(ri->platform,"0.1.1.10-alpha") &&
         !tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs");
         !tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs");
       int f_stable = ri->is_stable =
       int f_stable = ri->is_stable =
+        router_is_active(ri, now) &&
         !dirserv_thinks_router_is_unreliable(now, ri, 1, 0) &&
         !dirserv_thinks_router_is_unreliable(now, ri, 1, 0) &&
         !unstable_version;
         !unstable_version;
       int f_fast = ri->is_fast =
       int f_fast = ri->is_fast =
+        router_is_active(ri, now) &&
         !dirserv_thinks_router_is_unreliable(now, ri, 0, 1);
         !dirserv_thinks_router_is_unreliable(now, ri, 0, 1);
       int f_running = ri->is_running; /* computed above */
       int f_running = ri->is_running; /* computed above */
       int f_authority = router_digest_is_trusted_dir(
       int f_authority = router_digest_is_trusted_dir(