forked from MirrorHub/synapse
Fix another logcontext leak in _persist_events
We need to run the errback in the sentinel context to avoid losing our own context. Also: add logging to runInteraction to help identify where "Starting db connection from sentinel context" warnings are coming from
This commit is contained in:
parent
1e5dbdcbb1
commit
07defd5fe6
3 changed files with 11 additions and 5 deletions
1
changelog.d/3606.misc
Normal file
1
changelog.d/3606.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix some random logcontext leaks.
|
|
@ -311,6 +311,12 @@ class SQLBaseStore(object):
|
||||||
after_callbacks = []
|
after_callbacks = []
|
||||||
exception_callbacks = []
|
exception_callbacks = []
|
||||||
|
|
||||||
|
if LoggingContext.current_context() == LoggingContext.sentinel:
|
||||||
|
logger.warn(
|
||||||
|
"Starting db txn '%s' from sentinel context",
|
||||||
|
desc,
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = yield self.runWithConnection(
|
result = yield self.runWithConnection(
|
||||||
self._new_transaction,
|
self._new_transaction,
|
||||||
|
|
|
@ -142,15 +142,14 @@ class _EventPeristenceQueue(object):
|
||||||
try:
|
try:
|
||||||
queue = self._get_drainining_queue(room_id)
|
queue = self._get_drainining_queue(room_id)
|
||||||
for item in queue:
|
for item in queue:
|
||||||
# handle_queue_loop runs in the sentinel logcontext, so
|
|
||||||
# there is no need to preserve_fn when running the
|
|
||||||
# callbacks on the deferred.
|
|
||||||
try:
|
try:
|
||||||
ret = yield per_item_callback(item)
|
ret = yield per_item_callback(item)
|
||||||
|
except Exception:
|
||||||
|
with PreserveLoggingContext():
|
||||||
|
item.deferred.errback()
|
||||||
|
else:
|
||||||
with PreserveLoggingContext():
|
with PreserveLoggingContext():
|
||||||
item.deferred.callback(ret)
|
item.deferred.callback(ret)
|
||||||
except Exception:
|
|
||||||
item.deferred.errback()
|
|
||||||
finally:
|
finally:
|
||||||
queue = self._event_persist_queues.pop(room_id, None)
|
queue = self._event_persist_queues.pop(room_id, None)
|
||||||
if queue:
|
if queue:
|
||||||
|
|
Loading…
Reference in a new issue