Wrap connection.commit with OpenTracing

This is an attempt to diagnose poor apdex levels, per
https://github.com/matrix-org/internal-config/issues/1181
anoa/log_11772
Richard van der Hoff 2022-01-07 11:53:28 +00:00
parent 1a776f6710
commit 99e7fb1d52
1 changed files with 14 additions and 1 deletions

View File

@ -50,6 +50,7 @@ from synapse.logging.context import (
current_context, current_context,
make_deferred_yieldable, make_deferred_yieldable,
) )
from synapse.logging.opentracing import trace
from synapse.metrics import register_threadpool from synapse.metrics import register_threadpool
from synapse.metrics.background_process_metrics import run_as_background_process from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.storage.background_updates import BackgroundUpdater from synapse.storage.background_updates import BackgroundUpdater
@ -104,8 +105,20 @@ def make_pool(
# Ensure we have a logging context so we can correctly track queries, # Ensure we have a logging context so we can correctly track queries,
# etc. # etc.
with LoggingContext("db.on_new_connection"): with LoggingContext("db.on_new_connection"):
# HACK Patch the connection's commit function so that we can see
# how long it's taking from Jaeger.
class NastyConnectionWrapper:
def __init__(self, connection):
self._connection = connection
self.commit = trace(connection.commit, "db.conn.commit")
def __getattr__(self, item):
return getattr(self._connection, item)
engine.on_new_connection( engine.on_new_connection(
LoggingDatabaseConnection(conn, engine, "on_new_connection") LoggingDatabaseConnection(
NastyConnectionWrapper(conn), engine, "on_new_connection"
)
) )
connection_pool = adbapi.ConnectionPool( connection_pool = adbapi.ConnectionPool(