|
|
@@ -248,23 +248,22 @@ class Fsck(object): |
|
|
|
|
|
|
|
# Check that we can open bulkdata |
|
|
|
tab = nilmdb.server.bulkdata.Table(bulk) |
|
|
|
except FsckFormatError: |
|
|
|
except FsckFormatError as e: |
|
|
|
# If there are no files except _format, try deleting |
|
|
|
# the entire stream; this may remove metadata, but |
|
|
|
# it's probably unimportant. |
|
|
|
files = list(os.listdir(bulk)) |
|
|
|
if len(files) > 1: |
|
|
|
raise |
|
|
|
if len(files) == 1 and files[0] != b'_format': |
|
|
|
raise |
|
|
|
raise FsckFormatError(f"{path}: can't load _format, " |
|
|
|
f"but data is also present") |
|
|
|
|
|
|
|
# Since the stream was empty, just remove it |
|
|
|
self.fix_remove_stream(sid, path, bulk, |
|
|
|
"empty, with corrupted format file") |
|
|
|
|
|
|
|
except FsckError: |
|
|
|
raise |
|
|
|
except Exception as e: |
|
|
|
except FsckError as e: |
|
|
|
raise e |
|
|
|
except Exception as e: # pragma: no cover |
|
|
|
# No coverage because this is an unknown/unexpected error |
|
|
|
raise FsckError("%s: can't open bulkdata: %s", |
|
|
|
path, str(e)) |
|
|
|
tab.close() |
|
|
@@ -278,6 +277,7 @@ class Fsck(object): |
|
|
|
fmt = pickle.load(f) |
|
|
|
except Exception as e: |
|
|
|
raise FsckFormatError(f"{path}: can't load _format file ({e})") |
|
|
|
|
|
|
|
if fmt["version"] != 3: |
|
|
|
raise FsckFormatError("%s: bad or unsupported bulkdata version %d", |
|
|
|
path, fmt["version"]) |
|
|
|