Skip to content
Snippets Groups Projects
Commit ee5aef6c authored by Erik Johnston's avatar Erik Johnston
Browse files

Log contexts and squash things together

parent 639cd07d
No related branches found
No related tags found
No related merge requests found
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
from twisted.internet import defer, reactor from twisted.internet import defer, reactor
from .logcontext import PreserveLoggingContext, preserve_fn from .logcontext import (
PreserveLoggingContext, preserve_fn, preserve_context_over_deferred,
)
from synapse.util import unwrapFirstError from synapse.util import unwrapFirstError
from contextlib import contextmanager from contextlib import contextmanager
...@@ -141,14 +143,6 @@ def concurrently_execute(func, args, limit): ...@@ -141,14 +143,6 @@ def concurrently_execute(func, args, limit):
], consumeErrors=True).addErrback(unwrapFirstError) ], consumeErrors=True).addErrback(unwrapFirstError)
@contextmanager
def _trigger_defer_manager(d):
try:
yield
finally:
d.callback(None)
class Linearizer(object): class Linearizer(object):
"""Linearizes access to resources based on a key. Useful to ensure only one """Linearizes access to resources based on a key. Useful to ensure only one
thing is happening at a time on a given resource. thing is happening at a time on a given resource.
...@@ -177,13 +171,17 @@ class Linearizer(object): ...@@ -177,13 +171,17 @@ class Linearizer(object):
new_defer = defer.Deferred() new_defer = defer.Deferred()
self.key_to_defer[key] = new_defer self.key_to_defer[key] = new_defer
def remove_if_current(_): if current_defer:
d = self.key_to_defer.get(key) yield preserve_context_over_deferred(current_defer)
if d is new_defer:
self.key_to_defer.pop(key, None)
new_defer.addBoth(remove_if_current)
yield current_defer @contextmanager
def _ctx_manager(d):
try:
yield
finally:
d.callback(None)
d = self.key_to_defer.get(key)
if d is new_defer:
self.key_to_defer.pop(key, None)
defer.returnValue(_trigger_defer_manager(new_defer)) defer.returnValue(_ctx_manager(new_defer))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment