From 923c995023b1113f7b859f5b961a2d84666c1761 Mon Sep 17 00:00:00 2001
From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Date: Wed, 22 Jul 2020 13:44:16 +0100
Subject: [PATCH] Skip serializing /sync response if client has disconnected
 (#7927)

... it's a load of work which may be entirely redundant.
---
 changelog.d/7927.misc                | 1 +
 synapse/rest/client/v2_alpha/sync.py | 6 ++++++
 2 files changed, 7 insertions(+)
 create mode 100644 changelog.d/7927.misc

diff --git a/changelog.d/7927.misc b/changelog.d/7927.misc
new file mode 100644
index 0000000000..3b864da03d
--- /dev/null
+++ b/changelog.d/7927.misc
@@ -0,0 +1 @@
+Optimisation to /sync handling: skip serializing the response if the client has already disconnected.
diff --git a/synapse/rest/client/v2_alpha/sync.py b/synapse/rest/client/v2_alpha/sync.py
index 9d81150729..a5c24fbd63 100644
--- a/synapse/rest/client/v2_alpha/sync.py
+++ b/synapse/rest/client/v2_alpha/sync.py
@@ -178,6 +178,12 @@ class SyncRestServlet(RestServlet):
                 full_state=full_state,
             )
 
+        # the client may have disconnected by now; don't bother to serialize the
+        # response if so.
+        if request._disconnected:
+            logger.info("Client has disconnected; not serializing response.")
+            return 200, {}
+
         time_now = self.clock.time_msec()
         response_content = await self.encode_response(
             time_now, sync_result, requester.access_token_id, filter_collection
-- 
GitLab