[tor-commits] [tor/master] entrynodes: Error msg for missing guard descs is now more informative.

nickm at torproject.org nickm at torproject.org
Tue Oct 3 13:07:00 UTC 2017


commit 5352785d0caec23f753ae7fcab4449b03f5643b8
Author: George Kadianakis <desnacked at riseup.net>
Date:   Tue Oct 3 14:38:53 2017 +0300

    entrynodes: Error msg for missing guard descs is now more informative.
---
 src/or/entrynodes.c        | 21 ++++++++++++++-------
 src/or/entrynodes.h        |  7 +++++--
 src/or/nodelist.c          |  7 ++++---
 src/test/test_entrynodes.c | 11 ++++++-----
 4 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
index 1e96fc7f5..c71a93bea 100644
--- a/src/or/entrynodes.c
+++ b/src/or/entrynodes.c
@@ -3442,9 +3442,13 @@ guards_retry_optimistic(const or_options_t *options)
 /**
  * Check if we are missing any crucial dirinfo for the guard subsystem to
  * work. Return NULL if everything went well, otherwise return a newly
- * allocated string with an informative error message. */
+ * allocated string with an informative error message. In the latter case, use
+ * the genreal descriptor information <b>using_mds</b>, <b>num_present</b> and
+ * <b>num_usable</b> to improve the error message. */
 char *
-guard_selection_get_dir_info_status_str(guard_selection_t *gs)
+guard_selection_get_dir_info_status_str(guard_selection_t *gs,
+                                        int using_mds,
+                                        int num_present, int num_usable)
 {
   if (!gs->primary_guards_up_to_date)
     entry_guards_update_primary(gs);
@@ -3478,8 +3482,9 @@ guard_selection_get_dir_info_status_str(guard_selection_t *gs)
 
   /* otherwise return a helpful error string */
   tor_asprintf(&ret_str, "We're missing descriptors for %d/%d of our "
-               "primary entry guards",
-               n_missing_descriptors, num_primary_to_check);
+               "primary entry guards (total %sdescriptors: %d/%d).",
+               n_missing_descriptors, num_primary_to_check,
+               using_mds?"micro":"", num_present, num_usable);
 
   return ret_str;
 }
@@ -3487,10 +3492,12 @@ guard_selection_get_dir_info_status_str(guard_selection_t *gs)
 /** As guard_selection_have_enough_dir_info_to_build_circuits, but uses
  * the default guard selection. */
 char *
-entry_guards_get_dir_info_status_str(void)
+entry_guards_get_dir_info_status_str(int using_mds,
+                                     int num_present, int num_usable)
 {
-  return guard_selection_get_dir_info_status_str(
-                                        get_guard_selection_info());
+  return guard_selection_get_dir_info_status_str(get_guard_selection_info(),
+                                                 using_mds,
+                                                 num_present, num_usable);
 }
 
 /** Free one guard selection context */
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
index d049a88cd..ca9fb489e 100644
--- a/src/or/entrynodes.h
+++ b/src/or/entrynodes.h
@@ -572,8 +572,11 @@ int getinfo_helper_entry_guards(control_connection_t *conn,
 int entries_known_but_down(const or_options_t *options);
 void entries_retry_all(const or_options_t *options);
 
-char *entry_guards_get_dir_info_status_str(void);
-char *guard_selection_get_dir_info_status_str(guard_selection_t *gs);
+char *entry_guards_get_dir_info_status_str(int using_mds,
+                                           int num_present, int num_usable);
+char *guard_selection_get_dir_info_status_str(guard_selection_t *gs,
+                                              int using_mds,
+                                              int num_present, int num_usable);
 
 void entry_guards_free_all(void);
 
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index ff26065ff..6ca9bd6d4 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -2282,6 +2282,7 @@ update_router_have_minimum_dir_info(void)
 {
   time_t now = time(NULL);
   int res;
+  int num_present=0, num_usable=0;
   const or_options_t *options = get_options();
   const networkstatus_t *consensus =
     networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
@@ -2303,7 +2304,6 @@ update_router_have_minimum_dir_info(void)
   /* Check fraction of available paths */
   {
     char *status = NULL;
-    int num_present=0, num_usable=0;
     double paths = compute_frac_paths_available(consensus, options, now,
                                                 &num_present, &num_usable,
                                                 &status);
@@ -2325,7 +2325,9 @@ update_router_have_minimum_dir_info(void)
   }
 
   { /* Check entry guard dirinfo status */
-    char *guard_error = entry_guards_get_dir_info_status_str();
+    char *guard_error = entry_guards_get_dir_info_status_str(using_md,
+                                                             num_present,
+                                                             num_usable);
     if (guard_error) {
       strlcpy(dir_info_status, guard_error, sizeof(dir_info_status));
       tor_free(guard_error);
@@ -2334,7 +2336,6 @@ update_router_have_minimum_dir_info(void)
     }
   }
 
-
  done:
 
   /* If paths have just become available in this update. */
diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c
index 36e457bdf..472383f38 100644
--- a/src/test/test_entrynodes.c
+++ b/src/test/test_entrynodes.c
@@ -1641,9 +1641,9 @@ test_entry_guard_manage_primary(void *arg)
 
   /* Do some dirinfo checks */
   {
-    /* Check that we have all required dirinfo for the primaries (that's done in
-     * big_fake_network_setup()) */
-    char *dir_info_str = guard_selection_get_dir_info_status_str(gs);
+    /* Check that we have all required dirinfo for the primaries (that's done
+     * in big_fake_network_setup()) */
+    char *dir_info_str = guard_selection_get_dir_info_status_str(gs, 0, 0, 0);
     tt_assert(!dir_info_str);
 
     /* Now artificially remove the first primary's descriptor and re-check */
@@ -1652,9 +1652,10 @@ test_entry_guard_manage_primary(void *arg)
     /* Change the first primary's identity digest so that the mocked functions
      * can't find its descriptor */
     memset(first_primary->identity, 9, sizeof(first_primary->identity));
-    dir_info_str = guard_selection_get_dir_info_status_str(gs);
+    dir_info_str = guard_selection_get_dir_info_status_str(gs, 1, 2, 3);
     tt_str_op(dir_info_str, OP_EQ,
-              "We're missing descriptors for 1/2 of our primary entry guards");
+              "We're missing descriptors for 1/2 of our primary entry guards "
+              "(total microdescriptors: 2/3).");
     tor_free(dir_info_str);
   }
 





More information about the tor-commits mailing list