diff options
author | Erik Johnston <erik@matrix.org> | 2017-03-10 17:39:35 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2017-03-10 17:39:35 +0000 |
commit | 8ffbe43ba11c925322af06f4d12b076754aeac56 (patch) | |
tree | cf3fd898d16b1028806d7d30d2d1f7ff156d9f24 /synapse/storage/state.py | |
parent | Merge pull request #1976 from matrix-org/erikj/device_delete_sync (diff) | |
download | synapse-8ffbe43ba11c925322af06f4d12b076754aeac56.tar.xz |
Get current state by using current_state_events table
Diffstat (limited to 'synapse/storage/state.py')
-rw-r--r-- | synapse/storage/state.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/synapse/storage/state.py b/synapse/storage/state.py index 84482d8285..27f1ec89ec 100644 --- a/synapse/storage/state.py +++ b/synapse/storage/state.py @@ -14,7 +14,7 @@ # limitations under the License. from ._base import SQLBaseStore -from synapse.util.caches.descriptors import cached, cachedList +from synapse.util.caches.descriptors import cached, cachedList, cachedInlineCallbacks from synapse.util.caches import intern_string from synapse.storage.engines import PostgresEngine @@ -69,6 +69,18 @@ class StateStore(SQLBaseStore): where_clause="type='m.room.member'", ) + @cachedInlineCallbacks(max_entries=100000, iterable=True) + def get_current_state_ids(self, room_id): + rows = yield self._simple_select_list( + table="current_state_events", + keyvalues={"room_id": room_id}, + retcols=["event_id", "type", "state_key"], + desc="_calculate_state_delta", + ) + defer.returnValue({ + (r["type"], r["state_key"]): r["event_id"] for r in rows + }) + @defer.inlineCallbacks def get_state_groups_ids(self, room_id, event_ids): if not event_ids: |