Add ability to write log to abstract log sink
It completely decouples log writing and file system.
Change-Id: Iae3b881826e04500f4862a16c237e0f7c37c9536
Signed-off-by: Austin Schuh <austin.schuh@bluerivertech.com>
Signed-off-by: Alexei Strots <alexei.strots@bluerivertech.com>
diff --git a/aos/events/logging/logfile_utils.cc b/aos/events/logging/logfile_utils.cc
index 27c6c3b..490393d 100644
--- a/aos/events/logging/logfile_utils.cc
+++ b/aos/events/logging/logfile_utils.cc
@@ -80,12 +80,11 @@
}
} // namespace
-DetachedBufferWriter::DetachedBufferWriter(
- std::unique_ptr<FileHandler> file_handler,
- std::unique_ptr<DataEncoder> encoder)
- : file_handler_(std::move(file_handler)), encoder_(std::move(encoder)) {
- CHECK(file_handler_);
- ran_out_of_space_ = file_handler_->OpenForWrite() == WriteCode::kOutOfSpace;
+DetachedBufferWriter::DetachedBufferWriter(std::unique_ptr<LogSink> log_sink,
+ std::unique_ptr<DataEncoder> encoder)
+ : log_sink_(std::move(log_sink)), encoder_(std::move(encoder)) {
+ CHECK(log_sink_);
+ ran_out_of_space_ = log_sink_->OpenForWrite() == WriteCode::kOutOfSpace;
if (ran_out_of_space_) {
LOG(WARNING) << "And we are out of space";
}
@@ -108,7 +107,7 @@
// (because that data will then be its data).
DetachedBufferWriter &DetachedBufferWriter::operator=(
DetachedBufferWriter &&other) {
- std::swap(file_handler_, other.file_handler_);
+ std::swap(log_sink_, other.log_sink_);
std::swap(encoder_, other.encoder_);
std::swap(ran_out_of_space_, other.ran_out_of_space_);
std::swap(acknowledge_ran_out_of_space_, other.acknowledge_ran_out_of_space_);
@@ -147,7 +146,7 @@
}
void DetachedBufferWriter::Close() {
- if (!file_handler_->is_open()) {
+ if (!log_sink_->is_open()) {
return;
}
encoder_->Finish();
@@ -155,7 +154,7 @@
Flush(monotonic_clock::max_time);
}
encoder_.reset();
- ran_out_of_space_ = file_handler_->Close() == WriteCode::kOutOfSpace;
+ ran_out_of_space_ = log_sink_->Close() == WriteCode::kOutOfSpace;
}
void DetachedBufferWriter::Flush(aos::monotonic_clock::time_point now) {
@@ -178,7 +177,7 @@
return;
}
- const WriteResult result = file_handler_->Write(queue);
+ const WriteResult result = log_sink_->Write(queue);
encoder_->Clear(result.messages_written);
ran_out_of_space_ = result.code == WriteCode::kOutOfSpace;
}