Hi,
Could you give the attached patch for Jessie's S3QL a try? It should
allow to upgrade from wheezy file systems.
(Try it with a test file system first)
Best,
-Nikolaus
--
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F
»Time flies like an arrow, fruit flies like a Banana.«
diff --git a/src/s3ql/adm.py b/src/s3ql/adm.py
--- a/src/s3ql/adm.py
+++ b/src/s3ql/adm.py
@@ -305,7 +305,10 @@
raise QuietError()
# Check revision
- if param['revision'] < CURRENT_FS_REV-1:
+ if param['revision'] >= CURRENT_FS_REV:
+ print('File system already at most-recent revision')
+ return
+ elif param['revision'] not in (16,20):
print(textwrap.dedent('''
File system revision too old to upgrade!
@@ -316,10 +319,6 @@
print(get_old_rev_msg(param['revision'] + 1, 's3qladm'))
raise QuietError()
- elif param['revision'] >= CURRENT_FS_REV:
- print('File system already at most-recent revision')
- return
-
print(textwrap.dedent('''
I am about to update the file system to the newest revision.
You will not be able to access the file system with any older version
@@ -337,6 +336,22 @@
if sys.stdin.readline().strip().lower() != 'yes':
raise QuietError()
+ if param['revision'] == 16:
+ log.info('Upgrading from revision 16 to 20...')
+ # For this upgrade, we need to recreate the sqlite database from the
+ # metadata dump, because some SQLite types have changed
+ log.info('Discarding cached metadata to trigger database rebuild.')
+ db = None
+
+ # Keep backup of local metadata (just in case...)
+ if os.path.exists(cachepath + '.params'):
+ assert os.path.exists(cachepath + '.db')
+ if (os.path.exists(cachepath + '.db.bak') or
+ os.path.exists(cachepath + '.params.bak')):
+ raise QuietError('Metadata backup already exists, did something go wrong?')
+ os.rename(cachepath + '.db', cachepath + '.db.bak')
+ os.rename(cachepath + '.params', cachepath + '.params.bak')
+
if not db:
# Need to download metadata
with tempfile.TemporaryFile() as tmpfh:
@@ -352,7 +367,7 @@
tmpfh.seek(0)
db = restore_metadata(tmpfh, cachepath + '.db')
- log.info('Upgrading from revision %d to %d...', param['revision'], CURRENT_FS_REV)
+ log.info('Upgrading from revision 20 to %d...', CURRENT_FS_REV)
param['revision'] = CURRENT_FS_REV
param['last-modified'] = time.time()
@@ -402,9 +417,8 @@
print(textwrap.dedent('''\
File system upgrade complete.
- It is strongly recommended to run the s3ql_verify command with the
- --data option as soon as possible. This is necessary to ensure that the
- upgrade to the next (2.11) S3QL release will run smoothly.'''))
+ It is strongly recommended to run the new s3ql_verify command with the
+ --data option at least once and as soon as possible.'''))
# This should be used on the *next* fs revision update to ensure that all
# objects conform to newest standards, so we can drop the legacy routines from