Skip to content

Commit 28a948f

Browse files
Removed request_key from the SyncConfig (moved outside as its own function parameter) (#17201)
Removed `request_key` from the `SyncConfig` (moved outside as its own function parameter) so it doesn't have to flow into `_generate_sync_entry_for_xxx` methods. This way we can separate the concerns of caching from generating the response and reuse the `_generate_sync_entry_for_xxx` functions as we see fit. Plus caching doesn't really have anything to do with the config of sync. Split from #17167 Spawning from #17167 (comment)
1 parent 7cb3f8a commit 28a948f

File tree

5 files changed

+59
-14
lines changed

5 files changed

+59
-14
lines changed

changelog.d/17201.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Organize the sync cache key parameter outside of the sync config (separate concerns).

synapse/handlers/sync.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ class SyncConfig:
135135
user: UserID
136136
filter_collection: FilterCollection
137137
is_guest: bool
138-
request_key: SyncRequestKey
139138
device_id: Optional[str]
140139

141140

@@ -328,6 +327,7 @@ async def wait_for_sync_for_user(
328327
requester: Requester,
329328
sync_config: SyncConfig,
330329
sync_version: SyncVersion,
330+
request_key: SyncRequestKey,
331331
since_token: Optional[StreamToken] = None,
332332
timeout: int = 0,
333333
full_state: bool = False,
@@ -340,10 +340,10 @@ async def wait_for_sync_for_user(
340340
requester: The user requesting the sync response.
341341
sync_config: Config/info necessary to process the sync request.
342342
sync_version: Determines what kind of sync response to generate.
343+
request_key: The key to use for caching the response.
343344
since_token: The point in the stream to sync from.
344345
timeout: How long to wait for new data to arrive before giving up.
345346
full_state: Whether to return the full state for each room.
346-
347347
Returns:
348348
When `SyncVersion.SYNC_V2`, returns a full `SyncResult`.
349349
"""
@@ -354,7 +354,7 @@ async def wait_for_sync_for_user(
354354
await self.auth_blocking.check_auth_blocking(requester=requester)
355355

356356
res = await self.response_cache.wrap(
357-
sync_config.request_key,
357+
request_key,
358358
self._wait_for_sync_for_user,
359359
sync_config,
360360
sync_version,

synapse/rest/client/sync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
210210
user=user,
211211
filter_collection=filter_collection,
212212
is_guest=requester.is_guest,
213-
request_key=request_key,
214213
device_id=device_id,
215214
)
216215

@@ -234,6 +233,7 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
234233
requester,
235234
sync_config,
236235
SyncVersion.SYNC_V2,
236+
request_key,
237237
since_token=since_token,
238238
timeout=timeout,
239239
full_state=full_state,

tests/events/test_presence_router.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from synapse.types import JsonDict, StreamToken, create_requester
3737
from synapse.util import Clock
3838

39-
from tests.handlers.test_sync import SyncVersion, generate_sync_config
39+
from tests.handlers.test_sync import SyncRequestKey, SyncVersion, generate_sync_config
4040
from tests.unittest import (
4141
FederatingHomeserverTestCase,
4242
HomeserverTestCase,
@@ -498,6 +498,15 @@ def send_presence_update(
498498
return channel.json_body
499499

500500

501+
_request_key = 0
502+
503+
504+
def generate_request_key() -> SyncRequestKey:
505+
global _request_key
506+
_request_key += 1
507+
return ("request_key", _request_key)
508+
509+
501510
def sync_presence(
502511
testcase: HomeserverTestCase,
503512
user_id: str,
@@ -521,7 +530,11 @@ def sync_presence(
521530
sync_config = generate_sync_config(requester.user.to_string())
522531
sync_result = testcase.get_success(
523532
testcase.hs.get_sync_handler().wait_for_sync_for_user(
524-
requester, sync_config, SyncVersion.SYNC_V2, since_token
533+
requester,
534+
sync_config,
535+
SyncVersion.SYNC_V2,
536+
generate_request_key(),
537+
since_token,
525538
)
526539
)
527540

tests/handlers/test_sync.py

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from synapse.events import EventBase
3232
from synapse.events.snapshot import EventContext
3333
from synapse.federation.federation_base import event_from_pdu_json
34-
from synapse.handlers.sync import SyncConfig, SyncResult, SyncVersion
34+
from synapse.handlers.sync import SyncConfig, SyncRequestKey, SyncResult, SyncVersion
3535
from synapse.rest import admin
3636
from synapse.rest.client import knock, login, room
3737
from synapse.server import HomeServer
@@ -41,6 +41,14 @@
4141
import tests.unittest
4242
import tests.utils
4343

44+
_request_key = 0
45+
46+
47+
def generate_request_key() -> SyncRequestKey:
48+
global _request_key
49+
_request_key += 1
50+
return ("request_key", _request_key)
51+
4452

4553
class SyncTestCase(tests.unittest.HomeserverTestCase):
4654
"""Tests Sync Handler."""
@@ -77,6 +85,7 @@ def test_wait_for_sync_for_user_auth_blocking(self) -> None:
7785
requester,
7886
sync_config,
7987
sync_version=SyncVersion.SYNC_V2,
88+
request_key=generate_request_key(),
8089
)
8190
)
8291

@@ -87,6 +96,7 @@ def test_wait_for_sync_for_user_auth_blocking(self) -> None:
8796
requester,
8897
sync_config,
8998
sync_version=SyncVersion.SYNC_V2,
99+
request_key=generate_request_key(),
90100
),
91101
ResourceLimitError,
92102
)
@@ -102,6 +112,7 @@ def test_wait_for_sync_for_user_auth_blocking(self) -> None:
102112
requester,
103113
sync_config,
104114
sync_version=SyncVersion.SYNC_V2,
115+
request_key=generate_request_key(),
105116
),
106117
ResourceLimitError,
107118
)
@@ -124,6 +135,7 @@ def test_unknown_room_version(self) -> None:
124135
requester,
125136
sync_config=generate_sync_config(user, device_id="dev"),
126137
sync_version=SyncVersion.SYNC_V2,
138+
request_key=generate_request_key(),
127139
)
128140
)
129141

@@ -157,6 +169,7 @@ def test_unknown_room_version(self) -> None:
157169
requester,
158170
sync_config=generate_sync_config(user),
159171
sync_version=SyncVersion.SYNC_V2,
172+
request_key=generate_request_key(),
160173
)
161174
)
162175
self.assertIn(joined_room, [r.room_id for r in result.joined])
@@ -169,6 +182,7 @@ def test_unknown_room_version(self) -> None:
169182
requester,
170183
sync_config=generate_sync_config(user, device_id="dev"),
171184
sync_version=SyncVersion.SYNC_V2,
185+
request_key=generate_request_key(),
172186
since_token=initial_result.next_batch,
173187
)
174188
)
@@ -200,6 +214,7 @@ def test_unknown_room_version(self) -> None:
200214
requester,
201215
sync_config=generate_sync_config(user),
202216
sync_version=SyncVersion.SYNC_V2,
217+
request_key=generate_request_key(),
203218
)
204219
)
205220
self.assertNotIn(joined_room, [r.room_id for r in result.joined])
@@ -212,6 +227,7 @@ def test_unknown_room_version(self) -> None:
212227
requester,
213228
sync_config=generate_sync_config(user, device_id="dev"),
214229
sync_version=SyncVersion.SYNC_V2,
230+
request_key=generate_request_key(),
215231
since_token=initial_result.next_batch,
216232
)
217233
)
@@ -254,6 +270,7 @@ def test_ban_wins_race_with_join(self) -> None:
254270
create_requester(owner),
255271
generate_sync_config(owner),
256272
sync_version=SyncVersion.SYNC_V2,
273+
request_key=generate_request_key(),
257274
)
258275
)
259276
self.assertEqual(len(alice_sync_result.joined), 1)
@@ -277,6 +294,7 @@ def test_ban_wins_race_with_join(self) -> None:
277294
eve_requester,
278295
eve_sync_config,
279296
sync_version=SyncVersion.SYNC_V2,
297+
request_key=generate_request_key(),
280298
)
281299
)
282300

@@ -295,6 +313,7 @@ def test_ban_wins_race_with_join(self) -> None:
295313
eve_requester,
296314
eve_sync_config,
297315
sync_version=SyncVersion.SYNC_V2,
316+
request_key=generate_request_key(),
298317
since_token=eve_sync_after_ban.next_batch,
299318
)
300319
)
@@ -307,6 +326,7 @@ def test_ban_wins_race_with_join(self) -> None:
307326
eve_requester,
308327
eve_sync_config,
309328
sync_version=SyncVersion.SYNC_V2,
329+
request_key=generate_request_key(),
310330
since_token=None,
311331
)
312332
)
@@ -341,6 +361,7 @@ def test_state_includes_changes_on_forks(self) -> None:
341361
alice_requester,
342362
generate_sync_config(alice),
343363
sync_version=SyncVersion.SYNC_V2,
364+
request_key=generate_request_key(),
344365
)
345366
)
346367
last_room_creation_event_id = (
@@ -369,6 +390,7 @@ def test_state_includes_changes_on_forks(self) -> None:
369390
),
370391
),
371392
sync_version=SyncVersion.SYNC_V2,
393+
request_key=generate_request_key(),
372394
since_token=initial_sync_result.next_batch,
373395
)
374396
)
@@ -414,6 +436,7 @@ def test_state_includes_changes_on_forks_when_events_excluded(self) -> None:
414436
alice_requester,
415437
generate_sync_config(alice),
416438
sync_version=SyncVersion.SYNC_V2,
439+
request_key=generate_request_key(),
417440
)
418441
)
419442
last_room_creation_event_id = (
@@ -452,6 +475,7 @@ def test_state_includes_changes_on_forks_when_events_excluded(self) -> None:
452475
),
453476
),
454477
sync_version=SyncVersion.SYNC_V2,
478+
request_key=generate_request_key(),
455479
since_token=initial_sync_result.next_batch,
456480
)
457481
)
@@ -498,6 +522,7 @@ def test_state_includes_changes_on_long_lived_forks(self) -> None:
498522
alice_requester,
499523
generate_sync_config(alice),
500524
sync_version=SyncVersion.SYNC_V2,
525+
request_key=generate_request_key(),
501526
)
502527
)
503528
last_room_creation_event_id = (
@@ -523,6 +548,7 @@ def test_state_includes_changes_on_long_lived_forks(self) -> None:
523548
),
524549
),
525550
sync_version=SyncVersion.SYNC_V2,
551+
request_key=generate_request_key(),
526552
since_token=initial_sync_result.next_batch,
527553
)
528554
)
@@ -553,6 +579,7 @@ def test_state_includes_changes_on_long_lived_forks(self) -> None:
553579
),
554580
),
555581
sync_version=SyncVersion.SYNC_V2,
582+
request_key=generate_request_key(),
556583
since_token=incremental_sync.next_batch,
557584
)
558585
)
@@ -615,6 +642,7 @@ def test_state_includes_changes_on_ungappy_syncs(self) -> None:
615642
alice_requester,
616643
generate_sync_config(alice),
617644
sync_version=SyncVersion.SYNC_V2,
645+
request_key=generate_request_key(),
618646
)
619647
)
620648
last_room_creation_event_id = (
@@ -639,6 +667,7 @@ def test_state_includes_changes_on_ungappy_syncs(self) -> None:
639667
),
640668
),
641669
sync_version=SyncVersion.SYNC_V2,
670+
request_key=generate_request_key(),
642671
)
643672
)
644673
room_sync = initial_sync_result.joined[0]
@@ -660,6 +689,7 @@ def test_state_includes_changes_on_ungappy_syncs(self) -> None:
660689
alice_requester,
661690
generate_sync_config(alice),
662691
sync_version=SyncVersion.SYNC_V2,
692+
request_key=generate_request_key(),
663693
since_token=initial_sync_result.next_batch,
664694
)
665695
)
@@ -713,6 +743,7 @@ def test_archived_rooms_do_not_include_state_after_leave(
713743
bob_requester,
714744
generate_sync_config(bob),
715745
sync_version=SyncVersion.SYNC_V2,
746+
request_key=generate_request_key(),
716747
)
717748
)
718749

@@ -744,6 +775,7 @@ def test_archived_rooms_do_not_include_state_after_leave(
744775
bob, filter_collection=FilterCollection(self.hs, filter_dict)
745776
),
746777
sync_version=SyncVersion.SYNC_V2,
778+
request_key=generate_request_key(),
747779
since_token=None if initial_sync else initial_sync_result.next_batch,
748780
)
749781
).archived[0]
@@ -839,6 +871,7 @@ async def _check_sigs_and_hash_for_pulled_events_and_fetch(
839871
create_requester(user),
840872
generate_sync_config(user),
841873
sync_version=SyncVersion.SYNC_V2,
874+
request_key=generate_request_key(),
842875
)
843876
)
844877
event_ids = []
@@ -887,6 +920,7 @@ async def _check_sigs_and_hash_for_pulled_events_and_fetch(
887920
create_requester(user2),
888921
generate_sync_config(user2),
889922
sync_version=SyncVersion.SYNC_V2,
923+
request_key=generate_request_key(),
890924
)
891925
)
892926
priv_event_ids = []
@@ -909,7 +943,10 @@ def test_push_rules_with_bad_account_data(self) -> None:
909943

910944
sync_result: SyncResult = self.get_success(
911945
self.sync_handler.wait_for_sync_for_user(
912-
create_requester(user), generate_sync_config(user)
946+
create_requester(user),
947+
generate_sync_config(user),
948+
sync_version=SyncVersion.SYNC_V2,
949+
request_key=generate_request_key(),
913950
)
914951
)
915952

@@ -923,9 +960,6 @@ def test_push_rules_with_bad_account_data(self) -> None:
923960
self.fail("No push rules found")
924961

925962

926-
_request_key = 0
927-
928-
929963
def generate_sync_config(
930964
user_id: str,
931965
device_id: Optional[str] = "device_id",
@@ -942,12 +976,9 @@ def generate_sync_config(
942976
if filter_collection is None:
943977
filter_collection = Filtering(Mock()).DEFAULT_FILTER_COLLECTION
944978

945-
global _request_key
946-
_request_key += 1
947979
return SyncConfig(
948980
user=UserID.from_string(user_id),
949981
filter_collection=filter_collection,
950982
is_guest=False,
951-
request_key=("request_key", _request_key),
952983
device_id=device_id,
953984
)

0 commit comments

Comments
 (0)