瀏覽代碼

recreate: fix crash if recompress and deduplication beyond autocommit_threshold

ie. it means that if all the recompressed chunks were already in the repo
no data would be written, so there would be no active txn, so failure
ensues.
Marian Beermann 8 年之前
父節點
當前提交
e4e6787906
共有 1 個文件被更改,包括 1 次插入1 次删除
  1. 1 1
      src/borg/archive.py

+ 1 - 1
src/borg/archive.py

@@ -1450,7 +1450,7 @@ class ArchiveRecreater:
                 chunk_id, size, csize = self.cache.add_chunk(chunk_id, chunk, target.stats, overwrite=overwrite)
                 chunk_id, size, csize = self.cache.add_chunk(chunk_id, chunk, target.stats, overwrite=overwrite)
                 new_chunks.append((chunk_id, size, csize))
                 new_chunks.append((chunk_id, size, csize))
                 self.seen_chunks.add(chunk_id)
                 self.seen_chunks.add(chunk_id)
-                if self.recompress:
+                if self.recompress and self.cache.seen_chunk(chunk_id) == 1:
                     # This tracks how many bytes are uncommitted but compactable, since we are recompressing
                     # This tracks how many bytes are uncommitted but compactable, since we are recompressing
                     # existing chunks.
                     # existing chunks.
                     target.recreate_uncomitted_bytes += csize
                     target.recreate_uncomitted_bytes += csize