2 files changed, 22 insertions, 3 deletions
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index a6e29c0860..140c99f18a 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from synapse.storage import prepare_database
+from synapse.storage import prepare_database, UpgradeDatabaseException
from synapse.server import HomeServer
@@ -228,8 +228,15 @@ def setup():
logger.info("Preparing database: %s...", db_name)
- with sqlite3.connect(db_name) as db_conn:
- prepare_database(db_conn)
+ try:
+ with sqlite3.connect(db_name) as db_conn:
+ prepare_database(db_conn)
+ except UpgradeDatabaseException:
+ sys.stderr.write(
+ "\nFailed to upgrade database.\n"
+ "Have you followed any instructions in UPGRADES.rst?\n"
+ )
+ sys.exit(1)
logger.info("Database prepared in %s.", db_name)
diff --git a/synapse/storage/__init__.py b/synapse/storage/__init__.py
index 62f89b8d8c..2e97bbab3b 100644
--- a/synapse/storage/__init__.py
+++ b/synapse/storage/__init__.py
@@ -526,6 +526,14 @@ def read_schema(schema):
return schema_file.read()
+class PrepareDatabaseException(Exception):
+ pass
+
+
+class UpgradeDatabaseException(PrepareDatabaseException):
+ pass
+
+
def prepare_database(db_conn):
""" Set up all the dbs. Since all the *.sql have IF NOT EXISTS, so we
don't have to worry about overwriting existing content.
@@ -542,6 +550,10 @@ def prepare_database(db_conn):
"Cannot use this database as it is too " +
"new for the server to understand"
)
+ elif user_version < 10:
+ raise UpgradeDatabaseException(
+ "No delta for versions less than 10"
+ )
elif user_version < SCHEMA_VERSION:
logger.info(
"Upgrading database from version %d",
|