From a6d84f97fceaf2ef6ce2e3c86f25a7812e2f4f84 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Fri, 20 Dec 2024 15:44:09 +0100 Subject: TargetCache: use BackendDescription for sharding instead of a plain string --- src/buildtool/serve_api/serve_service/target.cpp | 4 ++-- src/buildtool/storage/target_cache.hpp | 18 +++++++++--------- src/buildtool/storage/target_cache.tpp | 2 +- src/buildtool/storage/uplinker.cpp | 2 +- src/buildtool/storage/uplinker.hpp | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp index 019a258b..6b46dbea 100644 --- a/src/buildtool/serve_api/serve_service/target.cpp +++ b/src/buildtool/serve_api/serve_service/target.cpp @@ -224,8 +224,8 @@ auto TargetService::ServeTarget( } // get a target cache instance with the correct computed shard - auto const tc = local_context_.storage->TargetCache().WithShard( - execution_backend_dgst->hash()); + auto const tc = + local_context_.storage->TargetCache().WithShard(*description); auto const tc_key = TargetCacheKey{{*target_cache_key_digest, ObjectType::File}}; diff --git a/src/buildtool/storage/target_cache.hpp b/src/buildtool/storage/target_cache.hpp index 08dc498c..d674a9ed 100644 --- a/src/buildtool/storage/target_cache.hpp +++ b/src/buildtool/storage/target_cache.hpp @@ -60,18 +60,16 @@ class TargetCache { : TargetCache(cas, config.target_cache, uplinker, - config.storage_config->backend_description - .HashContent(cas->GetHashFunction()) - .hash()) {} + config.storage_config->backend_description) {} /// \brief Returns a new TargetCache backed by the same CAS, but the /// FileStorage uses the given \p backend_description 's hash. This is /// particularly useful for the just-serve server implementation, since the /// sharding must be performed according to the client's request and not /// following the server configuration. - [[nodiscard]] auto WithShard(std::string backend_description) const + [[nodiscard]] auto WithShard(BackendDescription backend_description) const -> TargetCache { - if (backend_description_id_ == backend_description) { + if (backend_description_ == backend_description) { return *this; } @@ -139,17 +137,19 @@ class TargetCache { /*kSetEpochTime=*/false> file_store_; Uplinker const& uplinker_; - std::string const backend_description_id_; + BackendDescription const backend_description_; explicit TargetCache( gsl::not_null const*> const& cas, std::filesystem::path const& root, gsl::not_null const*> const& uplinker, - std::string backend_description_id) + BackendDescription backend_description) : cas_{*cas}, - file_store_{root / backend_description_id}, + file_store_{ + root / + backend_description.HashContent(cas->GetHashFunction()).hash()}, uplinker_{*uplinker}, - backend_description_id_{std::move(backend_description_id)} {} + backend_description_{std::move(backend_description)} {} template requires(kIsLocalGeneration) diff --git a/src/buildtool/storage/target_cache.tpp b/src/buildtool/storage/target_cache.tpp index f867d181..5a6acb88 100644 --- a/src/buildtool/storage/target_cache.tpp +++ b/src/buildtool/storage/target_cache.tpp @@ -79,7 +79,7 @@ auto TargetCache::Read( if constexpr (kDoGlobalUplink) { // Uplink any existing target cache entry in storage generations std::ignore = - uplinker_.UplinkTargetCacheEntry(key, backend_description_id_); + uplinker_.UplinkTargetCacheEntry(key, backend_description_); } auto const entry = diff --git a/src/buildtool/storage/uplinker.cpp b/src/buildtool/storage/uplinker.cpp index f5a291ae..f9e5c33f 100644 --- a/src/buildtool/storage/uplinker.cpp +++ b/src/buildtool/storage/uplinker.cpp @@ -100,7 +100,7 @@ auto GlobalUplinker::UplinkActionCacheEntry( auto GlobalUplinker::UplinkTargetCacheEntry( TargetCacheKey const& key, - std::string const& backend_description) const noexcept -> bool { + BackendDescription const& backend_description) const noexcept -> bool { // Try to find target-cache entry in all generations. auto const& latest = generations_[Generation::kYoungest].TargetCache().WithShard( diff --git a/src/buildtool/storage/uplinker.hpp b/src/buildtool/storage/uplinker.hpp index 56eaea43..015d23ee 100644 --- a/src/buildtool/storage/uplinker.hpp +++ b/src/buildtool/storage/uplinker.hpp @@ -15,12 +15,12 @@ #ifndef INCLUDED_SRC_BUILDTOOL_STORAGE_UPLINKER_HPP #define INCLUDED_SRC_BUILDTOOL_STORAGE_UPLINKER_HPP -#include #include #include #include "gsl/gsl" #include "src/buildtool/common/artifact_digest.hpp" +#include "src/buildtool/storage/backend_description.hpp" #include "src/buildtool/storage/config.hpp" template @@ -77,7 +77,7 @@ class GlobalUplinker final { /// \returns true if cache entry was found and successfully uplinked. [[nodiscard]] auto UplinkTargetCacheEntry( TargetCacheKey const& key, - std::string const& backend_description) const noexcept -> bool; + BackendDescription const& backend_description) const noexcept -> bool; private: StorageConfig const& storage_config_; -- cgit v1.2.3