mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-03 02:44:53 -04:00
Port to use state storage
This commit is contained in:
parent
5db03535d5
commit
69f0054ce6
19 changed files with 216 additions and 115 deletions
|
@ -35,6 +35,7 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
self.store = hs.get_datastore()
|
||||
self.storage = hs.get_storage()
|
||||
self.state_datastore = self.store
|
||||
self.event_builder_factory = hs.get_event_builder_factory()
|
||||
self.event_creation_handler = hs.get_event_creation_handler()
|
||||
|
||||
|
@ -83,7 +84,7 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
self.room, self.u_alice, EventTypes.Name, "", {"name": "test room"}
|
||||
)
|
||||
|
||||
state_group_map = yield self.store.get_state_groups_ids(
|
||||
state_group_map = yield self.storage.state.get_state_groups_ids(
|
||||
self.room, [e2.event_id]
|
||||
)
|
||||
self.assertEqual(len(state_group_map), 1)
|
||||
|
@ -102,7 +103,9 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
self.room, self.u_alice, EventTypes.Name, "", {"name": "test room"}
|
||||
)
|
||||
|
||||
state_group_map = yield self.store.get_state_groups(self.room, [e2.event_id])
|
||||
state_group_map = yield self.storage.state.get_state_groups(
|
||||
self.room, [e2.event_id]
|
||||
)
|
||||
self.assertEqual(len(state_group_map), 1)
|
||||
state_list = list(state_group_map.values())[0]
|
||||
|
||||
|
@ -142,7 +145,7 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
)
|
||||
|
||||
# check we get the full state as of the final event
|
||||
state = yield self.store.get_state_for_event(e5.event_id)
|
||||
state = yield self.storage.state.get_state_for_event(e5.event_id)
|
||||
|
||||
self.assertIsNotNone(e4)
|
||||
|
||||
|
@ -158,21 +161,21 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
)
|
||||
|
||||
# check we can filter to the m.room.name event (with a '' state key)
|
||||
state = yield self.store.get_state_for_event(
|
||||
state = yield self.storage.state.get_state_for_event(
|
||||
e5.event_id, StateFilter.from_types([(EventTypes.Name, "")])
|
||||
)
|
||||
|
||||
self.assertStateMapEqual({(e2.type, e2.state_key): e2}, state)
|
||||
|
||||
# check we can filter to the m.room.name event (with a wildcard None state key)
|
||||
state = yield self.store.get_state_for_event(
|
||||
state = yield self.storage.state.get_state_for_event(
|
||||
e5.event_id, StateFilter.from_types([(EventTypes.Name, None)])
|
||||
)
|
||||
|
||||
self.assertStateMapEqual({(e2.type, e2.state_key): e2}, state)
|
||||
|
||||
# check we can grab the m.room.member events (with a wildcard None state key)
|
||||
state = yield self.store.get_state_for_event(
|
||||
state = yield self.storage.state.get_state_for_event(
|
||||
e5.event_id, StateFilter.from_types([(EventTypes.Member, None)])
|
||||
)
|
||||
|
||||
|
@ -182,7 +185,7 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
# check we can grab a specific room member without filtering out the
|
||||
# other event types
|
||||
state = yield self.store.get_state_for_event(
|
||||
state = yield self.storage.state.get_state_for_event(
|
||||
e5.event_id,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {self.u_alice.to_string()}},
|
||||
|
@ -200,7 +203,7 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
)
|
||||
|
||||
# check that we can grab everything except members
|
||||
state = yield self.store.get_state_for_event(
|
||||
state = yield self.storage.state.get_state_for_event(
|
||||
e5.event_id,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: set()}, include_others=True
|
||||
|
@ -216,13 +219,18 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
#######################################################
|
||||
|
||||
room_id = self.room.to_string()
|
||||
group_ids = yield self.store.get_state_groups_ids(room_id, [e5.event_id])
|
||||
group_ids = yield self.storage.state.get_state_groups_ids(
|
||||
room_id, [e5.event_id]
|
||||
)
|
||||
group = list(group_ids.keys())[0]
|
||||
|
||||
# test _get_state_for_group_using_cache correctly filters out members
|
||||
# with types=[]
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: set()}, include_others=True
|
||||
|
@ -238,8 +246,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
state_dict,
|
||||
)
|
||||
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: set()}, include_others=True
|
||||
|
@ -251,8 +262,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
# test _get_state_for_group_using_cache correctly filters in members
|
||||
# with wildcard types
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: None}, include_others=True
|
||||
|
@ -268,8 +282,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
state_dict,
|
||||
)
|
||||
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: None}, include_others=True
|
||||
|
@ -288,8 +305,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
# test _get_state_for_group_using_cache correctly filters in members
|
||||
# with specific types
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {e5.state_key}}, include_others=True
|
||||
|
@ -305,8 +325,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
state_dict,
|
||||
)
|
||||
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {e5.state_key}}, include_others=True
|
||||
|
@ -318,8 +341,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
# test _get_state_for_group_using_cache correctly filters in members
|
||||
# with specific types
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {e5.state_key}}, include_others=False
|
||||
|
@ -332,9 +358,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
#######################################################
|
||||
# deliberately remove e2 (room name) from the _state_group_cache
|
||||
|
||||
(is_all, known_absent, state_dict_ids) = self.store._state_group_cache.get(
|
||||
group
|
||||
)
|
||||
(
|
||||
is_all,
|
||||
known_absent,
|
||||
state_dict_ids,
|
||||
) = self.state_datastore._state_group_cache.get(group)
|
||||
|
||||
self.assertEqual(is_all, True)
|
||||
self.assertEqual(known_absent, set())
|
||||
|
@ -347,18 +375,20 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
)
|
||||
|
||||
state_dict_ids.pop((e2.type, e2.state_key))
|
||||
self.store._state_group_cache.invalidate(group)
|
||||
self.store._state_group_cache.update(
|
||||
sequence=self.store._state_group_cache.sequence,
|
||||
self.state_datastore._state_group_cache.invalidate(group)
|
||||
self.state_datastore._state_group_cache.update(
|
||||
sequence=self.state_datastore._state_group_cache.sequence,
|
||||
key=group,
|
||||
value=state_dict_ids,
|
||||
# list fetched keys so it knows it's partial
|
||||
fetched_keys=((e1.type, e1.state_key),),
|
||||
)
|
||||
|
||||
(is_all, known_absent, state_dict_ids) = self.store._state_group_cache.get(
|
||||
group
|
||||
)
|
||||
(
|
||||
is_all,
|
||||
known_absent,
|
||||
state_dict_ids,
|
||||
) = self.state_datastore._state_group_cache.get(group)
|
||||
|
||||
self.assertEqual(is_all, False)
|
||||
self.assertEqual(known_absent, set([(e1.type, e1.state_key)]))
|
||||
|
@ -370,8 +400,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
# test _get_state_for_group_using_cache correctly filters out members
|
||||
# with types=[]
|
||||
room_id = self.room.to_string()
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: set()}, include_others=True
|
||||
|
@ -382,8 +415,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
self.assertDictEqual({(e1.type, e1.state_key): e1.event_id}, state_dict)
|
||||
|
||||
room_id = self.room.to_string()
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: set()}, include_others=True
|
||||
|
@ -395,8 +431,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
# test _get_state_for_group_using_cache correctly filters in members
|
||||
# wildcard types
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: None}, include_others=True
|
||||
|
@ -406,8 +445,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
self.assertEqual(is_all, False)
|
||||
self.assertDictEqual({(e1.type, e1.state_key): e1.event_id}, state_dict)
|
||||
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: None}, include_others=True
|
||||
|
@ -425,8 +467,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
# test _get_state_for_group_using_cache correctly filters in members
|
||||
# with specific types
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {e5.state_key}}, include_others=True
|
||||
|
@ -436,8 +481,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
self.assertEqual(is_all, False)
|
||||
self.assertDictEqual({(e1.type, e1.state_key): e1.event_id}, state_dict)
|
||||
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {e5.state_key}}, include_others=True
|
||||
|
@ -449,8 +497,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
|
||||
# test _get_state_for_group_using_cache correctly filters in members
|
||||
# with specific types
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {e5.state_key}}, include_others=False
|
||||
|
@ -460,8 +511,11 @@ class StateStoreTestCase(tests.unittest.TestCase):
|
|||
self.assertEqual(is_all, False)
|
||||
self.assertDictEqual({}, state_dict)
|
||||
|
||||
(state_dict, is_all) = yield self.store._get_state_for_group_using_cache(
|
||||
self.store._state_group_members_cache,
|
||||
(
|
||||
state_dict,
|
||||
is_all,
|
||||
) = yield self.state_datastore._get_state_for_group_using_cache(
|
||||
self.state_datastore._state_group_members_cache,
|
||||
group,
|
||||
state_filter=StateFilter(
|
||||
types={EventTypes.Member: {e5.state_key}}, include_others=False
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue