diff options
author | Erik Johnston <erik@matrix.org> | 2019-07-30 10:00:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-30 10:00:02 +0100 |
commit | 63eb4a1b623a0f5796f2f1730c8d05bd5bdb95b9 (patch) | |
tree | 40c491e1688c253cd54e7d037181db8d5b4c06d4 | |
parent | Remove non-functional 'expire_access_token' setting (#5782) (diff) | |
parent | Newsfile (diff) | |
download | synapse-63eb4a1b623a0f5796f2f1730c8d05bd5bdb95b9.tar.xz |
Merge pull request #5746 from matrix-org/erikj/test_bg_update_currnet_state
Add unit test for current state membership bg update
-rw-r--r-- | changelog.d/5746.misc | 1 | ||||
-rw-r--r-- | tests/storage/test_roommember.py | 37 |
2 files changed, 37 insertions, 1 deletions
diff --git a/changelog.d/5746.misc b/changelog.d/5746.misc new file mode 100644 index 0000000000..5e15dfd5fa --- /dev/null +++ b/changelog.d/5746.misc @@ -0,0 +1 @@ +Reduce database IO usage by optimising queries for current membership. diff --git a/tests/storage/test_roommember.py b/tests/storage/test_roommember.py index c6e8196b91..64cb294c37 100644 --- a/tests/storage/test_roommember.py +++ b/tests/storage/test_roommember.py @@ -20,7 +20,7 @@ from twisted.internet import defer from synapse.api.constants import EventTypes, Membership from synapse.api.room_versions import RoomVersions -from synapse.types import RoomID, UserID +from synapse.types import Requester, RoomID, UserID from tests import unittest from tests.utils import create_room, setup_test_homeserver @@ -84,3 +84,38 @@ class RoomMemberStoreTestCase(unittest.TestCase): ) ], ) + + +class CurrentStateMembershipUpdateTestCase(unittest.HomeserverTestCase): + def prepare(self, reactor, clock, homeserver): + self.store = homeserver.get_datastore() + self.room_creator = homeserver.get_room_creation_handler() + + def test_can_rerun_update(self): + # First make sure we have completed all updates. + while not self.get_success(self.store.has_completed_background_updates()): + self.get_success(self.store.do_next_background_update(100), by=0.1) + + # Now let's create a room, which will insert a membership + user = UserID("alice", "test") + requester = Requester(user, None, False, None, None) + self.get_success(self.room_creator.create_room(requester, {})) + + # Register the background update to run again. + self.get_success( + self.store._simple_insert( + table="background_updates", + values={ + "update_name": "current_state_events_membership", + "progress_json": "{}", + "depends_on": None, + }, + ) + ) + + # ... and tell the DataStore that it hasn't finished all updates yet + self.store._all_done = False + + # Now let's actually drive the updates to completion + while not self.get_success(self.store.has_completed_background_updates()): + self.get_success(self.store.do_next_background_update(100), by=0.1) |