diff options
author | teor <teor2345@gmail.com> | 2017-08-29 14:04:24 +1000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-09-12 10:38:25 -0400 |
commit | 97249c4f5e389141cb4ff3562a3813bd09bff6ad (patch) | |
tree | fea0d8ade7b106af53d5a389b56ce9867b7083da /src | |
parent | 435952538da2d99e7ce46f510ac3f7dc3f910fca (diff) | |
download | tor-97249c4f5e389141cb4ff3562a3813bd09bff6ad.tar.gz tor-97249c4f5e389141cb4ff3562a3813bd09bff6ad.zip |
Make bridge clients download bridge descriptors immediately
The download schedule tells Tor to wait 15 minutes before downloading
bridge descriptors. But 17750 made Tor ignore that and start immediately.
Since we fixed 17750, Tor waits 15 minutes for bridge client bootstrap,
like the schedule says.
This fixes the download schedule to start immediately, and to try each
bridge 3 times in the first 30 seconds. This should make bridge bootstraps
more reliable.
Fixes 23347.
Diffstat (limited to 'src')
-rw-r--r-- | src/or/bridges.c | 11 | ||||
-rw-r--r-- | src/or/config.c | 9 | ||||
-rw-r--r-- | src/or/directory.c | 4 |
3 files changed, 18 insertions, 6 deletions
diff --git a/src/or/bridges.c b/src/or/bridges.c index 0818fb0812..f2244004f3 100644 --- a/src/or/bridges.c +++ b/src/or/bridges.c @@ -632,7 +632,9 @@ fetch_bridge_descriptors(const or_options_t *options, time_t now) continue; } - /* schedule another fetch as if this one will fail, in case it does */ + /* schedule another fetch as if this one will fail, in case it does + * (we can't increment after a failure, because sometimes we use the + * bridge authority, and sometimes we use the bridge direct) */ download_status_failed(&bridge->fetch_status, 0); can_use_bridge_authority = !tor_digest_is_zero(bridge->identity) && @@ -787,8 +789,13 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache) if (bridge) { /* if we actually want to use this one */ node_t *node; /* it's here; schedule its re-fetch for a long time from now. */ - if (!from_cache) + if (!from_cache) { download_status_reset(&bridge->fetch_status); + /* We have two quick attempts in the bridge schedule, and then slow + * ones */ + download_status_failed(&bridge->fetch_status, 0); + download_status_failed(&bridge->fetch_status, 0); + } node = node_get_mutable_by_id(ri->cache_info.identity_digest); tor_assert(node); diff --git a/src/or/config.c b/src/or/config.c index 30853724e4..54df6c3e58 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -586,7 +586,10 @@ static config_var_t option_vars_[] = { * blackholed. Clients will try 3 directories simultaneously. * (Relays never use simultaneous connections.) */ V(ClientBootstrapConsensusMaxInProgressTries, UINT, "3"), - V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "1200, 900, 900, 3600"), + /* The bridge code relies on the third item in this schedule being slow + * (~ 1 consensus interval) */ + V(TestingBridgeDownloadSchedule, CSV_INTERVAL, + "0, 8, 3600, 10800, 25200, 54000, 111600, 262800"), V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "10 minutes"), V(TestingDirConnectionMaxStall, INTERVAL, "5 minutes"), V(TestingConsensusMaxDownloadTries, UINT, "8"), @@ -648,7 +651,9 @@ static const config_var_t testing_tor_network_defaults[] = { "15, 20, 30, 60"), V(TestingClientConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 5, 10, " "15, 20, 30, 60"), - V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "60, 30, 30, 60"), + /* The bridge code relies on the third item in this schedule being slow + * (~ 1 consensus interval) */ + V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "0, 5, 10, 30, 60"), V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "5 seconds"), V(TestingDirConnectionMaxStall, INTERVAL, "30 seconds"), V(TestingConsensusMaxDownloadTries, UINT, "80"), diff --git a/src/or/directory.c b/src/or/directory.c index 57dfdd9cac..6b5e16bfd4 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -5663,8 +5663,8 @@ download_status_get_initial_delay_from_now(const download_status_t *dls) * (We find the zeroth element of the download schedule, and set * next_attempt_at to be the appropriate offset from 'now'. In most * cases this means setting it to 'now', so the item will be immediately - * downloadable; in the case of bridge descriptors, the zeroth element - * is an hour from now.) */ + * downloadable; when using authorities with fallbacks, there is a few seconds' + * delay.) */ void download_status_reset(download_status_t *dls) { |