Commit 9dfb8845 authored by Karsten Loesing's avatar Karsten Loesing
Browse files

Turn on directory request statistics by default.

Change the default values for collecting directory request statistics and
inlcuding them in extra-info descriptors to 1.

Don't break if we are configured to collect directory request or entry
statistics and don't have a GeoIP database. Instead, print out a notice
and skip initializing the affected statistics code.

This is the cherry-picked 49966152.
parent 103c861d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
  o Minor features:
    - Turn on directory request statistics by default and include them in
      extra-info descriptors. Don't break if we have no GeoIP database.
+32 −31
Original line number Diff line number Diff line
@@ -229,7 +229,7 @@ static config_var_t _option_vars[] = {
  OBSOLETE("DirRecordUsageGranularity"),
  OBSOLETE("DirRecordUsageRetainIPs"),
  OBSOLETE("DirRecordUsageSaveInterval"),
  V(DirReqStatistics,            BOOL,     "0"),
  V(DirReqStatistics,            BOOL,     "1"),
  VAR("DirServer",               LINELIST, DirServers, NULL),
  V(DisableAllSwap,              BOOL,     "0"),
  V(DNSPort,                     PORT,     "0"),
@@ -246,7 +246,7 @@ static config_var_t _option_vars[] = {
  V(ExitPolicy,                  LINELIST, NULL),
  V(ExitPolicyRejectPrivate,     BOOL,     "1"),
  V(ExitPortStatistics,          BOOL,     "0"),
  V(ExtraInfoStatistics,         BOOL,     "0"),
  V(ExtraInfoStatistics,         BOOL,     "1"),

#if defined (WINCE)
  V(FallbackNetworkstatusFile,   FILENAME, "fallback-consensus"),
@@ -1408,44 +1408,45 @@ options_act(or_options_t *old_options)
    tor_free(actual_fname);
  }

  if (options->DirReqStatistics && !geoip_is_loaded()) {
    /* Check if GeoIP database could be loaded. */
    log_warn(LD_CONFIG, "Configured to measure directory request "
             "statistics, but no GeoIP database found!");
    return -1;
  }

  if (options->EntryStatistics) {
    if (should_record_bridge_info(options)) {
      /* Don't allow measuring statistics on entry guards when configured
       * as bridge. */
      log_warn(LD_CONFIG, "Bridges cannot be configured to measure "
               "additional GeoIP statistics as entry guards.");
      return -1;
    } else if (!geoip_is_loaded()) {
      /* Check if GeoIP database could be loaded. */
      log_warn(LD_CONFIG, "Configured to measure entry node statistics, "
               "but no GeoIP database found!");
      return -1;
    }
  }

  if (options->CellStatistics || options->DirReqStatistics ||
      options->EntryStatistics || options->ExitPortStatistics) {
    time_t now = time(NULL);
    int print_notice = 0;
    if ((!old_options || !old_options->CellStatistics) &&
        options->CellStatistics)
        options->CellStatistics) {
      rep_hist_buffer_stats_init(now);
      print_notice = 1;
    }
    if ((!old_options || !old_options->DirReqStatistics) &&
        options->DirReqStatistics)
        options->DirReqStatistics) {
      if (geoip_is_loaded()) {
        geoip_dirreq_stats_init(now);
        print_notice = 1;
      } else {
        log_notice(LD_CONFIG, "Configured to measure directory request "
                              "statistics, but no GeoIP database found! "
                              "Please specify a GeoIP database using the "
                              "GeoIPFile option!");
      }
    }
    if ((!old_options || !old_options->EntryStatistics) &&
        options->EntryStatistics)
        options->EntryStatistics && !should_record_bridge_info(options)) {
      if (geoip_is_loaded()) {
        geoip_entry_stats_init(now);
        print_notice = 1;
      } else {
        log_notice(LD_CONFIG, "Configured to measure entry node "
                              "statistics, but no GeoIP database found! "
                              "Please specify a GeoIP database using the "
                              "GeoIPFile option!");
      }
    }
    if ((!old_options || !old_options->ExitPortStatistics) &&
        options->ExitPortStatistics)
        options->ExitPortStatistics) {
      rep_hist_exit_stats_init(now);
    if (!old_options)
      print_notice = 1;
    }
    if (print_notice)
      log_notice(LD_CONFIG, "Configured to measure statistics. Look for "
                 "the *-stats files that will first be written to the "
                 "data directory in 24 hours from now.");