diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-25 13:58:28 +0100 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-27 09:03:30 +0100 |
commit | a5e3bc0b304e87e06865f0558acf88995d466b7c (patch) | |
tree | d7e3e1fe02c43c9b855bf51e8d9e9d08739de786 /src/buildtool/execution_api/remote | |
parent | 3078ed932e29c7fa578c95d1198bd1f75096b068 (diff) | |
download | justbuild-a5e3bc0b304e87e06865f0558acf88995d466b7c.tar.gz |
BazelNetworkReader: Remove additional validation
...since ArtifactBlob rehashes data on construction and guarantees that the digest matches the content.
Diffstat (limited to 'src/buildtool/execution_api/remote')
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp | 50 | ||||
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp | 3 |
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 { |