diff options
author | David Goulet <dgoulet@torproject.org> | 2021-12-13 10:48:54 -0500 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2021-12-13 10:48:54 -0500 |
commit | ad6a0ebb119dba09fd1a0d1d6eb2a1362803bce3 (patch) | |
tree | 0512c7917f2a5949c0a970df337fc7590dbb7dc5 | |
parent | b4c55f3a700b9c071c7f8466499ed9cf5ef76fc7 (diff) | |
parent | cda7acb35d40c505dc4d2c3b55d611faab189477 (diff) | |
download | tor-ad6a0ebb119dba09fd1a0d1d6eb2a1362803bce3.tar.gz tor-ad6a0ebb119dba09fd1a0d1d6eb2a1362803bce3.zip |
Merge branch 'ticket40527_046_01' into ticket40527_047_01
-rw-r--r-- | changes/ticket40527 | 5 | ||||
-rw-r--r-- | config.rust | 24 | ||||
-rw-r--r-- | src/feature/stats/rephist.c | 12 | ||||
-rw-r--r-- | src/rust/.cargo/config | 12 | ||||
-rw-r--r-- | src/test/test_stats.c | 82 |
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 }; |