Merge pull request #2108 from matrix-org/erikj/current_state_ids
Speed up get_current_state_ids
This commit is contained in:
commit
0cd01f5c9c
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue