From 3d0e81968b0ccd7f39be1650705cff5576dbc68c Mon Sep 17 00:00:00 2001 From: RhodeCode Admin Date: Mon, 10 Jun 2024 17:01:42 +0200 Subject: [PATCH] feat(disk-cache): use fsync to force flush changes on NFS, and use retry mechanism to archive caches... --- rhodecode/apps/repository/views/repo_files.py | 2 +- rhodecode/lib/rc_cache/archive_cache/fanout_cache.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/rhodecode/apps/repository/views/repo_files.py b/rhodecode/apps/repository/views/repo_files.py index 407d420c..b4b2f466 100644 --- a/rhodecode/apps/repository/views/repo_files.py +++ b/rhodecode/apps/repository/views/repo_files.py @@ -459,7 +459,7 @@ class RepoFilesView(RepoAppView): response.location = location return response - reader, metadata = d_cache.fetch(archive_name_key) + reader, metadata = d_cache.fetch(archive_name_key, retry=True, retry_attempts=30) response = Response(app_iter=archive_iterator(reader)) response.content_disposition = f'attachment; filename={response_archive_name}' diff --git a/rhodecode/lib/rc_cache/archive_cache/fanout_cache.py b/rhodecode/lib/rc_cache/archive_cache/fanout_cache.py index 32b27f11..90530b8b 100644 --- a/rhodecode/lib/rc_cache/archive_cache/fanout_cache.py +++ b/rhodecode/lib/rc_cache/archive_cache/fanout_cache.py @@ -139,6 +139,13 @@ class FileSystemCache: for chunk in iterator: size += len(chunk) writer.write(chunk) + writer.flush() + # Get the file descriptor + fd = writer.fileno() + + # Sync the file descriptor to disk, helps with NFS cases... + os.fsync(fd) + log.debug('written new archive cache under %s', full_path) return size def _get_keyfile(self, key):