aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2022-04-25 19:20:00 +0000
committerDavid Goulet <dgoulet@torproject.org>2022-04-26 12:14:26 -0400
commited3399ab06f9a21a4d200f3c15ef42df78a76477 (patch)
tree8291440ed4fa12740abb1b391f928233967dc7ee
parent616c06c0b2748db163cbb6882043d24fdbaaf335 (diff)
downloadtor-ed3399ab06f9a21a4d200f3c15ef42df78a76477.tar.gz
tor-ed3399ab06f9a21a4d200f3c15ef42df78a76477.zip
Bug 40598: Demote warn log about odd path lengths with congestion control.
-rw-r--r--src/core/or/circuitbuild.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/core/or/circuitbuild.c b/src/core/or/circuitbuild.c
index f62a1d93f5..8027a96565 100644
--- a/src/core/or/circuitbuild.c
+++ b/src/core/or/circuitbuild.c
@@ -1284,11 +1284,28 @@ circuit_finish_handshake(origin_circuit_t *circ,
circuit_get_cpath_hop(circ, SBWS_ROUTE_LEN) == hop) {
hop->ccontrol = congestion_control_new(&params, CC_PATH_SBWS);
} else {
- static ratelim_t cc_path_limit = RATELIM_INIT(600);
- log_fn_ratelim(&cc_path_limit, LOG_WARN, LD_CIRC,
- "Unexpected path length %d for circuit",
- circ_len);
- hop->ccontrol = congestion_control_new(&params, CC_PATH_EXIT);
+ if (circ_len > DEFAULT_ROUTE_LEN) {
+ /* This can happen for unknown reasons; cannibalization codepaths
+ * don't seem able to do it, so there is some magic way that hops can
+ * still get added. Perhaps some cases of circuit pre-build that change
+ * purpose? */
+ static ratelim_t cc_path_limit = RATELIM_INIT(600);
+ log_fn_ratelim(&cc_path_limit, LOG_NOTICE, LD_CIRC,
+ "Unexpected path length %d for exit circuit %d, purpose %d",
+ circ_len, circ->global_identifier,
+ TO_CIRCUIT(circ)->purpose);
+ hop->ccontrol = congestion_control_new(&params, CC_PATH_EXIT);
+ } else {
+ /* This is likely directory requests, which should block on orconn
+ * before congestion control, but lets give them the lower sbws
+ * param set anyway just in case. */
+ log_info(LD_CIRC,
+ "Unexpected path length %d for exit circuit %d, purpose %d",
+ circ_len, circ->global_identifier,
+ TO_CIRCUIT(circ)->purpose);
+
+ hop->ccontrol = congestion_control_new(&params, CC_PATH_SBWS);
+ }
}
}