Actually populate boot_uuids in the header
Now that we have all the infrastructure, actually populate the header
and start tracking it. This disambiguates boots.
We still need some sort of timestamp to help make it more clear which
boot comes first and not rely on parts_index.
Change-Id: I00d0cdf4cf78905a11e9966f44b22e115851e8e0
Signed-off-by: Austin Schuh <austin.schuh@bluerivertech.com>
diff --git a/aos/events/logging/logger_test.cc b/aos/events/logging/logger_test.cc
index a7d627d..a02f4ea 100644
--- a/aos/events/logging/logger_test.cc
+++ b/aos/events/logging/logger_test.cc
@@ -483,18 +483,26 @@
bool shared() const { return GetParam().shared; }
std::vector<std::string> MakeLogFiles(std::string logfile_base1,
- std::string logfile_base2) {
+ std::string logfile_base2,
+ size_t pi1_data_count = 2,
+ size_t pi2_data_count = 2) {
std::vector<std::string> result;
result.emplace_back(
absl::StrCat(logfile_base1, "_", GetParam().sha256, ".bfbs"));
result.emplace_back(
absl::StrCat(logfile_base2, "_", GetParam().sha256, ".bfbs"));
- result.emplace_back(logfile_base1 + "_pi1_data.part0.bfbs");
+ for (size_t i = 0; i < pi1_data_count; ++i) {
+ result.emplace_back(
+ absl::StrCat(logfile_base1, "_pi1_data.part", i, ".bfbs"));
+ }
result.emplace_back(logfile_base1 +
"_pi2_data/test/aos.examples.Pong.part0.bfbs");
result.emplace_back(logfile_base1 +
"_pi2_data/test/aos.examples.Pong.part1.bfbs");
- result.emplace_back(logfile_base2 + "_pi2_data.part0.bfbs");
+ for (size_t i = 0; i < pi2_data_count; ++i) {
+ result.emplace_back(
+ absl::StrCat(logfile_base2, "_pi2_data.part", i, ".bfbs"));
+ }
result.emplace_back(
logfile_base2 +
"_pi1_data/pi1/aos/aos.message_bridge.Timestamp.part0.bfbs");
@@ -553,6 +561,8 @@
std::vector<std::string> MakePi1RebootLogfiles() {
std::vector<std::string> result;
result.emplace_back(logfile_base1_ + "_pi1_data.part0.bfbs");
+ result.emplace_back(logfile_base1_ + "_pi1_data.part1.bfbs");
+ result.emplace_back(logfile_base1_ + "_pi1_data.part2.bfbs");
result.emplace_back(logfile_base1_ +
"_pi2_data/test/aos.examples.Pong.part0.bfbs");
result.emplace_back(logfile_base1_ +
@@ -640,17 +650,17 @@
std::vector<std::vector<std::string>> StructureLogFiles() {
std::vector<std::vector<std::string>> result{
- std::vector<std::string>{logfiles_[2]},
- std::vector<std::string>{logfiles_[3], logfiles_[4]},
- std::vector<std::string>{logfiles_[5]},
+ std::vector<std::string>{logfiles_[2], logfiles_[3]},
+ std::vector<std::string>{logfiles_[4], logfiles_[5]},
std::vector<std::string>{logfiles_[6], logfiles_[7]},
std::vector<std::string>{logfiles_[8], logfiles_[9]},
std::vector<std::string>{logfiles_[10], logfiles_[11]},
- std::vector<std::string>{logfiles_[12], logfiles_[13]}};
+ std::vector<std::string>{logfiles_[12], logfiles_[13]},
+ std::vector<std::string>{logfiles_[14], logfiles_[15]}};
if (!shared()) {
result.emplace_back(
- std::vector<std::string>{logfiles_[14], logfiles_[15]});
+ std::vector<std::string>{logfiles_[16], logfiles_[17]});
}
return result;
@@ -929,27 +939,29 @@
// And confirm everything is on the correct node.
EXPECT_EQ(log_header[2].message().node()->name()->string_view(), "pi1");
- EXPECT_EQ(log_header[3].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[3].message().node()->name()->string_view(), "pi1");
EXPECT_EQ(log_header[4].message().node()->name()->string_view(), "pi2");
EXPECT_EQ(log_header[5].message().node()->name()->string_view(), "pi2");
- EXPECT_EQ(log_header[6].message().node()->name()->string_view(), "pi1");
- EXPECT_EQ(log_header[7].message().node()->name()->string_view(), "pi1");
- EXPECT_EQ(log_header[8].message().node()->name()->string_view(), "pi2");
- EXPECT_EQ(log_header[9].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[6].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[7].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[8].message().node()->name()->string_view(), "pi1");
+ EXPECT_EQ(log_header[9].message().node()->name()->string_view(), "pi1");
EXPECT_EQ(log_header[10].message().node()->name()->string_view(), "pi2");
EXPECT_EQ(log_header[11].message().node()->name()->string_view(), "pi2");
- EXPECT_EQ(log_header[12].message().node()->name()->string_view(), "pi1");
- EXPECT_EQ(log_header[13].message().node()->name()->string_view(), "pi1");
+ EXPECT_EQ(log_header[12].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[13].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[14].message().node()->name()->string_view(), "pi1");
+ EXPECT_EQ(log_header[15].message().node()->name()->string_view(), "pi1");
if (!shared()) {
- EXPECT_EQ(log_header[14].message().node()->name()->string_view(), "pi2");
- EXPECT_EQ(log_header[15].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[16].message().node()->name()->string_view(), "pi2");
+ EXPECT_EQ(log_header[17].message().node()->name()->string_view(), "pi2");
}
// And the parts index matches.
EXPECT_EQ(log_header[2].message().parts_index(), 0);
- EXPECT_EQ(log_header[3].message().parts_index(), 0);
- EXPECT_EQ(log_header[4].message().parts_index(), 1);
- EXPECT_EQ(log_header[5].message().parts_index(), 0);
+ EXPECT_EQ(log_header[3].message().parts_index(), 1);
+ EXPECT_EQ(log_header[4].message().parts_index(), 0);
+ EXPECT_EQ(log_header[5].message().parts_index(), 1);
EXPECT_EQ(log_header[6].message().parts_index(), 0);
EXPECT_EQ(log_header[7].message().parts_index(), 1);
EXPECT_EQ(log_header[8].message().parts_index(), 0);
@@ -958,9 +970,11 @@
EXPECT_EQ(log_header[11].message().parts_index(), 1);
EXPECT_EQ(log_header[12].message().parts_index(), 0);
EXPECT_EQ(log_header[13].message().parts_index(), 1);
+ EXPECT_EQ(log_header[14].message().parts_index(), 0);
+ EXPECT_EQ(log_header[15].message().parts_index(), 1);
if (!shared()) {
- EXPECT_EQ(log_header[14].message().parts_index(), 0);
- EXPECT_EQ(log_header[15].message().parts_index(), 1);
+ EXPECT_EQ(log_header[16].message().parts_index(), 0);
+ EXPECT_EQ(log_header[17].message().parts_index(), 1);
}
}
@@ -974,161 +988,178 @@
EXPECT_THAT(
CountChannelsData(config, logfiles_[2]),
UnorderedElementsAre(
+ std::make_tuple("/pi1/aos", "aos.message_bridge.ServerStatistics",
+ 1),
+ std::make_tuple("/test", "aos.examples.Ping", 1)))
+ << " : " << logfiles_[2];
+ EXPECT_THAT(
+ CountChannelsData(config, logfiles_[3]),
+ UnorderedElementsAre(
std::make_tuple("/pi1/aos", "aos.message_bridge.Timestamp", 200),
std::make_tuple("/pi1/aos", "aos.message_bridge.ServerStatistics",
- 21),
+ 20),
std::make_tuple("/pi1/aos", "aos.message_bridge.ClientStatistics",
200),
std::make_tuple("/pi1/aos", "aos.timing.Report", 40),
- std::make_tuple("/test", "aos.examples.Ping", 2001)))
- << " : " << logfiles_[2];
+ std::make_tuple("/test", "aos.examples.Ping", 2000)))
+ << " : " << logfiles_[3];
// Timestamps for pong
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[2]),
+ UnorderedElementsAre())
+ << " : " << logfiles_[2];
EXPECT_THAT(
- CountChannelsTimestamp(config, logfiles_[2]),
+ CountChannelsTimestamp(config, logfiles_[3]),
UnorderedElementsAre(
std::make_tuple("/test", "aos.examples.Pong", 2001),
std::make_tuple("/pi2/aos", "aos.message_bridge.Timestamp", 200)))
- << " : " << logfiles_[2];
+ << " : " << logfiles_[3];
// Pong data.
EXPECT_THAT(
- CountChannelsData(config, logfiles_[3]),
+ CountChannelsData(config, logfiles_[4]),
UnorderedElementsAre(std::make_tuple("/test", "aos.examples.Pong", 91)))
- << " : " << logfiles_[3];
- EXPECT_THAT(CountChannelsData(config, logfiles_[4]),
+ << " : " << logfiles_[4];
+ EXPECT_THAT(CountChannelsData(config, logfiles_[5]),
UnorderedElementsAre(
std::make_tuple("/test", "aos.examples.Pong", 1910)))
- << " : " << logfiles_[3];
+ << " : " << logfiles_[5];
// No timestamps
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[3]),
- UnorderedElementsAre())
- << " : " << logfiles_[3];
EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[4]),
UnorderedElementsAre())
<< " : " << logfiles_[4];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[5]),
+ UnorderedElementsAre())
+ << " : " << logfiles_[5];
// Timing reports and pongs.
+ EXPECT_THAT(CountChannelsData(config, logfiles_[6]),
+ UnorderedElementsAre(std::make_tuple(
+ "/pi2/aos", "aos.message_bridge.ServerStatistics", 1)))
+ << " : " << logfiles_[6];
EXPECT_THAT(
- CountChannelsData(config, logfiles_[5]),
+ CountChannelsData(config, logfiles_[7]),
UnorderedElementsAre(
std::make_tuple("/pi2/aos", "aos.message_bridge.Timestamp", 200),
std::make_tuple("/pi2/aos", "aos.message_bridge.ServerStatistics",
- 21),
+ 20),
std::make_tuple("/pi2/aos", "aos.message_bridge.ClientStatistics",
200),
std::make_tuple("/pi2/aos", "aos.timing.Report", 40),
std::make_tuple("/test", "aos.examples.Pong", 2001)))
- << " : " << logfiles_[5];
+ << " : " << logfiles_[7];
// And ping timestamps.
- EXPECT_THAT(
- CountChannelsTimestamp(config, logfiles_[5]),
- UnorderedElementsAre(
- std::make_tuple("/test", "aos.examples.Ping", 2001),
- std::make_tuple("/pi1/aos", "aos.message_bridge.Timestamp", 200)))
- << " : " << logfiles_[5];
-
- // And then test that the remotely logged timestamp data files only have
- // timestamps in them.
EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[6]),
UnorderedElementsAre())
<< " : " << logfiles_[6];
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[7]),
- UnorderedElementsAre())
+ EXPECT_THAT(
+ CountChannelsTimestamp(config, logfiles_[7]),
+ UnorderedElementsAre(
+ std::make_tuple("/test", "aos.examples.Ping", 2001),
+ std::make_tuple("/pi1/aos", "aos.message_bridge.Timestamp", 200)))
<< " : " << logfiles_[7];
+
+ // And then test that the remotely logged timestamp data files only have
+ // timestamps in them.
EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[8]),
UnorderedElementsAre())
<< " : " << logfiles_[8];
EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[9]),
UnorderedElementsAre())
<< " : " << logfiles_[9];
-
- EXPECT_THAT(CountChannelsData(config, logfiles_[6]),
- UnorderedElementsAre(std::make_tuple(
- "/pi1/aos", "aos.message_bridge.Timestamp", 9)))
- << " : " << logfiles_[6];
- EXPECT_THAT(CountChannelsData(config, logfiles_[7]),
- UnorderedElementsAre(std::make_tuple(
- "/pi1/aos", "aos.message_bridge.Timestamp", 191)))
- << " : " << logfiles_[7];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[10]),
+ UnorderedElementsAre())
+ << " : " << logfiles_[10];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[11]),
+ UnorderedElementsAre())
+ << " : " << logfiles_[11];
EXPECT_THAT(CountChannelsData(config, logfiles_[8]),
UnorderedElementsAre(std::make_tuple(
- "/pi2/aos", "aos.message_bridge.Timestamp", 9)))
+ "/pi1/aos", "aos.message_bridge.Timestamp", 9)))
<< " : " << logfiles_[8];
EXPECT_THAT(CountChannelsData(config, logfiles_[9]),
UnorderedElementsAre(std::make_tuple(
- "/pi2/aos", "aos.message_bridge.Timestamp", 191)))
+ "/pi1/aos", "aos.message_bridge.Timestamp", 191)))
<< " : " << logfiles_[9];
- // Timestamps from pi2 on pi1, and the other way.
EXPECT_THAT(CountChannelsData(config, logfiles_[10]),
- UnorderedElementsAre())
+ UnorderedElementsAre(std::make_tuple(
+ "/pi2/aos", "aos.message_bridge.Timestamp", 9)))
<< " : " << logfiles_[10];
EXPECT_THAT(CountChannelsData(config, logfiles_[11]),
- UnorderedElementsAre())
+ UnorderedElementsAre(std::make_tuple(
+ "/pi2/aos", "aos.message_bridge.Timestamp", 191)))
<< " : " << logfiles_[11];
+
+ // Timestamps from pi2 on pi1, and the other way.
EXPECT_THAT(CountChannelsData(config, logfiles_[12]),
UnorderedElementsAre())
<< " : " << logfiles_[12];
EXPECT_THAT(CountChannelsData(config, logfiles_[13]),
UnorderedElementsAre())
<< " : " << logfiles_[13];
+ EXPECT_THAT(CountChannelsData(config, logfiles_[14]),
+ UnorderedElementsAre())
+ << " : " << logfiles_[14];
+ EXPECT_THAT(CountChannelsData(config, logfiles_[15]),
+ UnorderedElementsAre())
+ << " : " << logfiles_[15];
if (!shared()) {
- EXPECT_THAT(CountChannelsData(config, logfiles_[14]),
+ EXPECT_THAT(CountChannelsData(config, logfiles_[16]),
UnorderedElementsAre())
- << " : " << logfiles_[14];
- EXPECT_THAT(CountChannelsData(config, logfiles_[15]),
+ << " : " << logfiles_[16];
+ EXPECT_THAT(CountChannelsData(config, logfiles_[17]),
UnorderedElementsAre())
- << " : " << logfiles_[15];
+ << " : " << logfiles_[17];
}
if (shared()) {
EXPECT_THAT(
- CountChannelsTimestamp(config, logfiles_[10]),
+ CountChannelsTimestamp(config, logfiles_[12]),
UnorderedElementsAre(
std::make_tuple("/pi1/aos", "aos.message_bridge.Timestamp", 9),
std::make_tuple("/test", "aos.examples.Ping", 91)))
- << " : " << logfiles_[10];
+ << " : " << logfiles_[12];
EXPECT_THAT(
- CountChannelsTimestamp(config, logfiles_[11]),
+ CountChannelsTimestamp(config, logfiles_[13]),
UnorderedElementsAre(
std::make_tuple("/pi1/aos", "aos.message_bridge.Timestamp", 191),
std::make_tuple("/test", "aos.examples.Ping", 1910)))
- << " : " << logfiles_[11];
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[12]),
- UnorderedElementsAre(std::make_tuple(
- "/pi2/aos", "aos.message_bridge.Timestamp", 9)))
- << " : " << logfiles_[12];
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[13]),
- UnorderedElementsAre(std::make_tuple(
- "/pi2/aos", "aos.message_bridge.Timestamp", 191)))
- << " : " << logfiles_[13];
- } else {
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[10]),
- UnorderedElementsAre(std::make_tuple(
- "/pi1/aos", "aos.message_bridge.Timestamp", 9)))
- << " : " << logfiles_[10];
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[11]),
- UnorderedElementsAre(std::make_tuple(
- "/pi1/aos", "aos.message_bridge.Timestamp", 191)))
- << " : " << logfiles_[11];
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[12]),
- UnorderedElementsAre(std::make_tuple(
- "/pi2/aos", "aos.message_bridge.Timestamp", 9)))
- << " : " << logfiles_[12];
- EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[13]),
- UnorderedElementsAre(std::make_tuple(
- "/pi2/aos", "aos.message_bridge.Timestamp", 191)))
<< " : " << logfiles_[13];
EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[14]),
- UnorderedElementsAre(
- std::make_tuple("/test", "aos.examples.Ping", 91)))
+ UnorderedElementsAre(std::make_tuple(
+ "/pi2/aos", "aos.message_bridge.Timestamp", 9)))
<< " : " << logfiles_[14];
EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[15]),
+ UnorderedElementsAre(std::make_tuple(
+ "/pi2/aos", "aos.message_bridge.Timestamp", 191)))
+ << " : " << logfiles_[15];
+ } else {
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[12]),
+ UnorderedElementsAre(std::make_tuple(
+ "/pi1/aos", "aos.message_bridge.Timestamp", 9)))
+ << " : " << logfiles_[12];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[13]),
+ UnorderedElementsAre(std::make_tuple(
+ "/pi1/aos", "aos.message_bridge.Timestamp", 191)))
+ << " : " << logfiles_[13];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[14]),
+ UnorderedElementsAre(std::make_tuple(
+ "/pi2/aos", "aos.message_bridge.Timestamp", 9)))
+ << " : " << logfiles_[14];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[15]),
+ UnorderedElementsAre(std::make_tuple(
+ "/pi2/aos", "aos.message_bridge.Timestamp", 191)))
+ << " : " << logfiles_[15];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[16]),
+ UnorderedElementsAre(
+ std::make_tuple("/test", "aos.examples.Ping", 91)))
+ << " : " << logfiles_[16];
+ EXPECT_THAT(CountChannelsTimestamp(config, logfiles_[17]),
UnorderedElementsAre(
std::make_tuple("/test", "aos.examples.Ping", 1910)))
- << " : " << logfiles_[15];
+ << " : " << logfiles_[17];
}
}
@@ -1336,7 +1367,10 @@
event_loop_factory_.RunFor(chrono::milliseconds(20000));
}
- LogReader reader(SortParts(logfiles_));
+ // Since we delay starting pi2, it already knows about all the timestamps so
+ // we don't end up with extra parts.
+ LogReader reader(
+ SortParts(MakeLogFiles(logfile_base1_, logfile_base2_, 2, 1)));
SimulatedEventLoopFactory log_reader_factory(reader.configuration());
log_reader_factory.set_send_delay(chrono::microseconds(0));