summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/remote/bazel
diff options
context:
space:
mode:
authorSascha Roloff <sascha.roloff@huawei.com>2022-07-08 10:04:34 +0200
committerSascha Roloff <sascha.roloff@huawei.com>2022-08-05 14:41:31 +0200
commitbb2375008f69bf62d510ce862f1d4370fa130ef3 (patch)
treeaa757c0eec0455782cb764ce09c46adc8ef250cf /src/buildtool/execution_api/remote/bazel
parent30c5aa0b3dc37c784311a905f120e0e8b1f651fd (diff)
downloadjustbuild-bb2375008f69bf62d510ce862f1d4370fa130ef3.tar.gz
Introduced batch availability check for remote execution api
Diffstat (limited to 'src/buildtool/execution_api/remote/bazel')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_api.cpp22
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_api.hpp3
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network.cpp5
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network.hpp3
4 files changed, 32 insertions, 1 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
index ca5d4946..51e85176 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
@@ -170,7 +170,7 @@ auto BazelApi::CreateAction(
return std::nullopt;
}
if (tree_map_->AddTree(*digest, std::move(tree))) {
- return ArtifactDigest{std::move(*digest)};
+ return ArtifactDigest{*digest};
}
return std::nullopt;
}
@@ -179,3 +179,23 @@ auto BazelApi::CreateAction(
ArtifactDigest const& digest) const noexcept -> bool {
return network_->IsAvailable(digest);
}
+
+[[nodiscard]] auto BazelApi::IsAvailable(
+ std::vector<ArtifactDigest> const& digests) const noexcept
+ -> std::vector<ArtifactDigest> {
+ std::vector<bazel_re::Digest> bazel_digests;
+ bazel_digests.reserve(digests.size());
+ std::transform(digests.begin(),
+ digests.end(),
+ std::back_inserter(bazel_digests),
+ [](ArtifactDigest const& digest) { return digest; });
+ auto bazel_result = network_->IsAvailable(bazel_digests);
+ std::vector<ArtifactDigest> result;
+ result.reserve(bazel_result.size());
+ std::transform(
+ bazel_result.begin(),
+ bazel_result.end(),
+ std::back_inserter(result),
+ [](bazel_re::Digest& digest) { return ArtifactDigest{digest}; });
+ return result;
+}
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.hpp b/src/buildtool/execution_api/remote/bazel/bazel_api.hpp
index 8582db65..f953618e 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_api.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_api.hpp
@@ -57,6 +57,9 @@ class BazelApi final : public IExecutionApi {
[[nodiscard]] auto IsAvailable(ArtifactDigest const& digest) const noexcept
-> bool final;
+ [[nodiscard]] auto IsAvailable(std::vector<ArtifactDigest> const& digests)
+ const noexcept -> std::vector<ArtifactDigest> final;
+
private:
std::shared_ptr<BazelNetwork> network_;
std::shared_ptr<LocalTreeMap> tree_map_;
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
index 669f93dd..b1ef59c8 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
@@ -70,6 +70,11 @@ auto BazelNetwork::IsAvailable(bazel_re::Digest const& digest) const noexcept
.empty();
}
+auto BazelNetwork::IsAvailable(std::vector<bazel_re::Digest> const& digests)
+ const noexcept -> std::vector<bazel_re::Digest> {
+ return cas_->FindMissingBlobs(instance_name_, digests);
+}
+
template <class T_Iter>
auto BazelNetwork::DoUploadBlobs(T_Iter const& first,
T_Iter const& last) noexcept -> bool {
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp
index 644af2b4..13a5bcf7 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp
@@ -54,6 +54,9 @@ class BazelNetwork {
[[nodiscard]] auto IsAvailable(
bazel_re::Digest const& digest) const noexcept -> bool;
+ [[nodiscard]] auto IsAvailable(std::vector<bazel_re::Digest> const& digests)
+ const noexcept -> std::vector<bazel_re::Digest>;
+
/// \brief Uploads blobs to CAS
/// \param blobs The blobs to upload
/// \param skip_find_missing Skip finding missing blobs, just upload all