Browse Source

legacyrepository: remove auto_recover, see #9022

we only read from borg 1.x legacy repos, we must not
try to "fix" them (users can use borg1 check --repair).

had to remove some tests that relied on this "feature".
Thomas Waldmann 3 weeks ago
parent
commit
4a0b71cad1
2 changed files with 5 additions and 39 deletions
  1. 5 15
      src/borg/legacyrepository.py
  2. 0 24
      src/borg/testsuite/legacyrepository_test.py

+ 5 - 15
src/borg/legacyrepository.py

@@ -515,23 +515,13 @@ class LegacyRepository:
             return
         return integrity[key]
 
-    def open_index(self, transaction_id, auto_recover=True):
+    def open_index(self, transaction_id):
         if transaction_id is None:
             return NSIndex1()
         index_path = os.path.join(self.path, "index.%d" % transaction_id)
         integrity_data = self._read_integrity(transaction_id, "index")
-        try:
-            with IntegrityCheckedFile(index_path, write=False, integrity_data=integrity_data) as fd:
-                return NSIndex1.read(fd)
-        except (ValueError, OSError, FileIntegrityError) as exc:
-            logger.warning("Repository index missing or corrupted, trying to recover from: %s", exc)
-            os.unlink(index_path)
-            if not auto_recover:
-                raise
-            self.prepare_txn(self.get_transaction_id())
-            # don't leave an open transaction around
-            self.commit(compact=False)
-            return self.open_index(self.get_transaction_id())
+        with IntegrityCheckedFile(index_path, write=False, integrity_data=integrity_data) as fd:
+            return NSIndex1.read(fd)
 
     def _unpack_hints(self, transaction_id):
         hints_path = os.path.join(self.path, "hints.%d" % transaction_id)
@@ -560,11 +550,11 @@ class LegacyRepository:
                 raise
         if not self.index or transaction_id is None:
             try:
-                self.index = self.open_index(transaction_id, auto_recover=False)
+                self.index = self.open_index(transaction_id)
             except (ValueError, OSError, FileIntegrityError) as exc:
                 logger.warning("Checking repository transaction due to previous error: %s", exc)
                 self.check_transaction()
-                self.index = self.open_index(transaction_id, auto_recover=False)
+                self.index = self.open_index(transaction_id)
         if transaction_id is None:
             self.segments = {}  # XXX bad name: usage_count_of_segment_x = self.segments[x]
             self.compact = FreeSpace()  # XXX bad name: freeable_space_of_segment_x = self.compact[x]

+ 0 - 24
src/borg/testsuite/legacyrepository_test.py

@@ -571,21 +571,6 @@ def test_unreadable_hints(repository):
         do_commit(repository)
 
 
-def test_index(repository):
-    make_auxiliary(repository)
-    with open(os.path.join(repository.path, "index.1"), "wb") as fd:
-        fd.write(b"123456789")
-    do_commit(repository)
-
-
-def test_index_outside_transaction(repository):
-    make_auxiliary(repository)
-    with open(os.path.join(repository.path, "index.1"), "wb") as fd:
-        fd.write(b"123456789")
-    with repository:
-        assert len(repository) == 1
-
-
 def _corrupt_index(repository):
     # HashIndex is able to detect incorrect headers and file lengths,
     # but on its own it can't tell if the data is correct.
@@ -601,15 +586,6 @@ def _corrupt_index(repository):
         fd.write(corrupted_index_data)
 
 
-def test_index_corrupted(repository):
-    make_auxiliary(repository)
-    _corrupt_index(repository)
-    with repository:
-        # data corruption is detected due to mismatching checksums, and fixed by rebuilding the index.
-        assert len(repository) == 1
-        assert pdchunk(repository.get(H(0))) == b"foo"
-
-
 def test_index_corrupted_without_integrity(repository):
     make_auxiliary(repository)
     _corrupt_index(repository)