mirror of
https://github.com/borgbackup/borg.git
synced 2026-03-24 11:24:48 -04:00
repository: test FD invalidation
This commit is contained in:
parent
226062b9c8
commit
90fdfd26d8
1 changed files with 22 additions and 1 deletions
|
|
@ -11,7 +11,7 @@ from ..hashindex import NSIndex
|
|||
from ..helpers import Location, IntegrityError
|
||||
from ..locking import Lock, LockFailed
|
||||
from ..remote import RemoteRepository, InvalidRPCMethod
|
||||
from ..repository import Repository, LoggedIO, TAG_DELETE, MAX_DATA_SIZE
|
||||
from ..repository import Repository, LoggedIO, TAG_DELETE, MAX_DATA_SIZE, MAGIC
|
||||
from . import BaseTestCase
|
||||
from .hashindex import H
|
||||
|
||||
|
|
@ -151,6 +151,27 @@ class RepositoryCommitTestCase(RepositoryTestCaseBase):
|
|||
self.repository.put(H(2), b'boo')
|
||||
self.repository.delete(H(3))
|
||||
|
||||
def test_uncommitted_garbage(self):
|
||||
# uncommitted garbage should be no problem, it is cleaned up automatically.
|
||||
# we just have to be careful with invalidation of cached FDs in LoggedIO.
|
||||
self.repository.put(H(0), b'foo')
|
||||
self.repository.commit()
|
||||
# write some crap to a uncommitted segment file
|
||||
last_segment = self.repository.io.get_latest_segment()
|
||||
with open(self.repository.io.segment_filename(last_segment + 1), 'wb') as f:
|
||||
f.write(MAGIC + b'crapcrapcrap')
|
||||
self.repository.close()
|
||||
# usually, opening the repo and starting a transaction should trigger a cleanup.
|
||||
self.repository = self.open()
|
||||
with self.repository:
|
||||
# the next 2 lines get the FD of the crap segment file cached:
|
||||
segment = self.repository.io.get_latest_segment()
|
||||
self.repository.io.get_fd(segment)
|
||||
# when the put triggers the start of a transaction, crap should be cleaned up:
|
||||
self.repository.put(H(0), b'bar') # this may trigger compact_segments()
|
||||
self.repository.commit()
|
||||
# the point here is that nothing blows up with an exception.
|
||||
|
||||
def test_replay_of_missing_index(self):
|
||||
self.add_keys()
|
||||
for name in os.listdir(self.repository.path):
|
||||
|
|
|
|||
Loading…
Reference in a new issue