Skip to content

Commit

Permalink
check: only write to repo if --repair is given
Browse files Browse the repository at this point in the history
old borg just didn't commit the transaction and
thus caused a transaction rollback if not in
repair mode.

we can't do that anymore, thus we must avoid
modifying the repo if not in repair mode.
  • Loading branch information
ThomasWaldmann committed Sep 6, 2024
1 parent 15a9f4e commit 2883a49
Showing 1 changed file with 21 additions and 10 deletions.
31 changes: 21 additions & 10 deletions src/borg/archive.py
Original file line number Diff line number Diff line change
Expand Up @@ -2025,15 +2025,23 @@ def valid_item(obj):
if archive_id not in self.chunks:
logger.error("Archive metadata block %s is missing!", bin_to_hex(archive_id))
self.error_found = True
self.manifest.archives.delete(info.name)
if self.repair:
logger.error(f"Deleting broken archive {info.name}.")
self.manifest.archives.delete(info.name)
else:
logger.error(f"Would delete broken archive {info.name}.")
continue
cdata = self.repository.get(archive_id)
try:
_, data = self.repo_objs.parse(archive_id, cdata, ro_type=ROBJ_ARCHIVE_META)
except IntegrityError as integrity_error:
logger.error("Archive metadata block %s is corrupted: %s", bin_to_hex(archive_id), integrity_error)
self.error_found = True
self.manifest.archives.delete(info.name)
if self.repair:
logger.error(f"Deleting broken archive {info.name}.")
self.manifest.archives.delete(info.name)
else:
logger.error(f"Would delete broken archive {info.name}.")
continue
archive = self.key.unpack_archive(data)
archive = ArchiveItem(internal_dict=archive)
Expand All @@ -2046,14 +2054,17 @@ def valid_item(obj):
verify_file_chunks(info.name, item)
items_buffer.add(item)
items_buffer.flush(flush=True)
archive.item_ptrs = archive_put_items(
items_buffer.chunks, repo_objs=self.repo_objs, add_reference=add_reference
)
data = self.key.pack_metadata(archive.as_dict())
new_archive_id = self.key.id_hash(data)
cdata = self.repo_objs.format(new_archive_id, {}, data, ro_type=ROBJ_ARCHIVE_META)
add_reference(new_archive_id, len(data), cdata)
self.manifest.archives.create(info.name, new_archive_id, info.ts, overwrite=True)
if self.repair:
archive.item_ptrs = archive_put_items(
items_buffer.chunks, repo_objs=self.repo_objs, add_reference=add_reference
)
data = self.key.pack_metadata(archive.as_dict())
new_archive_id = self.key.id_hash(data)
logger.debug(f"archive id old: {bin_to_hex(archive_id)}")
logger.debug(f"archive id new: {bin_to_hex(new_archive_id)}")
cdata = self.repo_objs.format(new_archive_id, {}, data, ro_type=ROBJ_ARCHIVE_META)
add_reference(new_archive_id, len(data), cdata)
self.manifest.archives.create(info.name, new_archive_id, info.ts, overwrite=True)
pi.finish()

def finish(self):
Expand Down

0 comments on commit 2883a49

Please sign in to comment.