InfluxdbWriter: Ensure to flush buffers after emptying the metrics queue on Pause/Shutdown/Reload

Patch taken from @al2klimov but moved into Pause()
This commit is contained in:
Michael Friedrich 2019-02-20 15:21:24 +01:00
parent d79390083d
commit d4bdebc795
1 changed files with 22 additions and 2 deletions

View File

@ -130,13 +130,30 @@ void InfluxdbWriter::Resume()
Checkable::OnNewCheckResult.connect(std::bind(&InfluxdbWriter::CheckResultHandler, this, _1, _2));
}
/* Pause is equivalent to Stop, but with HA capabilities to resume at runtime. */
void InfluxdbWriter::Pause()
{
Log(LogInformation, "InfluxdbWriter")
<< "'" << GetName() << "' paused.";
/* Force a flush. */
Log(LogDebug, "InfluxdbWriter")
<< "Flushing pending data buffers.";
Flush();
/* Work on the missing tasks. TODO: Find a way to cache them on disk. */
Log(LogDebug, "InfluxdbWriter")
<< "Joining existing WQ tasks.";
m_WorkQueue.Join();
/* Flush again after the WQ tasks have filled the data buffer. */
Log(LogDebug, "InfluxdbWriter")
<< "Flushing data buffers from WQ tasks.";
Flush();
Log(LogInformation, "InfluxdbWriter")
<< "'" << GetName() << "' paused.";
ObjectImpl<InfluxdbWriter>::Pause();
}
@ -428,6 +445,9 @@ void InfluxdbWriter::FlushTimeoutWQ()
void InfluxdbWriter::Flush()
{
Log(LogDebug, "InfluxdbWriter")
<< "Flushing data buffer to InfluxDB.";
String body = boost::algorithm::join(m_DataBuffer, "\n");
m_DataBuffer.clear();