upgrader fixes for new api

This commit is contained in:
Thomas Waldmann 2022-09-07 20:24:50 +02:00
parent 4c9ed2a6c6
commit cf333cef91
3 changed files with 15 additions and 6 deletions

View File

@ -71,9 +71,16 @@ class TransferMixIn:
# keep compressed payload same, avoid decompression / recompression
meta, data = other_manifest.repo_objs.parse(chunk_id, cdata, decompress=False)
meta, data = upgrader.upgrade_compressed_chunk(meta, data)
chunk_entry = cache.add_chunk(
chunk_id, meta, data, stats=archive.stats, wait=False, compress=False, size=size
chunk_id,
meta,
data,
stats=archive.stats,
wait=False,
compress=False,
size=size,
ctype=meta["ctype"],
clevel=meta["clevel"],
)
cache.repository.async_response(wait=False)
chunks.append(chunk_entry)

View File

@ -943,7 +943,9 @@ class LocalCache(CacheStatsMixin):
self.cache_config.ignored_features.update(repo_features - my_features)
self.cache_config.mandatory_features.update(repo_features & my_features)
def add_chunk(self, id, meta, data, *, stats, overwrite=False, wait=True, compress=True, size=None):
def add_chunk(
self, id, meta, data, *, stats, overwrite=False, wait=True, compress=True, size=None, ctype=None, clevel=None
):
if not self.txn_active:
self.begin_txn()
if size is None and compress:
@ -953,7 +955,7 @@ class LocalCache(CacheStatsMixin):
return self.chunk_incref(id, stats)
if size is None:
raise ValueError("when giving compressed data for a new chunk, the uncompressed size must be given also")
cdata = self.repo_objs.format(id, meta, data, compress=compress, size=size)
cdata = self.repo_objs.format(id, meta, data, compress=compress, size=size, ctype=ctype, clevel=clevel)
self.repository.put(id, cdata, wait=wait)
self.chunks.add(id, 1, size)
stats.update(size, not refcount)

View File

@ -19,7 +19,7 @@ class UpgraderNoOp:
def upgrade_item(self, *, item):
return item
def upgrade_compressed_chunk(self, *, meta, data):
def upgrade_compressed_chunk(self, meta, data):
return meta, data
def upgrade_archive_metadata(self, *, metadata):
@ -98,7 +98,7 @@ class UpgraderFrom12To20:
assert all(key in new_item for key in REQUIRED_ITEM_KEYS)
return new_item
def upgrade_compressed_chunk(self, *, meta, data):
def upgrade_compressed_chunk(self, meta, data):
# meta/data was parsed via RepoObj1.parse, which returns data **including** the ctype/clevel bytes prefixed
def upgrade_zlib_and_level(meta, data):
if ZLIB_legacy.detect(data):