summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-02-25 13:58:28 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-02-27 09:03:30 +0100
commita5e3bc0b304e87e06865f0558acf88995d466b7c (patch)
treed7e3e1fe02c43c9b855bf51e8d9e9d08739de786
parent3078ed932e29c7fa578c95d1198bd1f75096b068 (diff)
downloadjustbuild-a5e3bc0b304e87e06865f0558acf88995d466b7c.tar.gz
BazelNetworkReader: Remove additional validation
...since ArtifactBlob rehashes data on construction and guarantees that the digest matches the content.
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp50
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp3
2 files changed, 4 insertions, 49 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
index b8cb7eae..4dda2425 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
@@ -179,11 +179,7 @@ auto BazelNetworkReader::MakeAuxiliaryMap(
auto BazelNetworkReader::ReadSingleBlob(ArtifactDigest const& digest)
const noexcept -> std::optional<ArtifactBlob> {
- auto blob = cas_.ReadSingleBlob(instance_name_, digest);
- if (not blob or not Validate(*blob)) {
- return std::nullopt;
- }
- return blob;
+ return cas_.ReadSingleBlob(instance_name_, digest);
}
auto BazelNetworkReader::ReadIncrementally(
@@ -208,55 +204,17 @@ auto BazelNetworkReader::BatchReadBlobs(
return {};
}
+ // Restore the requested order:
std::vector<ArtifactBlob> artifacts;
artifacts.reserve(digests.size());
-
- // To not validate blobs several times, hash the result of validation:
- std::unordered_map<std::size_t, ArtifactBlob const*> validated;
- validated.reserve(digests.size());
-
- auto const hasher = std::hash<ArtifactDigest>{};
for (ArtifactDigest const& digest : digests) {
- std::size_t const hash = std::invoke(hasher, digest);
- // If the blob has been validated already, just return the result:
- if (auto it = validated.find(hash); it != validated.end()) {
- if (it->second != nullptr) {
- artifacts.push_back(*it->second);
- }
- continue;
- }
-
- // Blob hasn't been processed yet, perform validation:
- auto value = back_map->GetReference(digest);
- if (not value.has_value()) {
- continue;
- }
-
- if (Validate(*value.value())) {
- validated[hash] = &artifacts.emplace_back(*value.value());
- }
- else {
- validated[hash] = nullptr;
+ if (auto value = back_map->GetReference(digest)) {
+ artifacts.emplace_back(*value.value());
}
}
return artifacts;
}
-auto BazelNetworkReader::Validate(ArtifactBlob const& blob) const noexcept
- -> bool {
- auto const content = blob.ReadContent();
- if (content == nullptr) {
- return false;
- }
-
- auto rehashed = blob.GetDigest().IsTree()
- ? ArtifactDigestFactory::HashDataAs<ObjectType::Tree>(
- hash_function_, *content)
- : ArtifactDigestFactory::HashDataAs<ObjectType::File>(
- hash_function_, *content);
- return rehashed == blob.GetDigest();
-}
-
auto BazelNetworkReader::GetMaxBatchTransferSize() const noexcept
-> std::size_t {
return cas_.GetMaxBatchTransferSize(instance_name_);
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp
index 51b9e4b4..cf674ca1 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp
@@ -95,9 +95,6 @@ class BazelNetworkReader final {
-> std::vector<ArtifactBlob>;
[[nodiscard]] auto GetMaxBatchTransferSize() const noexcept -> std::size_t;
-
- [[nodiscard]] auto Validate(ArtifactBlob const& blob) const noexcept
- -> bool;
};
class BazelNetworkReader::IncrementalReader final {