Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit e03d7c5

Browse files
authored
Remove support for the unstable dir flag on relations. (#14106)
From MSC3715, this was unused by clients (and there was no way for clients to know it was supported). Matrix 1.4 defines the stable field.
1 parent ab8047b commit e03d7c5

File tree

5 files changed

+31
-57
lines changed

5 files changed

+31
-57
lines changed

changelog.d/14106.removal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Remove the unstable identifier for [MSC3715](https://github.com/matrix-org/matrix-doc/pull/3715).

synapse/config/experimental.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,6 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
100100
# MSC3773: Thread notifications
101101
self.msc3773_enabled: bool = experimental.get("msc3773_enabled", False)
102102

103-
# MSC3715: dir param on /relations.
104-
self.msc3715_enabled: bool = experimental.get("msc3715_enabled", False)
105-
106103
# MSC3848: Introduce errcodes for specific event sending failures
107104
self.msc3848_enabled: bool = experimental.get("msc3848_enabled", False)
108105

synapse/handlers/relations.py

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from synapse.events import EventBase, relation_from_event
2222
from synapse.logging.opentracing import trace
2323
from synapse.storage.databases.main.relations import _RelatedEvent
24+
from synapse.streams.config import PaginationConfig
2425
from synapse.types import JsonDict, Requester, StreamToken, UserID
2526
from synapse.visibility import filter_events_for_client
2627

@@ -72,13 +73,10 @@ async def get_relations(
7273
requester: Requester,
7374
event_id: str,
7475
room_id: str,
76+
pagin_config: PaginationConfig,
77+
include_original_event: bool,
7578
relation_type: Optional[str] = None,
7679
event_type: Optional[str] = None,
77-
limit: int = 5,
78-
direction: str = "b",
79-
from_token: Optional[StreamToken] = None,
80-
to_token: Optional[StreamToken] = None,
81-
include_original_event: bool = False,
8280
) -> JsonDict:
8381
"""Get related events of a event, ordered by topological ordering.
8482
@@ -88,14 +86,10 @@ async def get_relations(
8886
requester: The user requesting the relations.
8987
event_id: Fetch events that relate to this event ID.
9088
room_id: The room the event belongs to.
89+
pagin_config: The pagination config rules to apply, if any.
90+
include_original_event: Whether to include the parent event.
9191
relation_type: Only fetch events with this relation type, if given.
9292
event_type: Only fetch events with this event type, if given.
93-
limit: Only fetch the most recent `limit` events.
94-
direction: Whether to fetch the most recent first (`"b"`) or the
95-
oldest first (`"f"`).
96-
from_token: Fetch rows from the given token, or from the start if None.
97-
to_token: Fetch rows up to the given token, or up to the end if None.
98-
include_original_event: Whether to include the parent event.
9993
10094
Returns:
10195
The pagination chunk.
@@ -114,6 +108,9 @@ async def get_relations(
114108
if event is None:
115109
raise SynapseError(404, "Unknown parent event.")
116110

111+
# TODO Update pagination config to not allow None limits.
112+
assert pagin_config.limit is not None
113+
117114
# Note that ignored users are not passed into get_relations_for_event
118115
# below. Ignored users are handled in filter_events_for_client (and by
119116
# not passing them in here we should get a better cache hit rate).
@@ -123,10 +120,10 @@ async def get_relations(
123120
room_id=room_id,
124121
relation_type=relation_type,
125122
event_type=event_type,
126-
limit=limit,
127-
direction=direction,
128-
from_token=from_token,
129-
to_token=to_token,
123+
limit=pagin_config.limit,
124+
direction=pagin_config.direction,
125+
from_token=pagin_config.from_token,
126+
to_token=pagin_config.to_token,
130127
)
131128

132129
events = await self._main_store.get_events_as_list(
@@ -162,8 +159,10 @@ async def get_relations(
162159
if next_token:
163160
return_value["next_batch"] = await next_token.to_string(self._main_store)
164161

165-
if from_token:
166-
return_value["prev_batch"] = await from_token.to_string(self._main_store)
162+
if pagin_config.from_token:
163+
return_value["prev_batch"] = await pagin_config.from_token.to_string(
164+
self._main_store
165+
)
167166

168167
return return_value
169168

synapse/rest/client/relations.py

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
from typing import TYPE_CHECKING, Optional, Tuple
1717

1818
from synapse.http.server import HttpServer
19-
from synapse.http.servlet import RestServlet, parse_integer, parse_string
19+
from synapse.http.servlet import RestServlet
2020
from synapse.http.site import SynapseRequest
2121
from synapse.rest.client._base import client_patterns
22-
from synapse.types import JsonDict, StreamToken
22+
from synapse.streams.config import PaginationConfig
23+
from synapse.types import JsonDict
2324

2425
if TYPE_CHECKING:
2526
from synapse.server import HomeServer
@@ -41,9 +42,8 @@ class RelationPaginationServlet(RestServlet):
4142
def __init__(self, hs: "HomeServer"):
4243
super().__init__()
4344
self.auth = hs.get_auth()
44-
self.store = hs.get_datastores().main
45+
self._store = hs.get_datastores().main
4546
self._relations_handler = hs.get_relations_handler()
46-
self._msc3715_enabled = hs.config.experimental.msc3715_enabled
4747

4848
async def on_GET(
4949
self,
@@ -55,49 +55,24 @@ async def on_GET(
5555
) -> Tuple[int, JsonDict]:
5656
requester = await self.auth.get_user_by_req(request, allow_guest=True)
5757

58-
limit = parse_integer(request, "limit", default=5)
59-
# Fetch the direction parameter, if provided.
60-
#
61-
# TODO Use PaginationConfig.from_request when the unstable parameter is
62-
# no longer needed.
63-
direction = parse_string(request, "dir", allowed_values=["f", "b"])
64-
if direction is None:
65-
if self._msc3715_enabled:
66-
direction = parse_string(
67-
request,
68-
"org.matrix.msc3715.dir",
69-
default="b",
70-
allowed_values=["f", "b"],
71-
)
72-
else:
73-
direction = "b"
74-
from_token_str = parse_string(request, "from")
75-
to_token_str = parse_string(request, "to")
76-
77-
# Return the relations
78-
from_token = None
79-
if from_token_str:
80-
from_token = await StreamToken.from_string(self.store, from_token_str)
81-
to_token = None
82-
if to_token_str:
83-
to_token = await StreamToken.from_string(self.store, to_token_str)
58+
pagination_config = await PaginationConfig.from_request(
59+
self._store, request, default_limit=5, default_dir="b"
60+
)
8461

8562
# The unstable version of this API returns an extra field for client
8663
# compatibility, see https://github.com/matrix-org/synapse/issues/12930.
8764
assert request.path is not None
8865
include_original_event = request.path.startswith(b"/_matrix/client/unstable/")
8966

67+
# Return the relations
9068
result = await self._relations_handler.get_relations(
9169
requester=requester,
9270
event_id=parent_id,
9371
room_id=room_id,
72+
pagin_config=pagination_config,
73+
include_original_event=include_original_event,
9474
relation_type=relation_type,
9575
event_type=event_type,
96-
limit=limit,
97-
direction=direction,
98-
from_token=from_token,
99-
to_token=to_token,
100-
include_original_event=include_original_event,
10176
)
10277

10378
return 200, result

synapse/streams/config.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ async def from_request(
4242
cls,
4343
store: "DataStore",
4444
request: SynapseRequest,
45-
raise_invalid_params: bool = True,
4645
default_limit: Optional[int] = None,
46+
default_dir: str = "f",
4747
) -> "PaginationConfig":
48-
direction = parse_string(request, "dir", default="f", allowed_values=["f", "b"])
48+
direction = parse_string(
49+
request, "dir", default=default_dir, allowed_values=["f", "b"]
50+
)
4951

5052
from_tok_str = parse_string(request, "from")
5153
to_tok_str = parse_string(request, "to")

0 commit comments

Comments
 (0)