Merge pull request #2108 from matrix-org/erikj/current_state_ids

Speed up get_current_state_ids
pull/2084/merge
Erik Johnston 2017-04-07 14:20:16 +01:00 committed by GitHub
commit 0cd01f5c9c
1 changed files with 26 additions and 10 deletions

View File

@ -14,7 +14,7 @@
# limitations under the License. # limitations under the License.
from ._base import SQLBaseStore from ._base import SQLBaseStore
from synapse.util.caches.descriptors import cached, cachedList, cachedInlineCallbacks from synapse.util.caches.descriptors import cached, cachedList
from synapse.util.caches import intern_string from synapse.util.caches import intern_string
from synapse.storage.engines import PostgresEngine from synapse.storage.engines import PostgresEngine
@ -69,17 +69,33 @@ class StateStore(SQLBaseStore):
where_clause="type='m.room.member'", where_clause="type='m.room.member'",
) )
@cachedInlineCallbacks(max_entries=100000, iterable=True) @cached(max_entries=100000, iterable=True)
def get_current_state_ids(self, room_id): def get_current_state_ids(self, room_id):
rows = yield self._simple_select_list( """Get the current state event ids for a room based on the
table="current_state_events", current_state_events table.
keyvalues={"room_id": room_id},
retcols=["event_id", "type", "state_key"], Args:
desc="_calculate_state_delta", room_id (str)
Returns:
deferred: dict of (type, state_key) -> event_id
"""
def _get_current_state_ids_txn(txn):
txn.execute(
"""SELECT type, state_key, event_id FROM current_state_events
WHERE room_id = ?
""",
(room_id,)
)
return {
(r[0], r[1]): r[2] for r in txn
}
return self.runInteraction(
"get_current_state_ids",
_get_current_state_ids_txn,
) )
defer.returnValue({
(r["type"], r["state_key"]): r["event_id"] for r in rows
})
@defer.inlineCallbacks @defer.inlineCallbacks
def get_state_groups_ids(self, room_id, event_ids): def get_state_groups_ids(self, room_id, event_ids):