Merge pull request #8901 from ThomasWaldmann/chunker-refactor3

Small Chunker refactor
This commit is contained in:
TW 2025-06-04 21:55:39 +02:00 committed by GitHub
commit ae80be7f43
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 6 additions and 7 deletions

View file

@ -13,6 +13,7 @@ from libc.stdlib cimport malloc, free
from libc.string cimport memcpy, memmove
from .constants import CH_DATA, CH_ALLOC, CH_HOLE, zeros
from .platform import safe_fadvise
# this will be True if Python's seek implementation supports data/holes seeking.
# this does not imply that it will actually work on the filesystem,
@ -47,11 +48,7 @@ def dread(offset, size, fd=None, fh=-1):
use_fh = fh >= 0
if use_fh:
data = os.read(fh, size)
if hasattr(os, 'posix_fadvise'):
# UNIX only and, in case of block sizes that are not a multiple of the
# system's page size, better be used with a bug fixed linux kernel > 4.6.0,
# see comment/workaround in _chunker.c and borgbackup issue #907.
os.posix_fadvise(fh, offset, len(data), os.POSIX_FADV_DONTNEED)
safe_fadvise(fh, offset, len(data), "DONTNEED")
return data
else:
return fd.read(size)
@ -436,7 +433,6 @@ class ChunkerFixed:
self.chunking_time += time.monotonic() - started_chunking
if header_chunk.meta["size"] > 0:
assert self.header_size == header_chunk.meta["size"]
# Yield the header chunk
yield header_chunk

View file

@ -21,6 +21,7 @@ are correctly composed into the base functionality.
API_VERSION = "1.2_05"
fdatasync = getattr(os, "fdatasync", os.fsync)
has_posix_fadvise = hasattr(os, "posix_fadvise")
from .xattr import ENOATTR
@ -114,9 +115,11 @@ def sync_dir(path):
def safe_fadvise(fd, offset, len, advice):
if hasattr(os, "posix_fadvise"):
if has_posix_fadvise:
advice = getattr(os, "POSIX_FADV_" + advice)
try:
# UNIX only and, in case of block sizes that are not a multiple of the system's page size,
# better be used with a bug fixed linux kernel > 4.6.0, see borgbackup issue #907.
os.posix_fadvise(fd, offset, len, advice)
except OSError:
# usually, posix_fadvise can't fail for us, but there seem to