Commit 9e6147a4 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge remote-tracking branch 'yawning/bug14918'

parents 6cdb213b 8571e86d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -5,3 +5,11 @@
    - Do not warn that we are missing directory information if we have
      decided not to fetch directory information due to a long period
      of idleness. Fixes part of bug 14918; bugfix on 0.2.6.2-alpha.
    - When deciding whether we have any exit nodes, only do processing for
      ExitNodes when the ExitNodes option is actually set. Fixes part of
      bug 14918; bugfix on 0.2.6.2-alpha.

  o Minor bugfixes (logging during bootstrap):
    - Correctly update and log the amount of directory information that
      has been fetched during the bootstrap process. Fixes part of bug
      14918; bugfix on 0.2.6.2-alpha.
+88 −72
Original line number Diff line number Diff line
@@ -1430,9 +1430,7 @@ compute_frac_paths_available(const networkstatus_t *consensus,
  smartlist_t *guards = smartlist_new();
  smartlist_t *mid    = smartlist_new();
  smartlist_t *exits  = smartlist_new();
  smartlist_t *myexits= smartlist_new();
  smartlist_t *myexits_unflagged = smartlist_new();
  double f_guard, f_mid, f_exit, f_myexit, f_myexit_unflagged;
  double f_guard, f_mid, f_exit;
  double f_path = 0.0;
  /* Used to determine whether there are any exits in the consensus */
  int np = 0;
@@ -1494,6 +1492,25 @@ compute_frac_paths_available(const networkstatus_t *consensus,
     * browsing (as distinct from hidden service web browsing). */
  }

  f_guard = frac_nodes_with_descriptors(guards, WEIGHT_FOR_GUARD);
  f_mid   = frac_nodes_with_descriptors(mid,    WEIGHT_FOR_MID);
  f_exit  = frac_nodes_with_descriptors(exits,  WEIGHT_FOR_EXIT);

  log_debug(LD_NET,
            "f_guard: %.2f, f_mid: %.2f, f_exit: %.2f",
             f_guard,
             f_mid,
             f_exit);

  smartlist_free(guards);
  smartlist_free(mid);
  smartlist_free(exits);

  if (options->ExitNodes) {
    double f_myexit, f_myexit_unflagged;
    smartlist_t *myexits= smartlist_new();
    smartlist_t *myexits_unflagged = smartlist_new();

    /* All nodes with exit flag in ExitNodes option */
    count_usable_descriptors(&np, &nu, myexits, consensus, options, now,
                             options->ExitNodes, USABLE_DESCRIPTOR_EXIT_ONLY);
@@ -1530,9 +1547,6 @@ compute_frac_paths_available(const networkstatus_t *consensus,
              np,
              nu);

  f_guard = frac_nodes_with_descriptors(guards, WEIGHT_FOR_GUARD);
  f_mid   = frac_nodes_with_descriptors(mid,    WEIGHT_FOR_MID);
  f_exit  = frac_nodes_with_descriptors(exits,  WEIGHT_FOR_EXIT);
    f_myexit= frac_nodes_with_descriptors(myexits,WEIGHT_FOR_EXIT);
    f_myexit_unflagged=
              frac_nodes_with_descriptors(myexits_unflagged,WEIGHT_FOR_EXIT);
@@ -1551,9 +1565,6 @@ compute_frac_paths_available(const networkstatus_t *consensus,
      f_myexit = f_myexit_unflagged;
    }

  smartlist_free(guards);
  smartlist_free(mid);
  smartlist_free(exits);
    smartlist_free(myexits);
    smartlist_free(myexits_unflagged);

@@ -1563,6 +1574,7 @@ compute_frac_paths_available(const networkstatus_t *consensus,
     * and usable exits. */
    if (f_myexit < f_exit)
      f_exit = f_myexit;
  }

  /* if the consensus has no exits, treat the exit fraction as 100% */
  if (router_have_consensus_path() != CONSENSUS_PATH_EXIT) {
@@ -1673,12 +1685,14 @@ update_router_have_minimum_dir_info(void)
      static ratelim_t last_warned =
        RATELIM_INIT(NOTICE_DIR_INFO_STATUS_INTERVAL);
      char *suppression_msg = NULL;
      if ((suppression_msg = rate_limit_log(&last_warned, time(NULL)))) {

      tor_snprintf(dir_info_status, sizeof(dir_info_status),
                   "We need more %sdescriptors: we have %d/%d, and "
                   "can only build %d%% of likely paths. (We have %s.)",
                   using_md?"micro":"", num_present, num_usable,
                   (int)(paths*100), status);

      if ((suppression_msg = rate_limit_log(&last_warned, time(NULL)))) {
        if (!should_delay_dir_fetches(options, NULL) &&
            !directory_too_idle_to_fetch_descriptors(options, now)) {
          log_warn(LD_NET, "%s%s", dir_info_status, suppression_msg);
@@ -1694,12 +1708,14 @@ update_router_have_minimum_dir_info(void)
      static ratelim_t last_warned =
      RATELIM_INIT(NOTICE_DIR_INFO_STATUS_INTERVAL);
      char *suppression_msg = NULL;
      if ((suppression_msg = rate_limit_log(&last_warned, time(NULL)))) {

      tor_snprintf(dir_info_status, sizeof(dir_info_status),
                   "We have enough %sdescriptors: we have %d/%d, and "
                   "can build %d%% of likely paths. (We have %s.)",
                   using_md?"micro":"", num_present, num_usable,
                   (int)(paths*100), status);

      if ((suppression_msg = rate_limit_log(&last_warned, time(NULL)))) {
        log_info(LD_NET, "%s%s", dir_info_status, suppression_msg);
        tor_free(suppression_msg);
      }