Turn consdiffmgr.cache_max_age_hours into a parameter

This commit is contained in:
Nick Mathewson 2017-05-04 12:26:55 -04:00
parent c985592874
commit c276c10d3b
3 changed files with 22 additions and 6 deletions

View File

@ -127,7 +127,6 @@ static HT_HEAD(cdm_diff_ht, cdm_diff_t) cdm_diff_ht = HT_INITIALIZER();
* Configuration for this module * Configuration for this module
*/ */
static consdiff_cfg_t consdiff_cfg = { 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 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 seccomp2 syscall filter, which tops out at BPF_MAXINS (4096)
// XXXX rules. // XXXX rules.
@ -423,6 +422,25 @@ cdm_cache_lookup_consensus(consensus_flavor_t flavor, time_t valid_after)
return result; 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 * 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 * 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 consensus_flavor_t flavor = as_parsed->flavor;
const time_t valid_after = as_parsed->valid_after; 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 " log_info(LD_DIRSERV, "We don't care about this consensus document; it's "
"too old."); "too old.");
return -1; return -1;
@ -621,8 +639,7 @@ consdiffmgr_cleanup(void)
log_debug(LD_DIRSERV, "Looking for consdiffmgr entries to remove"); log_debug(LD_DIRSERV, "Looking for consdiffmgr entries to remove");
// 1. Delete any consensus or diff or anything whose valid_after is too old. // 1. Delete any consensus or diff or anything whose valid_after is too old.
const time_t valid_after_cutoff = const time_t valid_after_cutoff = approx_time() - get_max_age_to_cache();
approx_time() - 3600 * consdiff_cfg.cache_max_age_hours;
consensus_cache_find_all(objects, cdm_cache_get(), consensus_cache_find_all(objects, cdm_cache_get(),
NULL, NULL); NULL, NULL);

View File

@ -14,7 +14,6 @@ typedef enum consdiff_status_t {
} consdiff_status_t; } consdiff_status_t;
typedef struct consdiff_cfg_t { typedef struct consdiff_cfg_t {
int32_t cache_max_age_hours;
int32_t cache_max_num; int32_t cache_max_num;
} consdiff_cfg_t; } consdiff_cfg_t;

View File

@ -28,7 +28,7 @@ consdiffmgr_test_setup(const struct testcase_t *arg)
get_options_mutable()->DataDirectory = ddir_fname; // now owns the pointer. get_options_mutable()->DataDirectory = ddir_fname; // now owns the pointer.
check_private_dir(ddir_fname, CPD_CREATE, NULL); 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); consdiffmgr_configure(&consdiff_cfg);
return (void *)1; // must return something non-null. return (void *)1; // must return something non-null.
} }