diff --git a/src/borg/repository.py b/src/borg/repository.py index 091f2852c..62d7ccff0 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -1191,13 +1191,9 @@ class Repository: except KeyError: pass else: - self.segments[segment] -= 1 - size = self.io.read(segment, offset, id, read_data=False) - self.storage_quota_use -= size - self.compact[segment] += size - segment, size = self.io.write_delete(id) - self.compact[segment] += size - self.segments.setdefault(segment, 0) + # note: doing a delete first will do some bookkeeping, + # like updating the shadow_index, quota, ... + self._delete(id, segment, offset) segment, offset = self.io.write_put(id, data) self.storage_quota_use += len(data) + self.io.put_header_fmt.size self.segments.setdefault(segment, 0) @@ -1221,6 +1217,10 @@ class Repository: except KeyError: raise self.ObjectNotFound(id, self.path) from None self.shadow_index.setdefault(id, []).append(segment) + self._delete(id, segment, offset) + + def _delete(self, id, segment, offset): + # common code used by put and delete self.segments[segment] -= 1 size = self.io.read(segment, offset, id, read_data=False) self.storage_quota_use -= size