Only add node to the log file when needed
We were adding an empty node to the log file when run in a single-node
setup. Add a test and don't add a node instead.
Change-Id: I9c579140705adb7e85aaf3e17e1dea75bf75776d
diff --git a/aos/configuration.cc b/aos/configuration.cc
index 65c218e..46f07ac 100644
--- a/aos/configuration.cc
+++ b/aos/configuration.cc
@@ -603,7 +603,10 @@
}
const Node *GetNode(const Configuration *config, std::string_view name) {
+ CHECK(config->has_nodes())
+ << ": Asking for a node from a single node configuration.";
for (const Node *node : *config->nodes()) {
+ CHECK(node->has_name()) << ": Malformed node " << FlatbufferToJson(node);
if (node->name()->string_view() == name) {
return node;
}
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index 6eae9e9..2942ab7 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -164,15 +164,20 @@
flatbuffers::Offset<flatbuffers::String> string_offset =
fbb.CreateString(network::GetHostname());
- flatbuffers::Offset<Node> node_offset =
- CopyFlatBuffer(event_loop_->node(), &fbb);
+ flatbuffers::Offset<Node> node_offset;
+ if (event_loop_->node() != nullptr) {
+ node_offset = CopyFlatBuffer(event_loop_->node(), &fbb);
+ }
LOG(INFO) << "Logging node as " << FlatbufferToJson(event_loop_->node());
aos::logger::LogFileHeader::Builder log_file_header_builder(fbb);
log_file_header_builder.add_name(string_offset);
- log_file_header_builder.add_node(node_offset);
+ // Only add the node if we are running in a multinode configuration.
+ if (event_loop_->node() != nullptr) {
+ log_file_header_builder.add_node(node_offset);
+ }
log_file_header_builder.add_configuration(configuration_offset);
// The worst case theoretical out of order is the polling period times 2.
@@ -448,12 +453,24 @@
}
const Node *LogReader::node() const {
- return configuration::GetNode(
- configuration(),
- flatbuffers::GetSizePrefixedRoot<LogFileHeader>(configuration_.data())
- ->node()
- ->name()
- ->string_view());
+ if (configuration()->has_nodes()) {
+ CHECK(flatbuffers::GetSizePrefixedRoot<LogFileHeader>(configuration_.data())
+ ->has_node());
+ CHECK(flatbuffers::GetSizePrefixedRoot<LogFileHeader>(configuration_.data())
+ ->node()
+ ->has_name());
+ return configuration::GetNode(
+ configuration(),
+ flatbuffers::GetSizePrefixedRoot<LogFileHeader>(configuration_.data())
+ ->node()
+ ->name()
+ ->string_view());
+ } else {
+ CHECK(
+ !flatbuffers::GetSizePrefixedRoot<LogFileHeader>(configuration_.data())
+ ->has_node());
+ return nullptr;
+ }
}
monotonic_clock::time_point LogReader::monotonic_start_time() {
diff --git a/aos/events/logging/logger_test.cc b/aos/events/logging/logger_test.cc
index 02a9a14..4feb401 100644
--- a/aos/events/logging/logger_test.cc
+++ b/aos/events/logging/logger_test.cc
@@ -62,6 +62,7 @@
LogReader reader(logfile);
LOG(INFO) << "Config " << FlatbufferToJson(reader.configuration());
+ EXPECT_EQ(reader.node(), nullptr);
SimulatedEventLoopFactory log_reader_factory(reader.configuration());