summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Hodgson <matthew@arasphere.net>2018-09-25 00:49:26 +0100
committerGitHub <noreply@github.com>2018-09-25 00:49:26 +0100
commit787d22ed6cbc8f78fed7e316d345e54b7c6a93da (patch)
tree210fe42e199a3f64cd920958463355e9a4862897
parentMerge branch 'master' into develop (diff)
downloadsynapse-787d22ed6cbc8f78fed7e316d345e54b7c6a93da.tar.xz
Only lazy load self-members on initial sync
Given we have disabled lazy loading for incr syncs in #3840, we can make self-LL more efficient by only doing it on initial sync.  Also adds a bounds check for if/when we change our mind, so that we don't try to include LL members on sync responses with no timeline.
-rw-r--r--changelog.d/3936.bugfix1
-rw-r--r--synapse/handlers/sync.py13
2 files changed, 9 insertions, 5 deletions
diff --git a/changelog.d/3936.bugfix b/changelog.d/3936.bugfix
new file mode 100644
index 0000000000..49b02b9e27
--- /dev/null
+++ b/changelog.d/3936.bugfix
@@ -0,0 +1 @@
+Fix out-of-bounds error when LLing yourself
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index b598916b21..c7d69d9d80 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -713,10 +713,6 @@ class SyncHandler(object):
                     )
                 ]
 
-                # always make sure we LL ourselves so we know we're in the room
-                # (if we are), to fix https://github.com/vector-im/riot-web/issues/7209
-                types.append((EventTypes.Member, sync_config.user.to_string()))
-
                 # only apply the filtering to room members
                 filtered_types = [EventTypes.Member]
 
@@ -726,6 +722,13 @@ class SyncHandler(object):
             }
 
             if full_state:
+                if lazy_load_members:
+                    # always make sure we LL ourselves so we know we're in the room
+                    # (if we are) to fix https://github.com/vector-im/riot-web/issues/7209
+                    # We only need apply this on full state syncs given we disabled
+                    # LL for incr syncs in #3840.
+                    types.append((EventTypes.Member, sync_config.user.to_string()))
+
                 if batch:
                     current_state_ids = yield self.store.get_state_ids_for_event(
                         batch.events[-1].event_id, types=types,
@@ -794,7 +797,7 @@ class SyncHandler(object):
             else:
                 state_ids = {}
                 if lazy_load_members:
-                    if types:
+                    if types and batch.events:
                         # We're returning an incremental sync, with no
                         # "gap" since the previous sync, so normally there would be
                         # no state to return.