From d20d317c08fd48b71f790c1bb013aa61c6f0f4b7 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Fri, 14 Jan 2022 16:31:22 -0600 Subject: SERVER-62680 write cache retrievals into a tmp location before final destination. --- site_scons/site_tools/validate_cache_dir.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'site_scons') diff --git a/site_scons/site_tools/validate_cache_dir.py b/site_scons/site_tools/validate_cache_dir.py index ff7e7fe98f9..b1df5326eab 100644 --- a/site_scons/site_tools/validate_cache_dir.py +++ b/site_scons/site_tools/validate_cache_dir.py @@ -25,6 +25,7 @@ import json import os import pathlib import shutil +import tempfile import traceback @@ -106,10 +107,14 @@ class CacheDirValidate(SCons.CacheDir.CacheDir): if not csig: raise InvalidChecksum(cls.get_hash_path(src_file), dst, f"no content_hash data found") - try: - shutil.copy2(src_file, dst) - except OSError as ex: - raise CacheTransferFailed(src_file, dst, f"failed to copy from cache: {ex}") from ex + with tempfile.TemporaryDirectory() as tmpdirname: + dst_tmp = pathlib.Path(tmpdirname) / os.path.basename(dst) + try: + shutil.copy2(src_file, dst_tmp) + except OSError as ex: + raise CacheTransferFailed(src_file, dst, f"failed to copy from cache: {ex}") from ex + else: + shutil.move(dst_tmp, dst) new_csig = SCons.Util.MD5filesignature(dst, chunksize=SCons.Node.FS.File.md5_chunksize*1024) -- cgit v1.2.1