summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Cloke <patrickc@matrix.org>2023-04-07 10:17:21 -0400
committerPatrick Cloke <patrickc@matrix.org>2023-07-17 11:05:43 -0400
commitc02f1153069d6abae931e46d2351c53ecc8b185a (patch)
tree2ded549b33dd30e9cb50ae5c63e68f690efa581d
parentRemove references to m.room.hub events. (diff)
downloadsynapse-c02f1153069d6abae931e46d2351c53ecc8b185a.tar.xz
Linearized Matrix events do not have a depth.
-rw-r--r--synapse/events/__init__.py3
-rw-r--r--synapse/events/utils.py3
-rw-r--r--synapse/federation/federation_base.py25
-rw-r--r--synapse/handlers/federation.py4
4 files changed, 23 insertions, 12 deletions
diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py
index aa48cd2236..d628abc0a6 100644
--- a/synapse/events/__init__.py
+++ b/synapse/events/__init__.py
@@ -605,6 +605,9 @@ class FrozenLinearizedEvent(FrozenEventV3):
 
     format_version = EventFormatVersions.LINEARIZED
 
+    # TODO(LM): Do we re-calculate depth at some point?
+    depth = 0  # type: ignore[assignment]
+
     @property
     def pdu_domain(self) -> str:
         """The domain which added this event to the DAG.
diff --git a/synapse/events/utils.py b/synapse/events/utils.py
index 4f6f075290..ff172d66b4 100644
--- a/synapse/events/utils.py
+++ b/synapse/events/utils.py
@@ -103,7 +103,6 @@ def prune_event_dict(room_version: RoomVersion, event_dict: JsonDict) -> JsonDic
         "content",
         "type",
         "state_key",
-        "depth",
         "prev_events",
         "auth_events",
         "origin_server_ts",
@@ -115,6 +114,8 @@ def prune_event_dict(room_version: RoomVersion, event_dict: JsonDict) -> JsonDic
     # The hub server should not be redacted for linear matrix.
     if room_version.linearized_matrix:
         allowed_keys.append("hub_server")
+    else:
+        allowed_keys.append("depth")
 
     # Room versions before MSC3989 kept the origin field.
     if not room_version.msc3989_redaction_rules:
diff --git a/synapse/federation/federation_base.py b/synapse/federation/federation_base.py
index 50213a8237..a0c5048efc 100644
--- a/synapse/federation/federation_base.py
+++ b/synapse/federation/federation_base.py
@@ -295,21 +295,26 @@ def event_from_pdu_json(pdu_json: JsonDict, room_version: RoomVersion) -> EventB
     """
     # we could probably enforce a bunch of other fields here (room_id, sender,
     # origin, etc etc)
-    assert_params_in_dict(pdu_json, ("type", "depth"))
+    if room_version.event_format == EventFormatVersions.LINEARIZED:
+        assert_params_in_dict(pdu_json, ("type",))
+    else:
+        assert_params_in_dict(pdu_json, ("type", "depth"))
+
+        depth = pdu_json["depth"]
+        if type(depth) is not int:
+            raise SynapseError(
+                400, "Depth %r not an integer" % (depth,), Codes.BAD_JSON
+            )
+
+        if depth < 0:
+            raise SynapseError(400, "Depth too small", Codes.BAD_JSON)
+        elif depth > MAX_DEPTH:
+            raise SynapseError(400, "Depth too large", Codes.BAD_JSON)
 
     # Strip any unauthorized values from "unsigned" if they exist
     if "unsigned" in pdu_json:
         _strip_unsigned_values(pdu_json)
 
-    depth = pdu_json["depth"]
-    if type(depth) is not int:
-        raise SynapseError(400, "Depth %r not an intger" % (depth,), Codes.BAD_JSON)
-
-    if depth < 0:
-        raise SynapseError(400, "Depth too small", Codes.BAD_JSON)
-    elif depth > MAX_DEPTH:
-        raise SynapseError(400, "Depth too large", Codes.BAD_JSON)
-
     # Validate that the JSON conforms to the specification.
     if room_version.strict_canonicaljson:
         validate_canonicaljson(pdu_json)
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index cc5ed97730..d90a14788d 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -662,7 +662,9 @@ class FederationHandler:
                 origin = ret.origin
                 state = ret.state
                 auth_chain = ret.auth_chain
-                auth_chain.sort(key=lambda e: e.depth)
+                # TODO(LM) Assume the auth chain is reasonable ordered.
+                if not room_version_obj.linearized_matrix:
+                    auth_chain.sort(key=lambda e: e.depth)
 
                 logger.debug("do_invite_join auth_chain: %s", auth_chain)
                 logger.debug("do_invite_join state: %s", state)