mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Stop relays calling directory_fetches_from_authorities on dir downloads
This change refactors find_dl_schedule() to only call dependent functions
as needed. In particular, directory_fetches_from_authorities() only needs
to be called on clients.
Stopping spurious directory_fetches_from_authorities() calls on every
download on public relays has the following impacts:
* fewer address resolution attempts, particularly those mentioned in 21789
* fewer descriptor rebuilds
* fewer log messages, particularly those limited in 20610
Fixes 23470 in 0.2.8.1-alpha.
The original bug was introduced in commit 35bbf2e
as part of prop210.
This commit is contained in:
parent
3138fe2e69
commit
c86013291b
6
changes/bug23470
Normal file
6
changes/bug23470
Normal file
@ -0,0 +1,6 @@
|
||||
o Minor bugfix (relay address resolution):
|
||||
- Avoid unnecessary calls to directory_fetches_from_authorities()
|
||||
on relays. This avoids spurious address resolutions and
|
||||
descriptor rebuilds. This is a mitigation for 21789. The original
|
||||
bug was introduced in commit 35bbf2e as part of prop210.
|
||||
Fixes 23470 in 0.2.8.1-alpha.
|
@ -3703,26 +3703,24 @@ connection_dir_finished_connecting(dir_connection_t *conn)
|
||||
STATIC const smartlist_t *
|
||||
find_dl_schedule(download_status_t *dls, const or_options_t *options)
|
||||
{
|
||||
const int dir_server = dir_server_mode(options);
|
||||
const int multi_d = networkstatus_consensus_can_use_multiple_directories(
|
||||
options);
|
||||
const int we_are_bootstrapping = networkstatus_consensus_is_bootstrapping(
|
||||
time(NULL));
|
||||
const int use_fallbacks = networkstatus_consensus_can_use_extra_fallbacks(
|
||||
options);
|
||||
switch (dls->schedule) {
|
||||
case DL_SCHED_GENERIC:
|
||||
if (dir_server) {
|
||||
/* Any other directory document */
|
||||
if (dir_server_mode(options)) {
|
||||
/* A directory authority or directory mirror */
|
||||
return options->TestingServerDownloadSchedule;
|
||||
} else {
|
||||
return options->TestingClientDownloadSchedule;
|
||||
}
|
||||
case DL_SCHED_CONSENSUS:
|
||||
if (!multi_d) {
|
||||
if (!networkstatus_consensus_can_use_multiple_directories(options)) {
|
||||
/* A public relay */
|
||||
return options->TestingServerConsensusDownloadSchedule;
|
||||
} else {
|
||||
if (we_are_bootstrapping) {
|
||||
if (!use_fallbacks) {
|
||||
/* A client or bridge */
|
||||
if (networkstatus_consensus_is_bootstrapping(time(NULL))) {
|
||||
/* During bootstrapping */
|
||||
if (!networkstatus_consensus_can_use_extra_fallbacks(options)) {
|
||||
/* A bootstrapping client without extra fallback directories */
|
||||
return
|
||||
options->ClientBootstrapConsensusAuthorityOnlyDownloadSchedule;
|
||||
@ -3738,6 +3736,8 @@ find_dl_schedule(download_status_t *dls, const or_options_t *options)
|
||||
options->ClientBootstrapConsensusFallbackDownloadSchedule;
|
||||
}
|
||||
} else {
|
||||
/* A client with a reasonably live consensus, with or without
|
||||
* certificates */
|
||||
return options->TestingClientConsensusDownloadSchedule;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user