Stop stripping the size prefix off
This turns out to be super dangerous to do. A flatbuffer is aligned
assuming that the size is either there or not there. By removing it,
you break alignment.
This necesitates having 2 subclasses of Flatbuffer. A SizePrefixed
version and a non size prefixed version. That lets us distinguish for
methods which care.
Once all that's done, deal with the fallout through the code base,
including logfile_utils and the chaos that causes rippling out.
Change-Id: I91b7be355279a1c19e5c956c33359df01a17eacf
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index 977a82f..b32c748 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -37,11 +37,11 @@
namespace logger {
namespace {
// Helper to safely read a header, or CHECK.
-FlatbufferVector<LogFileHeader> MaybeReadHeaderOrDie(
+SizePrefixedFlatbufferVector<LogFileHeader> MaybeReadHeaderOrDie(
const std::vector<std::vector<std::string>> &filenames) {
CHECK_GE(filenames.size(), 1u) << ": Empty filenames list";
CHECK_GE(filenames[0].size(), 1u) << ": Empty filenames list";
- std::optional<FlatbufferVector<LogFileHeader>> result =
+ std::optional<SizePrefixedFlatbufferVector<LogFileHeader>> result =
ReadHeader(filenames[0][0]);
CHECK(result);
return result.value();
@@ -1285,8 +1285,8 @@
}
TimestampMerger::DeliveryTimestamp channel_timestamp;
int channel_index;
- FlatbufferVector<MessageHeader> channel_data =
- FlatbufferVector<MessageHeader>::Empty();
+ SizePrefixedFlatbufferVector<MessageHeader> channel_data =
+ SizePrefixedFlatbufferVector<MessageHeader>::Empty();
if (VLOG_IS_ON(1)) {
LogFit("Offset was");
@@ -1900,12 +1900,12 @@
}
std::tuple<TimestampMerger::DeliveryTimestamp, int,
- FlatbufferVector<MessageHeader>>
+ SizePrefixedFlatbufferVector<MessageHeader>>
LogReader::State::PopOldest(bool *update_time) {
CHECK_GT(sorted_messages_.size(), 0u);
std::tuple<TimestampMerger::DeliveryTimestamp, int,
- FlatbufferVector<MessageHeader>,
+ SizePrefixedFlatbufferVector<MessageHeader>,
message_bridge::NoncausalOffsetEstimator *>
result = std::move(sorted_messages_.front());
VLOG(2) << MaybeNodeName(event_loop_->node()) << "PopOldest Popping "
@@ -1955,8 +1955,8 @@
TimestampMerger::DeliveryTimestamp channel_timestamp;
int channel_index;
- FlatbufferVector<MessageHeader> channel_data =
- FlatbufferVector<MessageHeader>::Empty();
+ SizePrefixedFlatbufferVector<MessageHeader> channel_data =
+ SizePrefixedFlatbufferVector<MessageHeader>::Empty();
message_bridge::NoncausalOffsetEstimator *filter = nullptr;