mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Clean old descriptors from the service-side rend cache
Parameterize the rend_cache_clean() function to allow it clean old rendezvous descriptors from the service-side cache as well as the client descriptor cache.
This commit is contained in:
parent
ee1a4ce8b2
commit
335d0b95d3
@ -1518,7 +1518,8 @@ run_scheduled_events(time_t now)
|
||||
/* Remove old information from rephist and the rend cache. */
|
||||
if (time_to.clean_caches < now) {
|
||||
rep_history_clean(now - options->RephistTrackTime);
|
||||
rend_cache_clean(now);
|
||||
rend_cache_clean(now, REND_CACHE_TYPE_CLIENT);
|
||||
rend_cache_clean(now, REND_CACHE_TYPE_SERVICE);
|
||||
rend_cache_clean_v2_descs_as_dir(now, 0);
|
||||
microdesc_cache_rebuild(NULL, 0);
|
||||
#define CLEAN_CACHES_INTERVAL (30*60)
|
||||
|
@ -260,24 +260,33 @@ rend_cache_failure_clean(time_t now)
|
||||
} STRMAP_FOREACH_END;
|
||||
}
|
||||
|
||||
/** Removes all old entries from the service descriptor cache.
|
||||
/** Removes all old entries from the client or service descriptor cache.
|
||||
*/
|
||||
void
|
||||
rend_cache_clean(time_t now)
|
||||
rend_cache_clean(time_t now, rend_cache_type_t cache_type)
|
||||
{
|
||||
strmap_iter_t *iter;
|
||||
const char *key;
|
||||
void *val;
|
||||
rend_cache_entry_t *ent;
|
||||
time_t cutoff = now - REND_CACHE_MAX_AGE - REND_CACHE_MAX_SKEW;
|
||||
for (iter = strmap_iter_init(rend_cache); !strmap_iter_done(iter); ) {
|
||||
strmap_t *cache = NULL;
|
||||
|
||||
if (cache_type == REND_CACHE_TYPE_CLIENT) {
|
||||
cache = rend_cache;
|
||||
} else if (cache_type == REND_CACHE_TYPE_SERVICE) {
|
||||
cache = rend_cache_service;
|
||||
}
|
||||
tor_assert(cache);
|
||||
|
||||
for (iter = strmap_iter_init(cache); !strmap_iter_done(iter); ) {
|
||||
strmap_iter_get(iter, &key, &val);
|
||||
ent = (rend_cache_entry_t*)val;
|
||||
if (ent->parsed->timestamp < cutoff) {
|
||||
iter = strmap_iter_next_rmv(rend_cache, iter);
|
||||
iter = strmap_iter_next_rmv(cache, iter);
|
||||
rend_cache_entry_free(ent);
|
||||
} else {
|
||||
iter = strmap_iter_next(rend_cache, iter);
|
||||
iter = strmap_iter_next(cache, iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ typedef enum {
|
||||
} rend_cache_type_t;
|
||||
|
||||
void rend_cache_init(void);
|
||||
void rend_cache_clean(time_t now);
|
||||
void rend_cache_clean(time_t now, rend_cache_type_t cache_type);
|
||||
void rend_cache_failure_clean(time_t now);
|
||||
void rend_cache_clean_v2_descs_as_dir(time_t now, size_t min_to_remove);
|
||||
void rend_cache_purge(void);
|
||||
|
Loading…
Reference in New Issue
Block a user