Pārlūkot izejas kodu

Merge pull request #8901 from ThomasWaldmann/chunker-refactor3

Small Chunker refactor
TW 3 dienas atpakaļ
vecāks
revīzija
ae80be7f43
2 mainītis faili ar 6 papildinājumiem un 7 dzēšanām
  1. 2 6
      src/borg/chunker.pyx
  2. 4 1
      src/borg/platform/base.py

+ 2 - 6
src/borg/chunker.pyx

@@ -13,6 +13,7 @@ from libc.stdlib cimport malloc, free
 from libc.string cimport memcpy, memmove
 from libc.string cimport memcpy, memmove
 
 
 from .constants import CH_DATA, CH_ALLOC, CH_HOLE, zeros
 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 will be True if Python's seek implementation supports data/holes seeking.
 # this does not imply that it will actually work on the filesystem,
 # 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
     use_fh = fh >= 0
     if use_fh:
     if use_fh:
         data = os.read(fh, size)
         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
         return data
     else:
     else:
         return fd.read(size)
         return fd.read(size)
@@ -436,7 +433,6 @@ class ChunkerFixed:
             self.chunking_time += time.monotonic() - started_chunking
             self.chunking_time += time.monotonic() - started_chunking
 
 
             if header_chunk.meta["size"] > 0:
             if header_chunk.meta["size"] > 0:
-                assert self.header_size == header_chunk.meta["size"]
                 # Yield the header chunk
                 # Yield the header chunk
                 yield header_chunk
                 yield header_chunk
 
 

+ 4 - 1
src/borg/platform/base.py

@@ -21,6 +21,7 @@ are correctly composed into the base functionality.
 API_VERSION = "1.2_05"
 API_VERSION = "1.2_05"
 
 
 fdatasync = getattr(os, "fdatasync", os.fsync)
 fdatasync = getattr(os, "fdatasync", os.fsync)
+has_posix_fadvise = hasattr(os, "posix_fadvise")
 
 
 from .xattr import ENOATTR
 from .xattr import ENOATTR
 
 
@@ -114,9 +115,11 @@ def sync_dir(path):
 
 
 
 
 def safe_fadvise(fd, offset, len, advice):
 def safe_fadvise(fd, offset, len, advice):
-    if hasattr(os, "posix_fadvise"):
+    if has_posix_fadvise:
         advice = getattr(os, "POSIX_FADV_" + advice)
         advice = getattr(os, "POSIX_FADV_" + advice)
         try:
         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)
             os.posix_fadvise(fd, offset, len, advice)
         except OSError:
         except OSError:
             # usually, posix_fadvise can't fail for us, but there seem to
             # usually, posix_fadvise can't fail for us, but there seem to