summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/target_map/export.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/build_engine/target_map/export.cpp')
-rw-r--r--src/buildtool/build_engine/target_map/export.cpp58
1 files changed, 36 insertions, 22 deletions
diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp
index 06b80c26..50238b26 100644
--- a/src/buildtool/build_engine/target_map/export.cpp
+++ b/src/buildtool/build_engine/target_map/export.cpp
@@ -20,6 +20,10 @@
#include "src/buildtool/build_engine/expression/configuration.hpp"
#include "src/buildtool/common/statistics.hpp"
#include "src/buildtool/storage/storage.hpp"
+#ifndef BOOTSTRAP_BUILD_TOOL
+#include "src/buildtool/serve_api/remote/config.hpp"
+#include "src/buildtool/serve_api/remote/serve_api.hpp"
+#endif // BOOTSTRAP_BUILD_TOOL
namespace {
auto const kExpectedFields = std::unordered_set<std::string>{"config_doc",
@@ -79,17 +83,6 @@ void FinalizeExport(
(*setter)(std::move(analysis_result));
}
-[[nodiscard]] auto ComputeTargetCacheKey(
- BuildMaps::Base::EntityName const& export_target,
- gsl::not_null<RepositoryConfig*> const& repo_config,
- Configuration const& target_config) -> std::optional<TargetCacheKey> {
- auto const& target_name = export_target.GetNamedTarget();
- if (auto repo_key = repo_config->RepositoryKey(target_name.repository)) {
- return TargetCacheKey::Create(*repo_key, target_name, target_config);
- }
- return std::nullopt;
-}
-
} // namespace
void ExportRule(
@@ -107,12 +100,39 @@ void ExportRule(
return;
}
auto effective_config = key.config.Prune(*flexible_vars);
+ auto const& target_name = key.target.GetNamedTarget();
+ auto repo_key = repo_config->RepositoryKey(target_name.repository);
auto target_cache_key =
- ComputeTargetCacheKey(key.target, repo_config, effective_config);
+ repo_key
+ ? TargetCacheKey::Create(*repo_key, target_name, effective_config)
+ : std::nullopt;
if (target_cache_key) {
- if (auto target_cache_value =
- Storage::Instance().TargetCache().Read(*target_cache_key)) {
+ // first try to get value from local target cache
+ auto target_cache_value =
+ Storage::Instance().TargetCache().Read(*target_cache_key);
+ bool from_just_serve{false};
+
+#ifndef BOOTSTRAP_BUILD_TOOL
+ // if not found locally, try the serve endpoint
+ if (not target_cache_value and RemoteServeConfig::RemoteAddress()) {
+ Logger::Log(LogLevel::Debug,
+ "Querying just serve for export target {}",
+ key.target.ToString());
+ target_cache_value =
+ ServeApi::ServeTarget(*target_cache_key, *repo_key);
+ from_just_serve = true;
+ }
+#endif // BOOTSTRAP_BUILD_TOOL
+
+ if (not target_cache_value) {
+ Statistics::Instance().IncrementExportsUncachedCounter();
+ Logger::Log(LogLevel::Performance,
+ "Export target {} registered for caching: {}",
+ key.target.ToString(),
+ target_cache_key->Id().ToString());
+ }
+ else {
auto const& [entry, info] = *target_cache_value;
if (auto result = entry.ToResult()) {
auto deps_info = TargetGraphInformation{
@@ -140,8 +160,9 @@ void ExportRule(
true);
Logger::Log(LogLevel::Performance,
- "Export target {} served from cache: {} -> {}",
+ "Export target {} served from {}: {} -> {}",
key.target.ToString(),
+ (from_just_serve ? "just-serve" : "cache"),
target_cache_key->Id().ToString(),
info.ToString());
@@ -153,13 +174,6 @@ void ExportRule(
target_cache_key->Id().ToString()),
false);
}
- else {
- Statistics::Instance().IncrementExportsUncachedCounter();
- Logger::Log(LogLevel::Performance,
- "Export target {} registered for caching: {}",
- key.target.ToString(),
- target_cache_key->Id().ToString());
- }
}
else {
Statistics::Instance().IncrementExportsNotEligibleCounter();