From dddf20e8e146bb77be449e791a98ec24018c35d9 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 24 Jun 2019 10:06:51 +0100 Subject: [PATCH 1/2] Fix /messages on workers when no from param specified. If no `from` param is specified we calculate and use the "current token" that inlcuded typing, presence, etc. These are unused during pagination and are not available on workers, so we simply don't calculate them. --- synapse/handlers/pagination.py | 4 +--- synapse/streams/events.py | 32 ++++++++++++++++++-------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/synapse/handlers/pagination.py b/synapse/handlers/pagination.py index 062e026e5f94..76ee97ddd323 100644 --- a/synapse/handlers/pagination.py +++ b/synapse/handlers/pagination.py @@ -180,9 +180,7 @@ def get_messages( room_token = pagin_config.from_token.room_key else: pagin_config.from_token = ( - yield self.hs.get_event_sources().get_current_token_for_room( - room_id=room_id - ) + yield self.hs.get_event_sources().get_current_token_for_pagination() ) room_token = pagin_config.from_token.room_key diff --git a/synapse/streams/events.py b/synapse/streams/events.py index 9b416f2f40ab..488c49747ad4 100644 --- a/synapse/streams/events.py +++ b/synapse/streams/events.py @@ -59,21 +59,25 @@ def get_current_token(self): defer.returnValue(token) @defer.inlineCallbacks - def get_current_token_for_room(self, room_id): - push_rules_key, _ = self.store.get_push_rules_stream_token() - to_device_key = self.store.get_to_device_stream_token() - device_list_key = self.store.get_device_stream_token() - groups_key = self.store.get_group_stream_token() + def get_current_token_for_pagination(self): + """Get the current token for a given room to be used to paginate + events. + The returned token does not have the current values for fields other + than `room`, since they are not used during pagination. + + Retuns: + Deferred[StreamToken] + """ token = StreamToken( - room_key=(yield self.sources["room"].get_current_key_for_room(room_id)), - presence_key=(yield self.sources["presence"].get_current_key()), - typing_key=(yield self.sources["typing"].get_current_key()), - receipt_key=(yield self.sources["receipt"].get_current_key()), - account_data_key=(yield self.sources["account_data"].get_current_key()), - push_rules_key=push_rules_key, - to_device_key=to_device_key, - device_list_key=device_list_key, - groups_key=groups_key, + room_key=(yield self.sources["room"].get_current_key()), + presence_key=0, + typing_key=0, + receipt_key=0, + account_data_key=0, + push_rules_key=0, + to_device_key=0, + device_list_key=0, + groups_key=0, ) defer.returnValue(token) From 14aff5cc0d85745f2cbe8d353c6b2696034e7a2d Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 24 Jun 2019 10:22:34 +0100 Subject: [PATCH 2/2] Newsfile --- changelog.d/5531.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/5531.feature diff --git a/changelog.d/5531.feature b/changelog.d/5531.feature new file mode 100644 index 000000000000..5c6bab2c3117 --- /dev/null +++ b/changelog.d/5531.feature @@ -0,0 +1 @@ +Add support for handling pagination APIs on client reader worker.