summaryrefslogtreecommitdiff
path: root/scripts/migration
diff options
context:
space:
mode:
authordrebs <drebs@leap.se>2017-03-11 14:38:51 +0100
committerdrebs <drebs@leap.se>2017-03-11 14:38:51 +0100
commit3ec21a7a6b39b4fe8885f3050ab75402e6812a1f (patch)
tree300a2d8da67bbc7c6484f9ee136a4a18c41c48c6 /scripts/migration
parentc379a58d84fbf061b8d046057e45089f0e3c65f6 (diff)
parent3eefcb7d138ef41932a748ae729bfa0b629758d2 (diff)
Merge tag '0.9.3' into debian/platform-0.9
0.9.3 Conflicts: server/pkg/soledad-server server/pkg/soledad-server.service
Diffstat (limited to 'scripts/migration')
-rwxr-xr-xscripts/migration/0.9.0/migrate.py4
-rw-r--r--scripts/migration/0.9.0/migrate_couch_schema/__init__.py35
2 files changed, 34 insertions, 5 deletions
diff --git a/scripts/migration/0.9.0/migrate.py b/scripts/migration/0.9.0/migrate.py
index 6ad5bc2d..7b2ec005 100755
--- a/scripts/migration/0.9.0/migrate.py
+++ b/scripts/migration/0.9.0/migrate.py
@@ -27,14 +27,14 @@ import os
from argparse import ArgumentParser
-from leap.soledad.server import load_configuration
+from leap.soledad.server import get_config
from migrate_couch_schema import migrate
TARGET_VERSION = '0.8.2'
DEFAULT_COUCH_URL = 'http://127.0.0.1:5984'
-CONF = load_configuration('/etc/soledad/soledad-server.conf')
+CONF = get_config()
NETRC_PATH = CONF['soledad-server']['admin_netrc']
diff --git a/scripts/migration/0.9.0/migrate_couch_schema/__init__.py b/scripts/migration/0.9.0/migrate_couch_schema/__init__.py
index f0b456e4..d1560c59 100644
--- a/scripts/migration/0.9.0/migrate_couch_schema/__init__.py
+++ b/scripts/migration/0.9.0/migrate_couch_schema/__init__.py
@@ -30,7 +30,7 @@ def _get_couch_server(couch_url):
return Server(couch_url)
-def _is_migrateable(db):
+def _has_u1db_config_doc(db):
config_doc = db.get('u1db_config')
return bool(config_doc)
@@ -63,6 +63,35 @@ def _get_user_dbs(server):
# migration main functions
#
+def _report_missing_u1db_config_doc(dbname, db):
+ config_doc = db.get(CONFIG_DOC_ID)
+ if not config_doc:
+ logger.warning(
+ "[%s] no '%s' or '%s' documents found, possibly an empty db? I "
+ "don't know what to do with this db, so I am skipping it."
+ % (dbname, 'u1db_config', CONFIG_DOC_ID))
+ else:
+ if SCHEMA_VERSION_KEY in config_doc:
+ version = config_doc[SCHEMA_VERSION_KEY]
+ if version == SCHEMA_VERSION:
+ logger.info(
+ "[%s] '%s' document exists, and schema versions match "
+ "(expected %r and found %r). This database reports to be "
+ "using the new schema version, so I am skipping it."
+ % (dbname, CONFIG_DOC_ID))
+ else:
+ logger.error(
+ "[%s] '%s' document exists, but schema versions don't "
+ "match (expected %r, found %r instead). I don't know "
+ "how to migrate such a db, so I am skipping it."
+ % (dbname, CONFIG_DOC_ID, SCHEMA_VERSION, version))
+ else:
+ logger.error(
+ "[%s] '%s' document exists, but has no schema version "
+ "information in it. I don't know how to migrate such a db, "
+ "so I am skipping it." % (dbname, CONFIG_DOC_ID))
+
+
def migrate(args, target_version):
server = _get_couch_server(args.couch_url)
logger.info('starting couch schema migration to %s' % target_version)
@@ -71,8 +100,8 @@ def migrate(args, target_version):
user_dbs = _get_user_dbs(server)
for dbname in user_dbs:
db = server[dbname]
- if not _is_migrateable(db):
- logger.warning("[%s] skipping not migrateable user db" % dbname)
+ if not _has_u1db_config_doc(db):
+ _report_missing_u1db_config_doc(dbname, db)
continue
logger.info("[%s] starting migration of user db" % dbname)
try: