Skip to content

Commit a53f91d

Browse files
committed
Link Group level logs to instance log directory
So the host orchestrator can find them. Bug: 444758816
1 parent 44d49b2 commit a53f91d

File tree

4 files changed

+48
-0
lines changed

4 files changed

+48
-0
lines changed

base/cvd/cuttlefish/host/commands/assemble_cvd/disk_image_flags_vectorization.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ Result<void> DiskImageFlagsVectorization(
9999
CF_EXPECT(InstanceNumsCalculator().FromGlobalGflags().Calculate());
100100
for (const auto& num : instance_nums) {
101101
auto instance = config.ForInstance(num);
102+
instance.set_images_dir(system_image_dir.ForIndex(instance_index));
102103
std::string cur_boot_image = boot_image.BootImageForIndex(instance_index);
103104
instance.set_boot_image(cur_boot_image);
104105
instance.set_new_boot_image(cur_boot_image);

base/cvd/cuttlefish/host/commands/start/main.cc

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <android-base/logging.h>
2323
#include <android-base/no_destructor.h>
2424
#include <android-base/parseint.h>
25+
#include <fmt/format.h>
2526
#include <gflags/gflags.h>
2627

2728
#include "cuttlefish/common/libs/fs/shared_fd.h"
@@ -168,6 +169,36 @@ const std::unordered_set<std::string>& BoolFlags() {
168169
return *bool_flags;
169170
}
170171

172+
Result<void> LinkLogs2InstanceDir(
173+
const std::string& config_path, const CuttlefishConfig& config,
174+
const CuttlefishConfig::InstanceSpecific& instance) {
175+
CF_EXPECT(EnsureDirectoryExists(instance.PerInstanceLogPath("")));
176+
177+
CF_EXPECT(CreateSymLink(
178+
config_path,
179+
instance.PerInstanceLogPath(android::base::Basename(config_path)),
180+
false));
181+
182+
std::string assemble_cvd_logs = config.AssemblyPath("assemble_cvd.log");
183+
CF_EXPECT(CreateSymLink(assemble_cvd_logs,
184+
instance.PerInstanceLogPath("assemble_cvd.log")));
185+
186+
std::string images_dir = instance.images_dir();
187+
std::string fetch_log = fmt::format("{}/{}", images_dir, "fetch.log");
188+
if (!FileExists(fetch_log)) {
189+
// The fetch.log file can be in the same directory as the downloaded
190+
// instances or its parent directory if --target_subdirectory was used.
191+
fetch_log =
192+
fmt::format("{}/{}", android::base::Dirname(images_dir), "fetch.log");
193+
}
194+
if (FileExists(fetch_log)) {
195+
CF_EXPECT(
196+
CreateSymLink(fetch_log, instance.PerInstanceLogPath("fetch.log")));
197+
}
198+
199+
return {};
200+
}
201+
171202
int CvdInternalStartMain(int argc, char** argv) {
172203
::android::base::InitLogging(argv, android::base::StderrLogger);
173204

@@ -281,6 +312,12 @@ int CvdInternalStartMain(int argc, char** argv) {
281312

282313
std::vector<Subprocess> runners;
283314
for (const auto& instance : config->Instances()) {
315+
Result<void> link_res =
316+
LinkLogs2InstanceDir(conf_path, *config, instance);
317+
if (!link_res.ok()) {
318+
LOG(ERROR) << "Failed to link logs to instance dir: "
319+
<< link_res.error().FormatForEnv();
320+
}
284321
SharedFD runner_stdin = SharedFD::Open("/dev/null", O_RDONLY);
285322
CHECK(runner_stdin->IsOpen()) << runner_stdin->StrError();
286323
setenv(kCuttlefishInstanceEnvVarName, instance.id().c_str(),

base/cvd/cuttlefish/host/libs/config/cuttlefish_config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,7 @@ class CuttlefishConfig {
573573
bool restart_subprocesses() const;
574574

575575
// android artifacts
576+
std::string images_dir() const;
576577
std::string boot_image() const;
577578
std::string new_boot_image() const;
578579
std::string init_boot_image() const;
@@ -808,6 +809,7 @@ class CuttlefishConfig {
808809
void set_restart_subprocesses(bool restart_subprocesses);
809810

810811
// system image files
812+
void set_images_dir(const std::string& dir);
811813
void set_boot_image(const std::string& boot_image);
812814
void set_new_boot_image(const std::string& new_boot_image);
813815
void set_init_boot_image(const std::string& init_boot_image);

base/cvd/cuttlefish/host/libs/config/cuttlefish_config_instance.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ bool CuttlefishConfig::InstanceSpecific::use_bootloader() const {
100100
};
101101

102102
// vectorized and moved system image files into instance specific
103+
static constexpr char kImagesDir[] = "images_dir";
104+
std::string CuttlefishConfig::InstanceSpecific::images_dir() const {
105+
return (*Dictionary())[kImagesDir].asString();
106+
}
107+
void CuttlefishConfig::MutableInstanceSpecific::set_images_dir(
108+
const std::string& dir) {
109+
(*Dictionary())[kImagesDir] = dir;
110+
}
103111
static constexpr char kBootImage[] = "boot_image";
104112
std::string CuttlefishConfig::InstanceSpecific::boot_image() const {
105113
return (*Dictionary())[kBootImage].asString();

0 commit comments

Comments
 (0)