summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/or/bridges.c11
-rw-r--r--src/or/config.c9
-rw-r--r--src/or/directory.c4
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)
{