Rotate log files when the remote reboots
Add a logger_boot_uuid to track the difference between the logger node's
and the remote node's boot uuids, and also a logger start time. This
gives us enough information to enforce only 1 boot per node, and to also
detect which log came first if a node rebooted. Order detection isn't
used today, but before we generate more logs, we should fix the issue.
Also, enforce one boot per node when replaying. We don't manage
timestamps well enough to do anything else.
Change-Id: Ib5ba9f881a2c17d05b143e38ee20a209553acca8
diff --git a/aos/events/logging/log_namer.h b/aos/events/logging/log_namer.h
index 5384ab2..5534131 100644
--- a/aos/events/logging/log_namer.h
+++ b/aos/events/logging/log_namer.h
@@ -62,6 +62,12 @@
const Node *node,
aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header) = 0;
+ // Reboots all log files for the provided node. The provided header will be
+ // modified and written per WriteHeader above. Resets any parts UUIDs.
+ virtual void Reboot(
+ const Node *node,
+ aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header) = 0;
+
// Returns all the nodes that data is being written for.
const std::vector<const Node *> &nodes() const { return nodes_; }
@@ -100,6 +106,10 @@
aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header)
override;
+ void Reboot(const Node *node,
+ aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header)
+ override;
+
DetachedBufferWriter *MakeTimestampWriter(const Channel *channel) override;
DetachedBufferWriter *MakeForwardedTimestampWriter(
@@ -167,6 +177,10 @@
aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header)
override;
+ void Reboot(const Node *node,
+ aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header)
+ override;
+
DetachedBufferWriter *MakeWriter(const Channel *channel) override;
DetachedBufferWriter *MakeForwardedTimestampWriter(const Channel *channel,
@@ -275,10 +289,17 @@
std::unique_ptr<DetachedBufferWriter> writer = nullptr;
const Node *node;
size_t part_number = 0;
- const UUID uuid = UUID::Random();
+ UUID uuid = UUID::Random();
std::function<void(const Channel *, DataWriter *)> rotate;
};
+ // Implements Rotate and Reboot, controlled by the 'reboot' flag. The only
+ // difference between the two is if DataWriter::uuid is reset or not.
+ void DoRotate(
+ const Node *node,
+ aos::SizePrefixedFlatbufferDetachedBuffer<LogFileHeader> *header,
+ bool reboot);
+
// Opens up a writer for timestamps forwarded back.
void OpenForwardedTimestampWriter(const Channel *channel,
DataWriter *data_writer);