DirMgr: Detect that directory state is ready if it begins with all MDs

Previously, we'd only call PendingNetDir::upgrade_if_necesessary
when adding a microdescriptor.  But if it began already having all
of its descriptors (because we found them in the cache), we wouldn't
actually upgrade it to a PendingNetDir::Yielding, which would make
it unusable, and would make us schedule its reset time too far
in the future.

Fixes #802.
This commit is contained in:
Nick Mathewson 2023-04-10 11:29:51 -04:00
parent 1af2296cc2
commit f61fd9609a
1 changed files with 6 additions and 1 deletions

View File

@ -902,10 +902,15 @@ impl<R: Runtime> GetMicrodescsState<R> {
partial_dir.fill_from_previous_netdir(old_dir);
}
// Always upgrade at least once: otherwise, we won't notice we're ready unless we
// add a microdescriptor.
let mut partial = PendingNetDir::Partial(partial_dir);
partial.upgrade_if_necessary();
GetMicrodescsState {
cache_usage,
n_microdescs,
partial: PendingNetDir::Partial(partial_dir),
partial,
meta,
newly_listed: Vec::new(),
reset_time,