summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-12-16 14:20:32 +0000
committerErik Johnston <erik@matrix.org>2014-12-16 14:20:32 +0000
commit2e44714214af801906c9fbc3e1cb1bc8d6b92427 (patch)
tree7a25841c85d12a8feffcb932bc3fa80885db84db
parentFix bugs in upgrade script. (diff)
downloadsynapse-2e44714214af801906c9fbc3e1cb1bc8d6b92427.tar.xz
Make failure to run appropraite upgrade scripts more helpful.
-rwxr-xr-xsynapse/app/homeserver.py13
-rw-r--r--synapse/storage/__init__.py12
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",