mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-12 22:23:49 +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 *
|
STATIC const smartlist_t *
|
||||||
find_dl_schedule(download_status_t *dls, const or_options_t *options)
|
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) {
|
switch (dls->schedule) {
|
||||||
case DL_SCHED_GENERIC:
|
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;
|
return options->TestingServerDownloadSchedule;
|
||||||
} else {
|
} else {
|
||||||
return options->TestingClientDownloadSchedule;
|
return options->TestingClientDownloadSchedule;
|
||||||
}
|
}
|
||||||
case DL_SCHED_CONSENSUS:
|
case DL_SCHED_CONSENSUS:
|
||||||
if (!multi_d) {
|
if (!networkstatus_consensus_can_use_multiple_directories(options)) {
|
||||||
|
/* A public relay */
|
||||||
return options->TestingServerConsensusDownloadSchedule;
|
return options->TestingServerConsensusDownloadSchedule;
|
||||||
} else {
|
} else {
|
||||||
if (we_are_bootstrapping) {
|
/* A client or bridge */
|
||||||
if (!use_fallbacks) {
|
if (networkstatus_consensus_is_bootstrapping(time(NULL))) {
|
||||||
|
/* During bootstrapping */
|
||||||
|
if (!networkstatus_consensus_can_use_extra_fallbacks(options)) {
|
||||||
/* A bootstrapping client without extra fallback directories */
|
/* A bootstrapping client without extra fallback directories */
|
||||||
return
|
return
|
||||||
options->ClientBootstrapConsensusAuthorityOnlyDownloadSchedule;
|
options->ClientBootstrapConsensusAuthorityOnlyDownloadSchedule;
|
||||||
@ -3738,6 +3736,8 @@ find_dl_schedule(download_status_t *dls, const or_options_t *options)
|
|||||||
options->ClientBootstrapConsensusFallbackDownloadSchedule;
|
options->ClientBootstrapConsensusFallbackDownloadSchedule;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/* A client with a reasonably live consensus, with or without
|
||||||
|
* certificates */
|
||||||
return options->TestingClientConsensusDownloadSchedule;
|
return options->TestingClientConsensusDownloadSchedule;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user