diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2020-09-07 16:48:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-07 16:48:52 +0100 |
commit | ef2804d27c766595f9eae134422652d1d32df9a6 (patch) | |
tree | a4e331a24dbe5595463599c4cf23849f6ab76a3f /synapse/storage/databases | |
parent | Fix unread count failing on NULL values (#8270) (diff) | |
download | synapse-ef2804d27c766595f9eae134422652d1d32df9a6.tar.xz |
Avoid table-scanning users at startup (#8271)
This takes about 10 seconds in the best case; often more.
Diffstat (limited to 'synapse/storage/databases')
-rw-r--r-- | synapse/storage/databases/main/__init__.py | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/synapse/storage/databases/main/__init__.py b/synapse/storage/databases/main/__init__.py index b315ae66d2..2ae2fbd5d7 100644 --- a/synapse/storage/databases/main/__init__.py +++ b/synapse/storage/databases/main/__init__.py @@ -29,6 +29,7 @@ from synapse.storage.util.id_generators import ( MultiWriterIdGenerator, StreamIdGenerator, ) +from synapse.types import get_domain_from_id from synapse.util.caches.stream_change_cache import StreamChangeCache from .account_data import AccountDataStore @@ -591,22 +592,24 @@ def check_database_before_upgrade(cur, database_engine, config: HomeServerConfig """Called before upgrading an existing database to check that it is broadly sane compared with the configuration. """ - logger.info("Running sanity-checks on database...") - domain = config.server_name + logger.info("Checking database for consistency with configuration...") - sql = database_engine.convert_param_style( - "SELECT COUNT(*) FROM users WHERE name NOT LIKE ?" - ) - pat = "%:" + domain - cur.execute(sql, (pat,)) - num_not_matching = cur.fetchall()[0][0] - if num_not_matching == 0: + # if there are any users in the database, check that the username matches our + # configured server name. + + cur.execute("SELECT name FROM users LIMIT 1") + rows = cur.fetchall() + if not rows: + return + + user_domain = get_domain_from_id(rows[0][0]) + if user_domain == config.server_name: return raise Exception( "Found users in database not native to %s!\n" - "You cannot changed a synapse server_name after it's been configured" - % (domain,) + "You cannot change a synapse server_name after it's been configured" + % (config.server_name,) ) |