[tor-commits] [tor/master] Turn consdiffmgr.cache_max_age_hours into a parameter

nickm at torproject.org nickm at torproject.org
Mon May 15 21:27:49 UTC 2017


commit c276c10d3b262e119c114c2e1aa3446a8364506f
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu May 4 12:26:55 2017 -0400

    Turn consdiffmgr.cache_max_age_hours into a parameter
---
 src/or/consdiffmgr.c        | 25 +++++++++++++++++++++----
 src/or/consdiffmgr.h        |  1 -
 src/test/test_consdiffmgr.c |  2 +-
 3 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index d478101..6ec031e 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -127,7 +127,6 @@ static HT_HEAD(cdm_diff_ht, cdm_diff_t) cdm_diff_ht = HT_INITIALIZER();
  * Configuration for this module
  */
 static consdiff_cfg_t consdiff_cfg = {
-  /* .cache_max_age_hours = */ 24 * 90,
   // XXXX I'd like to make this number bigger, but it interferes with the
   // XXXX seccomp2 syscall filter, which tops out at BPF_MAXINS (4096)
   // XXXX rules.
@@ -423,6 +422,25 @@ cdm_cache_lookup_consensus(consensus_flavor_t flavor, time_t valid_after)
   return result;
 }
 
+/** Return the maximum age (in seconds) of consensuses that we should consider
+ * storing. The available space in the directory may impose additional limits
+ * on how much we store. */
+static int32_t
+get_max_age_to_cache(void)
+{
+  /* The parameter is in hours. */
+  const int32_t DEFAULT_MAX_AGE_TO_CACHE = 8192;
+  const int32_t MIN_MAX_AGE_TO_CACHE = 0;
+  const int32_t MAX_MAX_AGE_TO_CACHE = 8192;
+  const char MAX_AGE_TO_CACHE_NAME[] = "max-consensus-age-to-cache-for-diff";
+
+  return 3600 * networkstatus_get_param(NULL,
+                                        MAX_AGE_TO_CACHE_NAME,
+                                        DEFAULT_MAX_AGE_TO_CACHE,
+                                        MIN_MAX_AGE_TO_CACHE,
+                                        MAX_MAX_AGE_TO_CACHE);
+}
+
 /**
  * Given a string containing a networkstatus consensus, and the results of
  * having parsed that consensus, add that consensus to the cache if it is not
@@ -443,7 +461,7 @@ consdiffmgr_add_consensus(const char *consensus,
   const consensus_flavor_t flavor = as_parsed->flavor;
   const time_t valid_after = as_parsed->valid_after;
 
-  if (valid_after < approx_time() - 3600 * consdiff_cfg.cache_max_age_hours) {
+  if (valid_after < approx_time() - get_max_age_to_cache()) {
     log_info(LD_DIRSERV, "We don't care about this consensus document; it's "
              "too old.");
     return -1;
@@ -621,8 +639,7 @@ consdiffmgr_cleanup(void)
   log_debug(LD_DIRSERV, "Looking for consdiffmgr entries to remove");
 
   // 1. Delete any consensus or diff or anything whose valid_after is too old.
-  const time_t valid_after_cutoff =
-    approx_time() - 3600 * consdiff_cfg.cache_max_age_hours;
+  const time_t valid_after_cutoff = approx_time() - get_max_age_to_cache();
 
   consensus_cache_find_all(objects, cdm_cache_get(),
                            NULL, NULL);
diff --git a/src/or/consdiffmgr.h b/src/or/consdiffmgr.h
index 048dae4..70a64f2 100644
--- a/src/or/consdiffmgr.h
+++ b/src/or/consdiffmgr.h
@@ -14,7 +14,6 @@ typedef enum consdiff_status_t {
 } consdiff_status_t;
 
 typedef struct consdiff_cfg_t {
-  int32_t cache_max_age_hours;
   int32_t cache_max_num;
 } consdiff_cfg_t;
 
diff --git a/src/test/test_consdiffmgr.c b/src/test/test_consdiffmgr.c
index 9d0c5b5..048964f 100644
--- a/src/test/test_consdiffmgr.c
+++ b/src/test/test_consdiffmgr.c
@@ -28,7 +28,7 @@ consdiffmgr_test_setup(const struct testcase_t *arg)
   get_options_mutable()->DataDirectory = ddir_fname; // now owns the pointer.
   check_private_dir(ddir_fname, CPD_CREATE, NULL);
 
-  consdiff_cfg_t consdiff_cfg = { 7200, 300 };
+  consdiff_cfg_t consdiff_cfg = { 300 };
   consdiffmgr_configure(&consdiff_cfg);
   return (void *)1; // must return something non-null.
 }





More information about the tor-commits mailing list