MINIFICPP-1081 - Lower memory usage for long existing ProcessSessions
Signed-off-by: Arpad Boda <arpad.zoltan.boda@gmail.com>
This closes #684
diff --git a/extensions/rocksdb-repos/FlowFileRepository.cpp b/extensions/rocksdb-repos/FlowFileRepository.cpp
index 56df86c..a49a028 100644
--- a/extensions/rocksdb-repos/FlowFileRepository.cpp
+++ b/extensions/rocksdb-repos/FlowFileRepository.cpp
@@ -24,6 +24,7 @@
#include <vector>
#include <list>
#include "FlowFileRecord.h"
+#include "utils/ScopeGuard.h"
namespace org {
namespace apache {
@@ -109,7 +110,10 @@
}
void FlowFileRepository::prune_stored_flowfiles() {
- rocksdb::DB* stored_database_;
+ rocksdb::DB* stored_database_ = nullptr;
+ utils::ScopeGuard db_guard([&stored_database_]() {
+ delete stored_database_;
+ });
bool corrupt_checkpoint = false;
if (nullptr != checkpoint_) {
rocksdb::Options options;
@@ -119,6 +123,7 @@
rocksdb::Status status = rocksdb::DB::OpenForReadOnly(options, FLOWFILE_CHECKPOINT_DIRECTORY, &stored_database_);
if (!status.ok()) {
stored_database_ = db_;
+ db_guard.disable();
}
} else {
logger_->log_trace("Could not open checkpoint as object doesn't exist. Likely not needed or file system error.");
diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp
index 6cf388c..535ca78 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -868,6 +868,8 @@
_clonedFlowFiles.clear();
_deletedFlowFiles.clear();
_originalFlowFiles.clear();
+
+ _transferRelationship.clear();
// persistent the provenance report
this->provenance_report_->commit();
logger_->log_trace("ProcessSession committed for %s", process_context_->getProcessorNode()->getName());