From a9edf6311dfe346ae73587589b8506dcce0380fa Mon Sep 17 00:00:00 2001 From: jagghoshal-blip Date: Wed, 21 Jan 2026 16:00:40 -0800 Subject: [PATCH] Enhance caching logic with directory checks Added directory existence checks for target artifact paths. --- .../cuttlefish/host/libs/web/caching_build_api.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/base/cvd/cuttlefish/host/libs/web/caching_build_api.cpp b/base/cvd/cuttlefish/host/libs/web/caching_build_api.cpp index c0f40b8870d..41c478363f7 100644 --- a/base/cvd/cuttlefish/host/libs/web/caching_build_api.cpp +++ b/base/cvd/cuttlefish/host/libs/web/caching_build_api.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include #include "absl/log/log.h" @@ -98,6 +99,8 @@ Result CachingBuildApi::DownloadFile( if (!FileExists(paths.cache_artifact)) { CF_EXPECT(build_api_.DownloadFile(build, paths.build_cache, artifact_name)); } + CF_EXPECT(EnsureDirectoryExists( + std::string(android::base::Dirname(paths.target_artifact)))); return CF_EXPECT(CreateHardLink(paths.cache_artifact, paths.target_artifact, kOverwriteExistingFile)); } @@ -110,10 +113,14 @@ Result CachingBuildApi::DownloadFileWithBackup( artifact_name, backup_artifact_name); CF_EXPECT(EnsureDirectoryExists(paths.build_cache)); if (FileExists(paths.cache_artifact)) { + CF_EXPECT(EnsureDirectoryExists( + std::string(android::base::Dirname(paths.target_artifact)))); return CF_EXPECT(CreateHardLink(paths.cache_artifact, paths.target_artifact, kOverwriteExistingFile)); } if (FileExists(paths.cache_backup_artifact)) { + CF_EXPECT(EnsureDirectoryExists( + std::string(android::base::Dirname(paths.target_backup_artifact)))); return CF_EXPECT(CreateHardLink(paths.cache_backup_artifact, paths.target_backup_artifact, kOverwriteExistingFile)); @@ -121,9 +128,13 @@ Result CachingBuildApi::DownloadFileWithBackup( const auto artifact_filepath = CF_EXPECT(build_api_.DownloadFileWithBackup( build, paths.build_cache, artifact_name, backup_artifact_name)); if (absl::EndsWith(artifact_filepath, artifact_name)) { + CF_EXPECT(EnsureDirectoryExists( + std::string(android::base::Dirname(paths.target_artifact)))); return CF_EXPECT(CreateHardLink(paths.cache_artifact, paths.target_artifact, kOverwriteExistingFile)); } + CF_EXPECT(EnsureDirectoryExists( + std::string(android::base::Dirname(paths.target_backup_artifact)))); return CF_EXPECT(CreateHardLink(paths.cache_backup_artifact, paths.target_backup_artifact)); }