lbry-sdk/lbry/extras/daemon/migrator/dbmigrator.py

71 lines
2.7 KiB
Python
Raw Normal View History

2019-10-18 17:28:26 +02:00
# pylint: skip-file
2019-06-25 20:36:32 +02:00
import os
2019-09-24 17:53:23 +02:00
import sys
import logging
log = logging.getLogger(__name__)
2019-01-21 21:55:50 +01:00
def migrate_db(conf, start, end):
current = start
while current < end:
if current == 1:
2018-11-04 20:16:46 +01:00
from .migrate1to2 import do_migration
2017-05-10 17:30:36 +02:00
elif current == 2:
2018-11-04 20:16:46 +01:00
from .migrate2to3 import do_migration
elif current == 3:
2018-11-04 20:16:46 +01:00
from .migrate3to4 import do_migration
elif current == 4:
2018-11-04 20:16:46 +01:00
from .migrate4to5 import do_migration
elif current == 5:
2018-11-04 20:16:46 +01:00
from .migrate5to6 import do_migration
2018-03-27 20:58:29 +02:00
elif current == 6:
2018-11-04 20:16:46 +01:00
from .migrate6to7 import do_migration
elif current == 7:
2018-11-04 20:16:46 +01:00
from .migrate7to8 import do_migration
elif current == 8:
2018-11-04 20:16:46 +01:00
from .migrate8to9 import do_migration
2019-05-07 06:32:23 +02:00
elif current == 9:
from .migrate9to10 import do_migration
elif current == 10:
from .migrate10to11 import do_migration
2019-10-11 01:46:00 +02:00
elif current == 11:
from .migrate11to12 import do_migration
2019-11-14 00:55:32 +01:00
elif current == 12:
from .migrate12to13 import do_migration
2019-11-23 20:51:03 +01:00
elif current == 13:
from .migrate13to14 import do_migration
else:
raise Exception(f"DB migration of version {current} to {current+1} is not available")
2019-06-25 20:36:32 +02:00
try:
do_migration(conf)
2019-10-28 17:20:15 +01:00
except Exception:
log.exception("failed to migrate database")
2019-06-25 20:36:32 +02:00
if os.path.exists(os.path.join(conf.data_dir, "lbrynet.sqlite")):
backup_name = f"rev_{current}_unmigrated_database"
count = 0
while os.path.exists(os.path.join(conf.data_dir, backup_name + ".sqlite")):
count += 1
backup_name = f"rev_{current}_unmigrated_database_{count}"
backup_path = os.path.join(conf.data_dir, backup_name + ".sqlite")
os.rename(os.path.join(conf.data_dir, "lbrynet.sqlite"), backup_path)
log.info("made a backup of the unmigrated database: %s", backup_path)
if os.path.isfile(os.path.join(conf.data_dir, "db_revision")):
os.remove(os.path.join(conf.data_dir, "db_revision"))
return None
current += 1
log.info("successfully migrated the database from revision %i to %i", current - 1, current)
return None
def run_migration_script():
log_format = "(%(asctime)s)[%(filename)s:%(lineno)s] %(funcName)s(): %(message)s"
logging.basicConfig(level=logging.DEBUG, format=log_format, filename="migrator.log")
sys.stdout = open("migrator.out.log", 'w')
sys.stderr = open("migrator.err.log", 'w')
migrate_db(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
2016-11-28 20:23:10 +01:00
if __name__ == "__main__":
run_migration_script()