Add factory for SpanReader
Change-Id: Id3f382ed7c1ad4ca42ed674d1e8e98a2045ac8fc
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/events/logging/logfile_utils.cc b/aos/events/logging/logfile_utils.cc
index 3c8c50d..fbec1b5 100644
--- a/aos/events/logging/logfile_utils.cc
+++ b/aos/events/logging/logfile_utils.cc
@@ -66,6 +66,8 @@
"corrupt message found by MessageReader be silently ignored, "
"providing access to all uncorrupted messages in a logfile.");
+DECLARE_bool(quiet_sorting);
+
namespace aos::logger {
namespace {
namespace chrono = std::chrono;
@@ -1281,6 +1283,23 @@
return true;
}
+LogReadersPool::LogReadersPool(const LogSource *log_source, size_t pool_size)
+ : log_source_(log_source), pool_size_(pool_size) {}
+
+SpanReader *LogReadersPool::BorrowReader(std::string_view id) {
+ if (part_readers_.size() > pool_size_) {
+ // Don't leave arbitrary numbers of readers open, because they each take
+ // resources, so close a big batch at once periodically.
+ part_readers_.clear();
+ }
+ if (log_source_ == nullptr) {
+ part_readers_.emplace_back(id, FLAGS_quiet_sorting);
+ } else {
+ part_readers_.emplace_back(id, log_source_->GetDecoder(id));
+ }
+ return &part_readers_.back();
+}
+
std::optional<SizePrefixedFlatbufferVector<LogFileHeader>> ReadHeader(
SpanReader *span_reader) {
absl::Span<const uint8_t> config_data = span_reader->ReadMessage();