Browse Source

Authorities no longer send back "400 you're unreachable please fix
it" errors to Tor servers that aren't online all the time. We're
supposed to tolerate these servers now.


svn:r12136

Roger Dingledine 18 years ago
parent
commit
7a35dad007
4 changed files with 6 additions and 50 deletions
  1. 3 0
      ChangeLog
  2. 0 17
      src/or/dirserv.c
  3. 0 5
      src/or/or.h
  4. 3 28
      src/or/routerlist.c

+ 3 - 0
ChangeLog

@@ -79,6 +79,9 @@ Changes in version 0.2.0.9-alpha - 2007-10-??
       on our configured V3AuthVotingInterval: so unless the intervals
       matched up, we immediately rejected our own vote because it didn't
       start at the voting interval that caused us to construct a vote.
+    - Authorities no longer send back "400 you're unreachable please fix
+      it" errors to Tor servers that aren't online all the time. We're
+      supposed to tolerate these servers now.
 
   o Minor bugfixes (v3 directory protocol):
     - Delete unverified-consensus when the real consensus is set.

+ 0 - 17
src/or/dirserv.c

@@ -883,22 +883,6 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
   router->is_running = answer;
 }
 
-/** Return 1 if we're confident that there's a problem with
- * <b>router</b>'s reachability and its operator should be notified.
- */
-int
-dirserv_thinks_router_is_blatantly_unreachable(routerinfo_t *router,
-                                               time_t now)
-{
-  if (router->is_hibernating)
-    return 0;
-  if (now >= router->last_reachable + 5*REACHABLE_TIMEOUT &&
-      router->testing_since &&
-      now >= router->testing_since + 5*REACHABLE_TIMEOUT)
-    return 1;
-  return 0;
-}
-
 /** Based on the routerinfo_ts in <b>routers</b>, allocate the
  * contents of a v1-style router-status line, and store it in
  * *<b>router_status_out</b>.  Return 0 on success, -1 on failure.
@@ -2452,7 +2436,6 @@ dirserv_orconn_tls_done(const char *address,
                ri->nickname);
       rep_hist_note_router_reachable(digest_rcvd, now);
       ri->last_reachable = now;
-      ri->num_unreachable_notifications = 0;
     }
   });
   /* FFFF Maybe we should reinstate the code that dumps routers with the same

+ 0 - 5
src/or/or.h

@@ -1181,9 +1181,6 @@ typedef struct {
   time_t last_reachable;
   /** When did we start testing reachability for this OR? */
   time_t testing_since;
-  /** How many times has a descriptor been posted and we believed
-   * this router to be unreachable? We only actually warn on the third. */
-  int num_unreachable_notifications;
 
   /** What position is this descriptor within routerlist->routers? -1 for
    * none. */
@@ -2853,8 +2850,6 @@ int dirserv_add_descriptor(routerinfo_t *ri, const char **msg);
 int getinfo_helper_dirserv_unregistered(control_connection_t *conn,
                                         const char *question, char **answer);
 void dirserv_free_descriptors(void);
-int dirserv_thinks_router_is_blatantly_unreachable(routerinfo_t *router,
-                                                   time_t now);
 int list_server_status(smartlist_t *routers, char **router_status_out,
                        int for_controller);
 int dirserv_dump_directory_to_string(char **dir_out,

+ 3 - 28
src/or/routerlist.c

@@ -2536,11 +2536,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
   int authdir = authdir_mode(get_options());
   int authdir_believes_valid = 0;
   routerinfo_t *old_router;
-  /* router_have_minimum_dir_info() has side effects, so do it before we
-   * start the real work */
-  int authdir_may_warn_about_unreachable_server =
-    authdir && !from_cache && !from_fetch &&
-    router_have_minimum_dir_info();
   networkstatus_vote_t *consensus = networkstatus_get_latest_consensus();
   const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
   int in_consensus = 0;
@@ -2648,33 +2643,14 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
       return -1;
     } else {
       /* Same key, new. */
-      int unreachable = 0;
       log_debug(LD_DIR, "Replacing entry for router '%s/%s' [%s]",
                 router->nickname, old_router->nickname,
                 hex_str(id_digest,DIGEST_LEN));
       if (router->addr == old_router->addr &&
           router->or_port == old_router->or_port) {
-        /* these carry over when the address and orport are unchanged.*/
+        /* these carry over when the address and orport are unchanged. */
         router->last_reachable = old_router->last_reachable;
         router->testing_since = old_router->testing_since;
-        router->num_unreachable_notifications =
-          old_router->num_unreachable_notifications;
-      }
-      if (authdir_may_warn_about_unreachable_server &&
-          dirserv_thinks_router_is_blatantly_unreachable(router, time(NULL))) {
-        if (router->num_unreachable_notifications >= 3) {
-          unreachable = 1;
-          log_notice(LD_DIR, "Notifying server '%s' that it's unreachable. "
-                     "(ContactInfo '%s', platform '%s').",
-                     router->nickname,
-                     router->contact_info ? router->contact_info : "",
-                     router->platform ? router->platform : "");
-        } else {
-          log_info(LD_DIR,"'%s' may be unreachable -- the %d previous "
-                   "descriptors were thought to be unreachable.",
-                   router->nickname, router->num_unreachable_notifications);
-          router->num_unreachable_notifications++;
-        }
       }
       routerlist_replace(routerlist, old_router, router);
       if (!from_cache) {
@@ -2682,11 +2658,10 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
                                       &routerlist->desc_store);
       }
       directory_set_dirty();
-      *msg = unreachable ? "Dirserver believes your ORPort is unreachable" :
-        authdir_believes_valid ? "Valid server updated" :
+      *msg = authdir_believes_valid ? "Valid server updated" :
         ("Invalid server updated. (This dirserver is marking your "
          "server as unapproved.)");
-      return unreachable ? 1 : 0;
+      return 0;
     }
   }