mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Document and make more conservative the logic for picking the size of the bloom filter to use for retaining descriptors.
svn:r17786
This commit is contained in:
parent
73e1a1d26e
commit
f7adc017c4
@ -3232,7 +3232,6 @@ routerlist_remove_old_routers(void)
|
||||
int caches = directory_caches_dir_info(get_options());
|
||||
const networkstatus_t *consensus = networkstatus_get_latest_consensus();
|
||||
const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
|
||||
int n_expected_retain = 0;
|
||||
|
||||
trusted_dirs_remove_old_certs();
|
||||
|
||||
@ -3241,17 +3240,25 @@ routerlist_remove_old_routers(void)
|
||||
|
||||
// routerlist_assert_ok(routerlist);
|
||||
|
||||
n_expected_retain = smartlist_len(consensus->routerstatus_list);
|
||||
if (caches &&
|
||||
networkstatus_v2_list && smartlist_len(networkstatus_v2_list)) {
|
||||
SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
|
||||
n_expected_retain += smartlist_len(ns->entries));
|
||||
/* DOCDOC XXX021 too much magic. */
|
||||
n_expected_retain /= (smartlist_len(networkstatus_v2_list)/2+1);
|
||||
/* We need to guess how many router descriptors we will wind up wanting to
|
||||
retain, so that we can be sure to allocate a large enough Bloom filter
|
||||
to hold the digest set. Overestimating is fine; underestimating is bad.
|
||||
*/
|
||||
{
|
||||
/* We'll probably retain everything in the consensus. */
|
||||
int n_max_retain = smartlist_len(consensus->routerstatus_list);
|
||||
if (caches && networkstatus_v2_list) {
|
||||
/* If we care about v2 statuses, we'll retain at most as many as are
|
||||
listed any of the v2 statues. This will be at least the length of
|
||||
the largest v2 networstatus, and in the worst case, this set will be
|
||||
equal to the sum of the lengths of all v2 consensuses. Take the
|
||||
worst case.
|
||||
*/
|
||||
SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
|
||||
n_max_retain += smartlist_len(ns->entries));
|
||||
}
|
||||
retain = digestset_new(n_max_retain);
|
||||
}
|
||||
//log_notice(LD_DIR,"n_expected_retain=%d",n_expected_retain);
|
||||
|
||||
retain = digestset_new(n_expected_retain);
|
||||
|
||||
cutoff = now - OLD_ROUTER_DESC_MAX_AGE;
|
||||
/* Build a list of all the descriptors that _anybody_ lists. */
|
||||
|
Loading…
Reference in New Issue
Block a user