From c1f93f066b1d131c08b2f4bb6cdeae8ca69acd90 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Mon, 15 Apr 2024 15:00:45 +0200 Subject: Absent targets: support registering the serve failure logs ... in a structured way to eventually support machine-readable access to the identifiers of the log files. --- .../build_engine/target_map/absent_target_map.cpp | 21 +++++++++++++++++---- .../build_engine/target_map/absent_target_map.hpp | 7 ++++++- src/buildtool/main/TARGETS | 2 +- src/buildtool/main/analyse.cpp | 7 +++++-- src/buildtool/main/analyse.hpp | 5 ++++- 5 files changed, 33 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/buildtool/build_engine/target_map/absent_target_map.cpp b/src/buildtool/build_engine/target_map/absent_target_map.cpp index 2aad0b99..3110f863 100644 --- a/src/buildtool/build_engine/target_map/absent_target_map.cpp +++ b/src/buildtool/build_engine/target_map/absent_target_map.cpp @@ -35,7 +35,8 @@ void WithFlexibleVariables( const BuildMaps::Target::AbsentTargetMap::LoggerPtr& logger, const gsl::not_null result_map, gsl::not_null const& stats, - gsl::not_null const& exports_progress) { + gsl::not_null const& exports_progress, + BuildMaps::Target::ServeFailureLogReporter* serve_failure_reporter) { auto effective_config = key.config.Prune(flexible_vars); if (key.config != effective_config) { (*subcaller)( @@ -89,6 +90,9 @@ void WithFlexibleVariables( return; } if (res->index() == 0) { + if (serve_failure_reporter != nullptr) { + (*serve_failure_reporter)(key, std::get<0>(*res)); + } (*logger)(fmt::format("Failure to remotely analyse or build absent " "target {}\nDetailed log available on the " "remote-execution endpoint as blob {}", @@ -201,10 +205,17 @@ auto BuildMaps::Target::CreateAbsentTargetMap( gsl::not_null const& repo_config, gsl::not_null const& stats, gsl::not_null const& exports_progress, - std::size_t jobs) -> AbsentTargetMap { + std::size_t jobs, + BuildMaps::Target::ServeFailureLogReporter* serve_failure_reporter) + -> AbsentTargetMap { #ifndef BOOTSTRAP_BUILD_TOOL auto target_reader = - [result_map, repo_config, stats, exports_progress, absent_variables]( + [result_map, + repo_config, + stats, + exports_progress, + absent_variables, + serve_failure_reporter]( auto ts, auto setter, auto logger, auto subcaller, auto key) { // assumptions: // - target with absent targets file requested @@ -230,6 +241,7 @@ auto BuildMaps::Target::CreateAbsentTargetMap( setter, repo_config, logger, + serve_failure_reporter, result_map, stats, exports_progress, @@ -242,7 +254,8 @@ auto BuildMaps::Target::CreateAbsentTargetMap( logger, result_map, stats, - exports_progress); + exports_progress, + serve_failure_reporter); }, [logger, target = key.target](auto const& msg, auto fatal) { (*logger)(fmt::format("While requested the flexible " diff --git a/src/buildtool/build_engine/target_map/absent_target_map.hpp b/src/buildtool/build_engine/target_map/absent_target_map.hpp index a3f92889..4980519a 100644 --- a/src/buildtool/build_engine/target_map/absent_target_map.hpp +++ b/src/buildtool/build_engine/target_map/absent_target_map.hpp @@ -16,6 +16,7 @@ #define INCLUDED_SRC_BUILDTOOL_BUILD_ENGINE_TARGET_MAP_ABSENT_TARGET_MAP_HPP #include +#include #include #include @@ -46,6 +47,8 @@ struct AbsentTargetDescription { using AbsentTargetMap = AsyncMapConsumer; using AbsentTargetVariablesMap = AsyncMapConsumer>; +using ServeFailureLogReporter = + std::function; auto CreateAbsentTargetVariablesMap(std::size_t jobs = 0) -> AbsentTargetVariablesMap; @@ -55,7 +58,9 @@ auto CreateAbsentTargetMap(const gsl::not_null&, gsl::not_null const& repo_config, gsl::not_null const& stats, gsl::not_null const& exports_progress, - std::size_t jobs = 0) -> AbsentTargetMap; + std::size_t jobs = 0, + ServeFailureLogReporter* serve_failure_reporter = + nullptr) -> AbsentTargetMap; } // namespace BuildMaps::Target diff --git a/src/buildtool/main/TARGETS b/src/buildtool/main/TARGETS index 602e31b8..4f439201 100644 --- a/src/buildtool/main/TARGETS +++ b/src/buildtool/main/TARGETS @@ -152,6 +152,7 @@ [ ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "cli"] , ["src/buildtool/common", "common"] + , ["src/buildtool/build_engine/target_map", "absent_target_map"] , ["src/buildtool/build_engine/target_map", "configured_target"] , ["src/buildtool/build_engine/target_map", "result_map"] , ["src/buildtool/build_engine/analysed_target", "target"] @@ -170,7 +171,6 @@ , ["src/buildtool/build_engine/base_maps", "rule_map"] , ["src/buildtool/build_engine/base_maps", "source_map"] , ["src/buildtool/build_engine/base_maps", "targets_file_map"] - , ["src/buildtool/build_engine/target_map", "absent_target_map"] , ["src/buildtool/build_engine/target_map", "target_map"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/progress_reporting", "exports_progress_reporter"] diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp index 506000bb..78aee957 100644 --- a/src/buildtool/main/analyse.cpp +++ b/src/buildtool/main/analyse.cpp @@ -101,7 +101,9 @@ namespace Target = BuildMaps::Target; gsl::not_null const& stats, std::size_t jobs, std::optional const& request_action_input, - Logger const* logger) -> std::optional { + Logger const* logger, + BuildMaps::Target::ServeFailureLogReporter* serve_log) + -> std::optional { // create progress tracker for export targets Progress exports_progress{}; // create async maps @@ -124,7 +126,8 @@ namespace Target = BuildMaps::Target; repo_config, stats, &exports_progress, - jobs); + jobs, + serve_log); auto target_map = Target::CreateTargetMap(&source_targets, &targets_file_map, &rule_map, diff --git a/src/buildtool/main/analyse.hpp b/src/buildtool/main/analyse.hpp index f93e0dda..267c99b8 100644 --- a/src/buildtool/main/analyse.hpp +++ b/src/buildtool/main/analyse.hpp @@ -21,6 +21,7 @@ #include "gsl/gsl" #include "src/buildtool/build_engine/analysed_target/analysed_target.hpp" +#include "src/buildtool/build_engine/target_map/absent_target_map.hpp" #include "src/buildtool/build_engine/target_map/configured_target.hpp" #include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/common/cli.hpp" @@ -43,5 +44,7 @@ struct AnalysisResult { gsl::not_null const& stats, std::size_t jobs, std::optional const& request_action_input, - Logger const* logger = nullptr) -> std::optional; + Logger const* logger = nullptr, + BuildMaps::Target::ServeFailureLogReporter* = nullptr) + -> std::optional; #endif -- cgit v1.2.3