mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Change who calls microdesc_cache_rebuild().
Previously we ensured that it would get called periodically by doing it from inside the code that added microdescriptors. That won't work though: it would interfere with our code that tried to read microdescs from disk initially. Instead, we should consider rebuilding the cache periodically, and on startup.
This commit is contained in:
parent
cb6c909664
commit
68ae5afa5a
6
changes/bug2230_part4
Normal file
6
changes/bug2230_part4
Normal file
@ -0,0 +1,6 @@
|
||||
o Minor bugfixes:
|
||||
- Authorities now clean their microdesc cache periodically and when
|
||||
reading from disk initially, not only when adding new descriptors.
|
||||
This prevents a bug where we could lose microdescriptors. Bugfix
|
||||
on 0.2.2.6-alpha.
|
||||
|
@ -1075,6 +1075,8 @@ run_scheduled_events(time_t now)
|
||||
rep_history_clean(now - options->RephistTrackTime);
|
||||
rend_cache_clean();
|
||||
rend_cache_clean_v2_descs_as_dir();
|
||||
if (authdir_mode_v3(options))
|
||||
microdesc_cache_rebuild(NULL, 0);
|
||||
#define CLEAN_CACHES_INTERVAL (30*60)
|
||||
time_to_clean_caches = now + CLEAN_CACHES_INTERVAL;
|
||||
}
|
||||
|
@ -208,8 +208,6 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
|
||||
if (f)
|
||||
finish_writing_to_file(open_file); /*XXX Check me.*/
|
||||
|
||||
microdesc_cache_rebuild(cache, 0/* only as needed */);
|
||||
|
||||
return added;
|
||||
}
|
||||
|
||||
@ -230,6 +228,7 @@ microdesc_cache_clear(microdesc_cache_t *cache)
|
||||
}
|
||||
cache->total_len_seen = 0;
|
||||
cache->n_seen = 0;
|
||||
cache->bytes_dropped = 0;
|
||||
}
|
||||
|
||||
/** Reload the contents of <b>cache</b> from disk. If it is empty, load it
|
||||
@ -271,7 +270,7 @@ microdesc_cache_reload(microdesc_cache_t *cache)
|
||||
log_notice(LD_DIR, "Reloaded microdescriptor cache. Found %d descriptors.",
|
||||
total);
|
||||
|
||||
microdesc_cache_clean(cache, 0, 0);
|
||||
microdesc_cache_rebuild(cache, 0 /* don't force */);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -354,6 +353,12 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
|
||||
off_t off = 0;
|
||||
int orig_size, new_size;
|
||||
|
||||
if (cache == NULL) {
|
||||
cache = the_microdesc_cache;
|
||||
if (cache == NULL)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Remove dead descriptors */
|
||||
microdesc_cache_clean(cache, 0/*cutoff*/, 0/*force*/);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user