diff --git a/synapse/metrics/__init__.py b/synapse/metrics/__init__.py
index aec18c5a5d..91b115c10c 100644
--- a/synapse/metrics/__init__.py
+++ b/synapse/metrics/__init__.py
@@ -14,6 +14,7 @@
import functools
import gc
+import inspect
import itertools
import logging
import os
@@ -32,6 +33,7 @@ from prometheus_client.core import (
)
from twisted.internet import reactor
+from twisted.internet.defer import Deferred
from twisted.python.threadpool import ThreadPool
import synapse
@@ -589,15 +591,21 @@ def callFromThreadTimer(func):
def callFromThread(f: Callable[..., Any], *args: object, **kwargs: object) -> None:
@functools.wraps(f)
def g(*args, **kwargs):
+ callbacks = None
+ if inspect.ismethod(f):
+ if isinstance(f.__self__, Deferred):
+ callbacks = list(f.__self__.callbacks)
+
start = time.time()
r = f(*args, **kwargs)
end = time.time()
if end - start > 0.5:
logger.warning(
- "callFromThread took %f seconds. name: %s",
+ "callFromThread took %f seconds. name: %s, callbacks: %s",
end - start,
f,
+ callbacks,
)
return r
|