diff --git a/src/borg/archiver/transfer_cmd.py b/src/borg/archiver/transfer_cmd.py index e8de9e1f2..663a9244a 100644 --- a/src/borg/archiver/transfer_cmd.py +++ b/src/borg/archiver/transfer_cmd.py @@ -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) diff --git a/src/borg/cache.py b/src/borg/cache.py index 37c67f4d9..fc438d50a 100644 --- a/src/borg/cache.py +++ b/src/borg/cache.py @@ -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) diff --git a/src/borg/upgrade.py b/src/borg/upgrade.py index 95d2b8e49..6a9fd4460 100644 --- a/src/borg/upgrade.py +++ b/src/borg/upgrade.py @@ -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):