mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-12-26 03:49:23 -05:00
Merge pull request #3826 from matrix-org/rav/logging_for_keyring
add some logging for the keyring queue
This commit is contained in:
commit
33716c4aea
1
changelog.d/3826.misc
Normal file
1
changelog.d/3826.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
add some logging for the keyring queue
|
@ -41,6 +41,7 @@ from synapse.api.errors import Codes, SynapseError
|
|||||||
from synapse.crypto.keyclient import fetch_server_key
|
from synapse.crypto.keyclient import fetch_server_key
|
||||||
from synapse.util import logcontext, unwrapFirstError
|
from synapse.util import logcontext, unwrapFirstError
|
||||||
from synapse.util.logcontext import (
|
from synapse.util.logcontext import (
|
||||||
|
LoggingContext,
|
||||||
PreserveLoggingContext,
|
PreserveLoggingContext,
|
||||||
preserve_fn,
|
preserve_fn,
|
||||||
run_in_background,
|
run_in_background,
|
||||||
@ -217,23 +218,34 @@ class Keyring(object):
|
|||||||
servers have completed. Follows the synapse rules of logcontext
|
servers have completed. Follows the synapse rules of logcontext
|
||||||
preservation.
|
preservation.
|
||||||
"""
|
"""
|
||||||
|
loop_count = 1
|
||||||
while True:
|
while True:
|
||||||
wait_on = [
|
wait_on = [
|
||||||
self.key_downloads[server_name]
|
(server_name, self.key_downloads[server_name])
|
||||||
for server_name in server_names
|
for server_name in server_names
|
||||||
if server_name in self.key_downloads
|
if server_name in self.key_downloads
|
||||||
]
|
]
|
||||||
if wait_on:
|
if not wait_on:
|
||||||
with PreserveLoggingContext():
|
|
||||||
yield defer.DeferredList(wait_on)
|
|
||||||
else:
|
|
||||||
break
|
break
|
||||||
|
logger.info(
|
||||||
|
"Waiting for existing lookups for %s to complete [loop %i]",
|
||||||
|
[w[0] for w in wait_on], loop_count,
|
||||||
|
)
|
||||||
|
with PreserveLoggingContext():
|
||||||
|
yield defer.DeferredList((w[1] for w in wait_on))
|
||||||
|
|
||||||
|
loop_count += 1
|
||||||
|
|
||||||
|
ctx = LoggingContext.current_context()
|
||||||
|
|
||||||
def rm(r, server_name_):
|
def rm(r, server_name_):
|
||||||
self.key_downloads.pop(server_name_, None)
|
with PreserveLoggingContext(ctx):
|
||||||
|
logger.debug("Releasing key lookup lock on %s", server_name_)
|
||||||
|
self.key_downloads.pop(server_name_, None)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
for server_name, deferred in server_to_deferred.items():
|
for server_name, deferred in server_to_deferred.items():
|
||||||
|
logger.debug("Got key lookup lock on %s", server_name)
|
||||||
self.key_downloads[server_name] = deferred
|
self.key_downloads[server_name] = deferred
|
||||||
deferred.addBoth(rm, server_name)
|
deferred.addBoth(rm, server_name)
|
||||||
|
|
||||||
|
@ -143,11 +143,31 @@ class FederationBase(object):
|
|||||||
def callback(_, pdu):
|
def callback(_, pdu):
|
||||||
with logcontext.PreserveLoggingContext(ctx):
|
with logcontext.PreserveLoggingContext(ctx):
|
||||||
if not check_event_content_hash(pdu):
|
if not check_event_content_hash(pdu):
|
||||||
logger.warn(
|
# let's try to distinguish between failures because the event was
|
||||||
"Event content has been tampered, redacting %s: %s",
|
# redacted (which are somewhat expected) vs actual ball-tampering
|
||||||
pdu.event_id, pdu.get_pdu_json()
|
# incidents.
|
||||||
)
|
#
|
||||||
return prune_event(pdu)
|
# This is just a heuristic, so we just assume that if the keys are
|
||||||
|
# about the same between the redacted and received events, then the
|
||||||
|
# received event was probably a redacted copy (but we then use our
|
||||||
|
# *actual* redacted copy to be on the safe side.)
|
||||||
|
redacted_event = prune_event(pdu)
|
||||||
|
if (
|
||||||
|
set(six.iterkeys(redacted_event)) == set(six.iterkeys(pdu)) and
|
||||||
|
set(six.iterkeys(redacted_event.content))
|
||||||
|
== set(six.iterkeys(pdu.content))
|
||||||
|
):
|
||||||
|
logger.info(
|
||||||
|
"Event %s seems to have been redacted; using our redacted "
|
||||||
|
"copy",
|
||||||
|
pdu.event_id,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
"Event %s content has been tampered, redacting",
|
||||||
|
pdu.event_id, pdu.get_pdu_json(),
|
||||||
|
)
|
||||||
|
return redacted_event
|
||||||
|
|
||||||
if self.spam_checker.check_event_for_spam(pdu):
|
if self.spam_checker.check_event_for_spam(pdu):
|
||||||
logger.warn(
|
logger.warn(
|
||||||
@ -162,8 +182,8 @@ class FederationBase(object):
|
|||||||
failure.trap(SynapseError)
|
failure.trap(SynapseError)
|
||||||
with logcontext.PreserveLoggingContext(ctx):
|
with logcontext.PreserveLoggingContext(ctx):
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"Signature check failed for %s",
|
"Signature check failed for %s: %s",
|
||||||
pdu.event_id,
|
pdu.event_id, failure.getErrorMessage(),
|
||||||
)
|
)
|
||||||
return failure
|
return failure
|
||||||
|
|
||||||
|
@ -134,6 +134,7 @@ class KeyStore(SQLBaseStore):
|
|||||||
"""
|
"""
|
||||||
key_id = "%s:%s" % (verify_key.alg, verify_key.version)
|
key_id = "%s:%s" % (verify_key.alg, verify_key.version)
|
||||||
|
|
||||||
|
# XXX fix this to not need a lock (#3819)
|
||||||
def _txn(txn):
|
def _txn(txn):
|
||||||
self._simple_upsert_txn(
|
self._simple_upsert_txn(
|
||||||
txn,
|
txn,
|
||||||
|
Loading…
Reference in New Issue
Block a user