summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2021-12-13 10:48:54 -0500
committerDavid Goulet <dgoulet@torproject.org>2021-12-13 10:48:54 -0500
commitad6a0ebb119dba09fd1a0d1d6eb2a1362803bce3 (patch)
tree0512c7917f2a5949c0a970df337fc7590dbb7dc5
parentb4c55f3a700b9c071c7f8466499ed9cf5ef76fc7 (diff)
parentcda7acb35d40c505dc4d2c3b55d611faab189477 (diff)
downloadtor-ad6a0ebb119dba09fd1a0d1d6eb2a1362803bce3.tar.gz
tor-ad6a0ebb119dba09fd1a0d1d6eb2a1362803bce3.zip
Merge branch 'ticket40527_046_01' into ticket40527_047_01
-rw-r--r--changes/ticket405275
-rw-r--r--config.rust24
-rw-r--r--src/feature/stats/rephist.c12
-rw-r--r--src/rust/.cargo/config12
-rw-r--r--src/test/test_stats.c82
5 files changed, 44 insertions, 91 deletions
diff --git a/changes/ticket40527 b/changes/ticket40527
new file mode 100644
index 0000000000..631b3d4bb9
--- /dev/null
+++ b/changes/ticket40527
@@ -0,0 +1,5 @@
+ o Major bugfixes (relay, overload):
+ - Don't make Tor DNS timeout trigger an overload general state. These
+ timeouts are different from DNS server timeout. They have to be seen as
+ timeout related to UX and not because of a network problem. Fixes bug
+ 40527; bugfix on 0.4.6.1-alpha.
diff --git a/config.rust b/config.rust
new file mode 100644
index 0000000000..878a231cda
--- /dev/null
+++ b/config.rust
@@ -0,0 +1,24 @@
+# Used by our cargo build.rs script to get variables from autoconf.
+#
+# The "configure" script will generate "config.rust" from "config.rust.in",
+# and then build.rs will read "config.rust".
+
+BUILDDIR=/home/dgoulet/Documents/git/tor
+TOR_LDFLAGS_zlib=
+TOR_LDFLAGS_nss=@TOR_LDFLAGS_nss@
+TOR_LDFLAGS_openssl=
+TOR_LDFLAGS_libevent=
+TOR_ZLIB_LIBS=-lz
+TOR_LIB_MATH=-lm
+TOR_LIBEVENT_LIBS=-levent
+TOR_OPENSSL_LIBS=-lssl -lcrypto
+TOR_LIB_WS32=
+TOR_LIB_GDI=
+TOR_LIB_USERENV=
+CURVE25519_LIBS=
+TOR_SYSTEMD_LIBS=-lsystemd
+TOR_LZMA_LIBS=-llzma
+TOR_ZSTD_LIBS=-lzstd
+LIBS=-lseccomp -lcap
+LDFLAGS= -pie -z relro -z now -rdynamic
+NSS_LIBS=
diff --git a/src/feature/stats/rephist.c b/src/feature/stats/rephist.c
index b4431f5a76..68c9349bc3 100644
--- a/src/feature/stats/rephist.c
+++ b/src/feature/stats/rephist.c
@@ -352,18 +352,6 @@ overload_general_dns_assessment(void)
return;
}
- /* Lets see if we can signal a general overload. */
- double fraction = (double) overload_dns_stats.stats_n_error_timeout /
- (double) overload_dns_stats.stats_n_request;
- if (fraction >= overload_dns_timeout_fraction) {
- log_notice(LD_HIST, "General overload -> DNS timeouts (%" PRIu64 ") "
- "fraction %.4f%% is above threshold of %.4f%%",
- overload_dns_stats.stats_n_error_timeout,
- fraction * 100.0,
- overload_dns_timeout_fraction * 100.0);
- rep_hist_note_overload(OVERLOAD_GENERAL);
- }
-
reset:
/* Reset counters for the next period. */
overload_dns_stats.stats_n_error_timeout = 0;
diff --git a/src/rust/.cargo/config b/src/rust/.cargo/config
new file mode 100644
index 0000000000..d91e26719d
--- /dev/null
+++ b/src/rust/.cargo/config
@@ -0,0 +1,12 @@
+[source]
+
+ [source.crates-io]
+ registry = 'https://github.com/rust-lang/crates.io-index'
+ replace-with = 'vendored-sources'
+
+ [source.vendored-sources]
+ directory = ''
+
+[build]
+ rustflags = [ "-D", "warnings" ]
+
diff --git a/src/test/test_stats.c b/src/test/test_stats.c
index e85ad40699..a224c21198 100644
--- a/src/test/test_stats.c
+++ b/src/test/test_stats.c
@@ -721,7 +721,7 @@ test_overload_stats(void *arg)
stats_str = rep_hist_get_overload_stats_lines();
tt_assert(!stats_str);
- /* Note a DNS overload */
+ /* Note a overload */
rep_hist_note_overload(OVERLOAD_GENERAL);
/* Move the time forward one hour */
@@ -742,7 +742,7 @@ test_overload_stats(void *arg)
/* Now the time should be 2002-01-07 00:00:00 */
- /* Note a DNS overload */
+ /* Note a overload */
rep_hist_note_overload(OVERLOAD_GENERAL);
stats_str = rep_hist_get_overload_general_line();
@@ -760,7 +760,7 @@ test_overload_stats(void *arg)
tt_str_op("overload-fd-exhausted 1 2002-01-07 00:00:00\n", OP_EQ, stats_str);
tor_free(stats_str);
- /* Move the time forward. Register DNS overload. See that the time changed */
+ /* Move the time forward. Register overload. See that the time changed */
current_time += 3600*2;
update_approx_time(current_time);
@@ -867,81 +867,6 @@ test_overload_stats(void *arg)
tor_free(stats_str);
}
-/** Test the overload stats logic. */
-static void
-test_overload_dns_timeout(void *arg)
-{
- char *stats_str = NULL;
- (void) arg;
-
- /* Lets simulate a series of timeouts but below our default 1% threshold. */
-
- for (int i = 0; i < 1000; i++) {
- /* This should trigger 9 timeouts which is just below 1% (10) */
- if (i > 0 && !(i % 100)) {
- rep_hist_note_dns_error(0, DNS_ERR_TIMEOUT);
- } else {
- rep_hist_note_dns_error(0, DNS_ERR_NONE);
- }
- }
-
- /* No overload yet. */
- stats_str = rep_hist_get_overload_general_line();
- tt_assert(!stats_str);
-
- /* Move it 10 minutes in the future and see if we get a general overload. */
- update_approx_time(approx_time() + (10 * 60));
-
- /* This query should NOT trigger the general overload because we are below
- * our default of 1%. */
- rep_hist_note_dns_error(0, DNS_ERR_NONE);
- stats_str = rep_hist_get_overload_general_line();
- tt_assert(!stats_str);
-
- /* We'll now go above our 1% threshold. */
- for (int i = 0; i < 1000; i++) {
- /* This should trigger 10 timeouts which is our threshold of 1% (10) */
- if (!(i % 10)) {
- rep_hist_note_dns_error(0, DNS_ERR_TIMEOUT);
- } else {
- rep_hist_note_dns_error(0, DNS_ERR_NONE);
- }
- }
-
- /* Move it 10 minutes in the future and see if we get a general overload. */
- update_approx_time(approx_time() + (10 * 60));
-
- /* This query should trigger the general overload because we are above 1%. */
- rep_hist_note_dns_error(0, DNS_ERR_NONE);
- stats_str = rep_hist_get_overload_general_line();
- tt_assert(stats_str);
- tor_free(stats_str);
-
- /* Move 72h in the future, we should NOT get an overload anymore. */
- update_approx_time(approx_time() + (72 * 3600));
-
- stats_str = rep_hist_get_overload_general_line();
- tt_assert(!stats_str);
-
- /* This query should NOT trigger the general overload. */
- rep_hist_note_dns_error(0, DNS_ERR_TIMEOUT);
- stats_str = rep_hist_get_overload_general_line();
- tt_assert(!stats_str);
-
- /* Move it 10 minutes in the future and see if we get a general overload. We
- * have now 100% of requests timing out. */
- update_approx_time(approx_time() + (10 * 60));
-
- /* This query should trigger the general overload with 50% of timeouts. */
- rep_hist_note_dns_error(0, DNS_ERR_NONE);
- stats_str = rep_hist_get_overload_general_line();
- tt_assert(stats_str);
- tor_free(stats_str);
-
- done:
- tor_free(stats_str);
-}
-
#define ENT(name) \
{ #name, test_ ## name , 0, NULL, NULL }
#define FORK(name) \
@@ -958,7 +883,6 @@ struct testcase_t stats_tests[] = {
FORK(rephist_v3_onions),
FORK(load_stats_file),
FORK(overload_stats),
- FORK(overload_dns_timeout),
END_OF_TESTCASES
};