mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-15 08:03:51 +01:00
Explain SynapseError
and FederationError
better (#14191)
Explain `SynapseError` and `FederationError` better Spawning from https://github.com/matrix-org/synapse/pull/13816#discussion_r993262622
This commit is contained in:
parent
3841900aaa
commit
70b3396506
3 changed files with 30 additions and 3 deletions
1
changelog.d/14191.doc
Normal file
1
changelog.d/14191.doc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Update docstrings of `SynapseError` and `FederationError` to bettter describe what they are used for and the effects of using them are.
|
|
@ -155,7 +155,13 @@ class RedirectException(CodeMessageException):
|
||||||
|
|
||||||
class SynapseError(CodeMessageException):
|
class SynapseError(CodeMessageException):
|
||||||
"""A base exception type for matrix errors which have an errcode and error
|
"""A base exception type for matrix errors which have an errcode and error
|
||||||
message (as well as an HTTP status code).
|
message (as well as an HTTP status code). These often bubble all the way up to the
|
||||||
|
client API response so the error code and status often reach the client directly as
|
||||||
|
defined here. If the error doesn't make sense to present to a client, then it
|
||||||
|
probably shouldn't be a `SynapseError`. For example, if we contact another
|
||||||
|
homeserver over federation, we shouldn't automatically ferry response errors back to
|
||||||
|
the client on our end (a 500 from a remote server does not make sense to a client
|
||||||
|
when our server did not experience a 500).
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
errcode: Matrix error code e.g 'M_FORBIDDEN'
|
errcode: Matrix error code e.g 'M_FORBIDDEN'
|
||||||
|
@ -600,8 +606,20 @@ def cs_error(msg: str, code: str = Codes.UNKNOWN, **kwargs: Any) -> "JsonDict":
|
||||||
|
|
||||||
|
|
||||||
class FederationError(RuntimeError):
|
class FederationError(RuntimeError):
|
||||||
"""This class is used to inform remote homeservers about erroneous
|
"""
|
||||||
PDUs they sent us.
|
Raised when we process an erroneous PDU.
|
||||||
|
|
||||||
|
There are two kinds of scenarios where this exception can be raised:
|
||||||
|
|
||||||
|
1. We may pull an invalid PDU from a remote homeserver (e.g. during backfill). We
|
||||||
|
raise this exception to signal an error to the rest of the application.
|
||||||
|
2. We may be pushed an invalid PDU as part of a `/send` transaction from a remote
|
||||||
|
homeserver. We raise so that we can respond to the transaction and include the
|
||||||
|
error string in the "PDU Processing Result". The message which will likely be
|
||||||
|
ignored by the remote homeserver and is not machine parse-able since it's just a
|
||||||
|
string.
|
||||||
|
|
||||||
|
TODO: In the future, we should split these usage scenarios into their own error types.
|
||||||
|
|
||||||
FATAL: The remote server could not interpret the source event.
|
FATAL: The remote server could not interpret the source event.
|
||||||
(e.g., it was missing a required field)
|
(e.g., it was missing a required field)
|
||||||
|
|
|
@ -481,6 +481,14 @@ class FederationServer(FederationBase):
|
||||||
pdu_results[pdu.event_id] = await process_pdu(pdu)
|
pdu_results[pdu.event_id] = await process_pdu(pdu)
|
||||||
|
|
||||||
async def process_pdu(pdu: EventBase) -> JsonDict:
|
async def process_pdu(pdu: EventBase) -> JsonDict:
|
||||||
|
"""
|
||||||
|
Processes a pushed PDU sent to us via a `/send` transaction
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
JsonDict representing a "PDU Processing Result" that will be bundled up
|
||||||
|
with the other processed PDU's in the `/send` transaction and sent back
|
||||||
|
to remote homeserver.
|
||||||
|
"""
|
||||||
event_id = pdu.event_id
|
event_id = pdu.event_id
|
||||||
with nested_logging_context(event_id):
|
with nested_logging_context(event_id):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue