summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/other_tools/ops_maps/git_tree_fetch_map.cpp98
1 files changed, 55 insertions, 43 deletions
diff --git a/src/other_tools/ops_maps/git_tree_fetch_map.cpp b/src/other_tools/ops_maps/git_tree_fetch_map.cpp
index b1644d08..990f374b 100644
--- a/src/other_tools/ops_maps/git_tree_fetch_map.cpp
+++ b/src/other_tools/ops_maps/git_tree_fetch_map.cpp
@@ -32,10 +32,39 @@
namespace {
+void BackupToRemote(std::string const& tree_id,
+ IExecutionApi* remote_api,
+ GitTreeFetchMap::LoggerPtr const& logger) {
+ // try to back up to remote CAS
+ auto repo = RepositoryConfig{};
+ if (repo.SetGitCAS(StorageConfig::GitRoot())) {
+ auto git_api = GitApi{&repo};
+ if (not git_api.RetrieveToCas(
+ {Artifact::ObjectInfo{
+ .digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true},
+ .type = ObjectType::Tree}},
+ remote_api)) {
+ // give a warning
+ (*logger)(fmt::format(
+ "Failed to back up tree {} from local CAS to remote",
+ tree_id),
+ /*fatal=*/false);
+ }
+ }
+ else {
+ // give a warning
+ (*logger)(fmt::format("Failed to SetGitCAS at {}",
+ StorageConfig::GitRoot().string()),
+ /*fatal=*/false);
+ }
+}
+
void MoveCASTreeToGit(std::string const& tree_id,
ArtifactDigest const& digest,
gsl::not_null<ImportToGitMap*> const& import_to_git_map,
IExecutionApi* local_api,
+ IExecutionApi* remote_api,
+ bool do_backup,
gsl::not_null<TaskSystem*> const& ts,
GitTreeFetchMap::SetterPtr const& setter,
GitTreeFetchMap::LoggerPtr const& logger) {
@@ -62,6 +91,9 @@ void MoveCASTreeToGit(std::string const& tree_id,
ts,
{std::move(c_info)},
[tmp_dir, // keep tmp_dir alive
+ tree_id,
+ remote_api,
+ do_backup,
setter,
logger](auto const& values) {
if (not values[0]->second) {
@@ -69,8 +101,9 @@ void MoveCASTreeToGit(std::string const& tree_id,
/*fatal=*/true);
return;
}
- // remote CAS already has the tree, so no need to even check
- // backup_to_remote flag;
+ if (do_backup) {
+ BackupToRemote(tree_id, remote_api, logger);
+ }
(*setter)(false /*no cache hit*/);
},
[logger, tmp_dir, tree_id](auto const& msg, bool fatal) {
@@ -83,33 +116,6 @@ void MoveCASTreeToGit(std::string const& tree_id,
});
}
-void BackupToRemote(std::string const& tree_id,
- IExecutionApi* remote_api,
- GitTreeFetchMap::LoggerPtr const& logger) {
- // try to back up to remote CAS
- auto repo = RepositoryConfig{};
- if (repo.SetGitCAS(StorageConfig::GitRoot())) {
- auto git_api = GitApi{&repo};
- if (not git_api.RetrieveToCas(
- {Artifact::ObjectInfo{
- .digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true},
- .type = ObjectType::Tree}},
- remote_api)) {
- // give a warning
- (*logger)(fmt::format(
- "Failed to back up tree {} from local CAS to remote",
- tree_id),
- /*fatal=*/false);
- }
- }
- else {
- // give a warning
- (*logger)(fmt::format("Failed to SetGitCAS at {}",
- StorageConfig::GitRoot().string()),
- /*fatal=*/false);
- }
-}
-
} // namespace
auto CreateGitTreeFetchMap(
@@ -205,13 +211,16 @@ auto CreateGitTreeFetchMap(
auto const& cas = Storage::Instance().CAS();
if (auto path = cas.TreePath(digest)) {
// import tree to Git cache
- MoveCASTreeToGit(key.hash,
- digest,
- import_to_git_map,
- local_api,
- ts,
- setter,
- logger);
+ MoveCASTreeToGit(
+ key.hash,
+ digest,
+ import_to_git_map,
+ local_api,
+ remote_api,
+ (backup_to_remote and remote_api != nullptr),
+ ts,
+ setter,
+ logger);
// done!
return;
}
@@ -232,13 +241,16 @@ auto CreateGitTreeFetchMap(
.type = ObjectType::Tree}},
local_api)) {
JustMRProgress::Instance().TaskTracker().Stop(key.origin);
- MoveCASTreeToGit(key.hash,
- digest,
- import_to_git_map,
- local_api,
- ts,
- setter,
- logger);
+ MoveCASTreeToGit(
+ key.hash,
+ digest,
+ import_to_git_map,
+ local_api,
+ remote_api,
+ false, // tree already in remote, so ignore backing up
+ ts,
+ setter,
+ logger);
// done!
return;
}