Add cache to _get_state_groups_from_groups
This commit is contained in:
parent
6ac40f7b65
commit
61c7edfd34
|
@ -174,6 +174,12 @@ class StateStore(SQLBaseStore):
|
||||||
return [r[0] for r in results]
|
return [r[0] for r in results]
|
||||||
return self.runInteraction("get_current_state_for_key", f)
|
return self.runInteraction("get_current_state_for_key", f)
|
||||||
|
|
||||||
|
@cached(num_args=2, lru=True, max_entries=1000)
|
||||||
|
def _get_state_group_from_group(self, group, types):
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
@cachedList(cached_method_name="_get_state_group_from_group",
|
||||||
|
list_name="groups", num_args=2, inlineCallbacks=True)
|
||||||
def _get_state_groups_from_groups(self, groups, types):
|
def _get_state_groups_from_groups(self, groups, types):
|
||||||
"""Returns dictionary state_group -> (dict of (type, state_key) -> event id)
|
"""Returns dictionary state_group -> (dict of (type, state_key) -> event id)
|
||||||
"""
|
"""
|
||||||
|
@ -201,18 +207,23 @@ class StateStore(SQLBaseStore):
|
||||||
txn.execute(sql, args)
|
txn.execute(sql, args)
|
||||||
rows = self.cursor_to_dict(txn)
|
rows = self.cursor_to_dict(txn)
|
||||||
|
|
||||||
results = {}
|
results = {group: {} for group in groups}
|
||||||
for row in rows:
|
for row in rows:
|
||||||
key = (row["type"], row["state_key"])
|
key = (row["type"], row["state_key"])
|
||||||
results.setdefault(row["state_group"], {})[key] = row["event_id"]
|
results[row["state_group"]][key] = row["event_id"]
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
results = {}
|
||||||
|
|
||||||
chunks = [groups[i:i + 100] for i in xrange(0, len(groups), 100)]
|
chunks = [groups[i:i + 100] for i in xrange(0, len(groups), 100)]
|
||||||
for chunk in chunks:
|
for chunk in chunks:
|
||||||
return self.runInteraction(
|
res = yield self.runInteraction(
|
||||||
"_get_state_groups_from_groups",
|
"_get_state_groups_from_groups",
|
||||||
f, chunk
|
f, chunk
|
||||||
)
|
)
|
||||||
|
results.update(res)
|
||||||
|
|
||||||
|
defer.returnValue(results)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_state_for_events(self, event_ids, types):
|
def get_state_for_events(self, event_ids, types):
|
||||||
|
@ -359,6 +370,8 @@ class StateStore(SQLBaseStore):
|
||||||
a `state_key` of None matches all state_keys. If `types` is None then
|
a `state_key` of None matches all state_keys. If `types` is None then
|
||||||
all events are returned.
|
all events are returned.
|
||||||
"""
|
"""
|
||||||
|
if types:
|
||||||
|
types = frozenset(types)
|
||||||
results = {}
|
results = {}
|
||||||
missing_groups = []
|
missing_groups = []
|
||||||
if types is not None:
|
if types is not None:
|
||||||
|
|
Loading…
Reference in New Issue