|
@@ -553,21 +553,23 @@ class FilesCacheMixin:
|
|
|
if "i" in cache_mode and entry.inode != st.st_ino:
|
|
|
files_cache_logger.debug("KNOWN-CHANGED: file inode number has changed: %r", hashed_path)
|
|
|
return True, None
|
|
|
- if "c" in cache_mode and timestamp_to_int(entry.ctime) != st.st_ctime_ns:
|
|
|
+ ctime = int_to_timestamp(safe_ns(st.st_ctime_ns))
|
|
|
+ if "c" in cache_mode and entry.ctime != ctime:
|
|
|
files_cache_logger.debug("KNOWN-CHANGED: file ctime has changed: %r", hashed_path)
|
|
|
return True, None
|
|
|
- if "m" in cache_mode and timestamp_to_int(entry.mtime) != st.st_mtime_ns:
|
|
|
+ mtime = int_to_timestamp(safe_ns(st.st_mtime_ns))
|
|
|
+ if "m" in cache_mode and entry.mtime != mtime:
|
|
|
files_cache_logger.debug("KNOWN-CHANGED: file mtime has changed: %r", hashed_path)
|
|
|
return True, None
|
|
|
- # we ignored the inode number in the comparison above or it is still same.
|
|
|
+ # V = any of the inode number, mtime, ctime values.
|
|
|
+ # we ignored V in the comparison above or it is still the same value.
|
|
|
# if it is still the same, replacing it in the tuple doesn't change it.
|
|
|
- # if we ignored it, a reason for doing that is that files were moved to a new
|
|
|
- # disk / new fs (so a one-time change of inode number is expected) and we wanted
|
|
|
- # to avoid everything getting chunked again. to be able to re-enable the inode
|
|
|
- # number comparison in a future backup run (and avoid chunking everything
|
|
|
- # again at that time), we need to update the inode number in the cache with what
|
|
|
- # we see in the filesystem.
|
|
|
- self.files[path_hash] = msgpack.packb(entry._replace(inode=st.st_ino, age=0))
|
|
|
+ # if we ignored it, a reason for doing that is that files were moved/copied to
|
|
|
+ # a new disk / new fs (so a one-time change of V is expected) and we wanted
|
|
|
+ # to avoid everything getting chunked again. to be able to re-enable the
|
|
|
+ # V comparison in a future backup run (and avoid chunking everything again at
|
|
|
+ # that time), we need to update V in the cache with what we see in the filesystem.
|
|
|
+ self.files[path_hash] = msgpack.packb(entry._replace(inode=st.st_ino, ctime=ctime, mtime=mtime, age=0))
|
|
|
chunks = [ChunkListEntry(*chunk) for chunk in entry.chunks] # convert to list of namedtuple
|
|
|
return True, chunks
|
|
|
|