summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Cloke <clokep@users.noreply.github.com>2023-10-31 16:16:17 -0400
committerGitHub <noreply@github.com>2023-10-31 20:16:17 +0000
commited1b8795766e71416d6955412f782f4960547ccc (patch)
treeb616b06616675db3aed0f18178fe9fc84b22b7a3
parentRemove remaining usage of cursor_to_dict. (#16564) (diff)
downloadsynapse-ed1b8795766e71416d6955412f782f4960547ccc.tar.xz
Do not call getfullargspec on every call. (#16589)
getfullargspec is relatively expensive and the results will
not change between calls, so precalculate it outside the
wrapper.
-rw-r--r--changelog.d/16589.misc1
-rw-r--r--synapse/logging/opentracing.py7
2 files changed, 6 insertions, 2 deletions
diff --git a/changelog.d/16589.misc b/changelog.d/16589.misc
new file mode 100644
index 0000000000..6e69368bbf
--- /dev/null
+++ b/changelog.d/16589.misc
@@ -0,0 +1 @@
+Improve performance when using opentracing.
diff --git a/synapse/logging/opentracing.py b/synapse/logging/opentracing.py
index 4454fe29a5..e297fa9c8b 100644
--- a/synapse/logging/opentracing.py
+++ b/synapse/logging/opentracing.py
@@ -1019,11 +1019,14 @@ def tag_args(func: Callable[P, R]) -> Callable[P, R]:
     if not opentracing:
         return func
 
+    # getfullargspec is somewhat expensive, so ensure it is only called a single
+    # time (the function signature shouldn't change anyway).
+    argspec = inspect.getfullargspec(func)
+
     @contextlib.contextmanager
     def _wrapping_logic(
-        func: Callable[P, R], *args: P.args, **kwargs: P.kwargs
+        _func: Callable[P, R], *args: P.args, **kwargs: P.kwargs
     ) -> Generator[None, None, None]:
-        argspec = inspect.getfullargspec(func)
         # We use `[1:]` to skip the `self` object reference and `start=1` to
         # make the index line up with `argspec.args`.
         #