Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Fix upgrade script
Browse files Browse the repository at this point in the history
  • Loading branch information
erikjohnston committed Dec 6, 2019
1 parent 5878967 commit ea7ac24
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 45 deletions.
16 changes: 4 additions & 12 deletions scripts-dev/update_database
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ from synapse.config.homeserver import HomeServerConfig
from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.server import HomeServer
from synapse.storage import DataStore
from synapse.storage.engines import create_engine
from synapse.storage.prepare_database import prepare_database

logger = logging.getLogger("update_database")
Expand Down Expand Up @@ -86,23 +85,16 @@ if __name__ == "__main__":
config.parse_config_dict(hs_config, "", "")

# Create the database engine and a connection to it.
database_engine = create_engine(config.database_config)
db_conn = database_engine.module.connect(
**{
k: v
for k, v in config.database_config.get("args", {}).items()
if not k.startswith("cp_")
}
)
database = config.get_single_database()
database_engine = database.engine
db_conn = database.make_conn()

# Update the database to the latest schema.
prepare_database(db_conn, database_engine, config=config)
db_conn.commit()

# Instantiate and initialise the homeserver object.
hs = MockHomeserver(
config, database_engine, db_conn, db_config=config.database_config,
)
hs = MockHomeserver(config, database_engine, db_conn,)
# setup instantiates the store within the homeserver object.
hs.setup()
store = hs.get_datastore()
Expand Down
51 changes: 18 additions & 33 deletions scripts/synapse_port_db
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import yaml
from twisted.enterprise import adbapi
from twisted.internet import defer, reactor

from synapse.config.database import DatabaseConnectionConfig
from synapse.config.homeserver import HomeServerConfig
from synapse.logging.context import PreserveLoggingContext
from synapse.storage._base import LoggingTransaction
Expand Down Expand Up @@ -165,23 +166,17 @@ class Store(


class MockHomeserver:
def __init__(self, config, database_engine, db_conn, db_pool):
self.database_engine = database_engine
self.db_conn = db_conn
self.db_pool = db_pool
def __init__(self, config):
self.clock = Clock(reactor)
self.config = config
self.hostname = config.server_name

def get_db_conn(self):
return self.db_conn

def get_db_pool(self):
return self.db_pool

def get_clock(self):
return self.clock

def get_reactor(self):
return reactor


class Porter(object):
def __init__(self, **kwargs):
Expand Down Expand Up @@ -445,45 +440,35 @@ class Porter(object):
else:
return

def setup_db(self, db_config, database_engine):
db_conn = database_engine.module.connect(
**{
k: v
for k, v in db_config.get("args", {}).items()
if not k.startswith("cp_")
}
)

prepare_database(db_conn, database_engine, config=None)
def setup_db(self, db_config: DatabaseConnectionConfig):
db_conn = db_config.make_conn()
prepare_database(db_conn, db_config.engine, config=None)

db_conn.commit()

return db_conn

@defer.inlineCallbacks
def build_db_store(self, config):
def build_db_store(self, db_config: DatabaseConnectionConfig):
"""Builds and returns a database store using the provided configuration.
Args:
config: The database configuration, i.e. a dict following the structure of
the "database" section of Synapse's configuration file.
config: The database configuration
Returns:
The built Store object.
"""
engine = create_engine(config)

self.progress.set_state("Preparing %s" % config["name"])
conn = self.setup_db(config, engine)
self.progress.set_state("Preparing %s" % db_config.config["name"])

db_pool = adbapi.ConnectionPool(config["name"], **config["args"])
conn = self.setup_db(db_config)

hs = MockHomeserver(self.hs_config, engine, conn, db_pool)
hs = MockHomeserver(self.hs_config)

store = Store(Database(hs), conn, hs)
store = Store(Database(hs, db_config), conn, hs)

yield store.db.runInteraction(
"%s_engine.check_database" % config["name"], engine.check_database,
"%s_engine.check_database" % db_config.config["name"],
db_config.engine.check_database,
)

return store
Expand All @@ -509,7 +494,7 @@ class Porter(object):
@defer.inlineCallbacks
def run(self):
try:
self.sqlite_store = yield self.build_db_store(self.sqlite_config)
self.sqlite_store = yield self.build_db_store(DatabaseConnectionConfig(self.sqlite_config))

# Check if all background updates are done, abort if not.
updates_complete = (
Expand All @@ -524,7 +509,7 @@ class Porter(object):
defer.returnValue(None)

self.postgres_store = yield self.build_db_store(
self.hs_config.database_config
self.hs_config.get_single_database()
)

yield self.run_background_updates_on_postgres()
Expand Down

0 comments on commit ea7ac24

Please sign in to comment.