From 68e1a872fd3f7dc3bbd8bfcfcc5e6b88b1170a77 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 30 Aug 2016 10:58:46 +0100 Subject: [PATCH 1/3] Noop get_new_messages_for_device if token hasn't changed --- synapse/handlers/sync.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 91934b0c8..8a3e04c28 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -571,15 +571,18 @@ class SyncHandler(object): user_id, device_id, since_stream_id ) - logger.debug("Getting messages up to %d", now_token.to_device_key) - messages, stream_id = yield self.store.get_new_messages_for_device( - user_id, device_id, now_token.to_device_key - ) - logger.debug("Got messages up to %d: %r", stream_id, messages) - sync_result_builder.now_token = now_token.copy_and_replace( - "to_device_key", stream_id - ) - sync_result_builder.to_device = messages + if since_stream_id and since_stream_id == int(now_token.to_device_key): + logger.debug("Getting messages up to %d", now_token.to_device_key) + messages, stream_id = yield self.store.get_new_messages_for_device( + user_id, device_id, now_token.to_device_key + ) + logger.debug("Got messages up to %d: %r", stream_id, messages) + sync_result_builder.now_token = now_token.copy_and_replace( + "to_device_key", stream_id + ) + sync_result_builder.to_device = messages + else: + sync_result_builder.to_device = [] @defer.inlineCallbacks def _generate_sync_entry_for_account_data(self, sync_result_builder): From 1ee6285905a9c7c038eba9149dbdd67c1945b2e9 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 30 Aug 2016 11:17:46 +0100 Subject: [PATCH 2/3] Fix check --- synapse/handlers/sync.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 8a3e04c28..a8f8b9a75 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -565,13 +565,12 @@ class SyncHandler(object): if sync_result_builder.since_token is not None: since_stream_id = int(sync_result_builder.since_token.to_device_key) - if since_stream_id: + if since_stream_id != int(now_token.to_device_key): logger.debug("Deleting messages up to %d", since_stream_id) yield self.store.delete_messages_for_device( user_id, device_id, since_stream_id ) - if since_stream_id and since_stream_id == int(now_token.to_device_key): logger.debug("Getting messages up to %d", now_token.to_device_key) messages, stream_id = yield self.store.get_new_messages_for_device( user_id, device_id, now_token.to_device_key From c8cd87b21bea2fc4a54353849d0b137f09654b18 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 30 Aug 2016 11:23:26 +0100 Subject: [PATCH 3/3] Comment about message deletion --- synapse/handlers/sync.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index a8f8b9a75..14f2032af 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -566,6 +566,9 @@ class SyncHandler(object): since_stream_id = int(sync_result_builder.since_token.to_device_key) if since_stream_id != int(now_token.to_device_key): + # We only delete messages when a new message comes in, but that's + # fine so long as we delete them at some point. + logger.debug("Deleting messages up to %d", since_stream_id) yield self.store.delete_messages_for_device( user_id, device_id, since_stream_id