Improve stacktraces from exceptions in background processes (#7808)

use `Failure()` to fish out the real exception.
This commit is contained in:
Richard van der Hoff 2020-07-09 13:01:33 +01:00 committed by GitHub
parent 08c5181a8d
commit 8ca39bd2c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 1 deletions

1
changelog.d/7808.misc Normal file
View file

@ -0,0 +1 @@
Improve stacktraces from exceptions in background processes.

View file

@ -22,6 +22,7 @@ from typing import TYPE_CHECKING, Dict, Optional, Set
from prometheus_client.core import REGISTRY, Counter, Gauge from prometheus_client.core import REGISTRY, Counter, Gauge
from twisted.internet import defer from twisted.internet import defer
from twisted.python.failure import Failure
from synapse.logging.context import LoggingContext, PreserveLoggingContext from synapse.logging.context import LoggingContext, PreserveLoggingContext
@ -212,7 +213,14 @@ def run_as_background_process(desc, func, *args, **kwargs):
return (yield result) return (yield result)
except Exception: except Exception:
logger.exception("Background process '%s' threw an exception", desc) # failure.Failure() fishes the original Failure out of our stack, and
# thus gives us a sensible stack trace.
f = Failure()
logger.error(
"Background process '%s' threw an exception",
desc,
exc_info=(f.type, f.value, f.getTracebackObject()),
)
finally: finally:
_background_process_in_flight_count.labels(desc).dec() _background_process_in_flight_count.labels(desc).dec()