mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-14 18:43:53 +01:00
Logging and logcontext fixes for Limiter
Add some logging to the Limiter in a similar spirit to the Linearizer, to help debug issues. Also fix a logcontext leak. Also refactor slightly to avoid throwing exceptions.
This commit is contained in:
parent
f851bc8182
commit
bf993db11c
1 changed files with 17 additions and 7 deletions
|
@ -278,8 +278,13 @@ class Limiter(object):
|
||||||
if entry[0] >= self.max_count:
|
if entry[0] >= self.max_count:
|
||||||
new_defer = defer.Deferred()
|
new_defer = defer.Deferred()
|
||||||
entry[1].append(new_defer)
|
entry[1].append(new_defer)
|
||||||
|
|
||||||
|
logger.info("Waiting to acquire limiter lock for key %r", key)
|
||||||
with PreserveLoggingContext():
|
with PreserveLoggingContext():
|
||||||
yield new_defer
|
yield new_defer
|
||||||
|
logger.info("Acquired limiter lock for key %r", key)
|
||||||
|
else:
|
||||||
|
logger.info("Acquired uncontended limiter lock for key %r", key)
|
||||||
|
|
||||||
entry[0] += 1
|
entry[0] += 1
|
||||||
|
|
||||||
|
@ -288,16 +293,21 @@ class Limiter(object):
|
||||||
try:
|
try:
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
|
logger.info("Releasing limiter lock for key %r", key)
|
||||||
|
|
||||||
# We've finished executing so check if there are any things
|
# We've finished executing so check if there are any things
|
||||||
# blocked waiting to execute and start one of them
|
# blocked waiting to execute and start one of them
|
||||||
entry[0] -= 1
|
entry[0] -= 1
|
||||||
try:
|
|
||||||
entry[1].pop(0).callback(None)
|
if entry[1]:
|
||||||
except IndexError:
|
next_def = entry[1].pop(0)
|
||||||
# If nothing else is executing for this key then remove it
|
|
||||||
# from the map
|
with PreserveLoggingContext():
|
||||||
if entry[0] == 0:
|
next_def.callback(None)
|
||||||
self.key_to_defer.pop(key, None)
|
elif entry[0] == 0:
|
||||||
|
# We were the last thing for this key: remove it from the
|
||||||
|
# map.
|
||||||
|
del self.key_to_defer[key]
|
||||||
|
|
||||||
defer.returnValue(_ctx_manager())
|
defer.returnValue(_ctx_manager())
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue