Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 104fdf5

Browse files
author
Sean Quah
committed
Fix incorrect juggling of logging contexts in _PerHostRatelimiter
Introduced in #13499. Signed-off-by: Sean Quah <seanq@matrix.org>
1 parent 84169a8 commit 104fdf5

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

changelog.d/13554.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Instrument `FederationStateIdsServlet` (`/state_ids`) for understandable traces in Jaeger.

synapse/util/ratelimitutils.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,20 +222,28 @@ def on_both(r: object) -> object:
222222
# Ensure that we've properly cleaned up.
223223
self.sleeping_requests.discard(request_id)
224224
self.ready_request_queue.pop(request_id, None)
225-
wait_span_scope.__exit__(None, None, None)
226-
wait_timer_cm.__exit__(None, None, None)
227225
return r
228226

227+
ret_defer.addCallbacks(on_start, on_err)
228+
ret_defer.addBoth(on_both)
229+
229230
# Tracing
230231
wait_span_scope = start_active_span("ratelimit wait")
231232
wait_span_scope.__enter__()
233+
232234
# Metrics
233235
wait_timer_cm = queue_wait_timer.time()
234236
wait_timer_cm.__enter__()
235237

236-
ret_defer.addCallbacks(on_start, on_err)
237-
ret_defer.addBoth(on_both)
238-
return make_deferred_yieldable(ret_defer)
238+
# The current logcontext is now one created by `wait_span_scope`.
239+
# We must only `__exit__` it once it has been restored by `make_deferred_yieldable`.
240+
def on_after_logcontext_restored(r: object) -> object:
241+
wait_timer_cm.__exit__(None, None, None)
242+
wait_span_scope.__exit__(None, None, None)
243+
244+
d = make_deferred_yieldable(ret_defer)
245+
d.addBoth(on_after_logcontext_restored)
246+
return d
239247

240248
def _on_exit(self, request_id: object) -> None:
241249
logger.debug("Ratelimit(%s) [%s]: Processed req", self.host, id(request_id))

0 commit comments

Comments
 (0)