diff options
author | Sean Quah <8349537+squahtx@users.noreply.github.com> | 2021-10-12 11:23:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-12 11:23:46 +0100 |
commit | 6b18eb443054087c4a8153b19b3cc4d3b731d324 (patch) | |
tree | a1fdaf5c1283026131d8c13160b4f4b861af69ab /UPGRADE.rst | |
parent | Add an approximate difference method to StateFilters (#10825) (diff) | |
download | synapse-6b18eb443054087c4a8153b19b3cc4d3b731d324.tar.xz |
Fix opentracing and Prometheus metrics for replication requests (#10996)
This commit fixes two bugs to do with decorators not instrumenting `ReplicationEndpoint`'s `send_request` correctly. There are two decorators on `send_request`: Prometheus' `Gauge.track_inprogress()` and Synapse's `opentracing.trace`. `Gauge.track_inprogress()` does not have any support for async functions when used as a decorator. Since async functions behave like regular functions that return coroutines, only the creation of the coroutine was covered by the metric and none of the actual body of `send_request`. `Gauge.track_inprogress()` returns a regular, non-async function wrapping `send_request`, which is the source of the next bug. The `opentracing.trace` decorator would normally handle async functions correctly, but since the wrapped `send_request` is a non-async function, the decorator ends up suffering from the same issue as `Gauge.track_inprogress()`: the opentracing span only measures the creation of the coroutine and none of the actual function body. Using `Gauge.track_inprogress()` as a context manager instead of a decorator resolves both bugs.
Diffstat (limited to 'UPGRADE.rst')
0 files changed, 0 insertions, 0 deletions