bakaid commented on a change in pull request #605: MINIFICPP-550 - Implement
RocksDB controller service and component st…
URL: https://github.com/apache/nifi-minifi-cpp/pull/605#discussion_r390712104
##########
File path: libminifi/include/core/ProcessContext.h
##########
@@ -193,6 +216,61 @@ class ProcessContext : public
controller::ControllerServiceLookup, public core::
return controller_service_provider_->getControllerServiceName(identifier);
}
+ static constexpr char const* DefaultStateManagerProviderName =
"defaultstatemanagerprovider";
+
+ std::shared_ptr<CoreComponentStateManager> getStateManager() {
+ if (state_manager_provider_ == nullptr) {
+ return nullptr;
+ }
+ return
state_manager_provider_->getCoreComponentStateManager(*processor_node_);
+ }
+
+ static std::shared_ptr<core::CoreComponentStateManagerProvider>
getOrCreateDefaultStateManagerProvider(
+ std::shared_ptr<controller::ControllerServiceProvider>
controller_service_provider,
+ const char *base_path = "") {
+ static std::mutex mutex;
+ std::lock_guard<std::mutex> lock(mutex);
+
+ /* See if we have already created a default provider */
+ std::shared_ptr<core::controller::ControllerServiceNode> node =
controller_service_provider->getControllerServiceNode(DefaultStateManagerProviderName);
// TODO
+ if (node != nullptr) {
+ return
std::dynamic_pointer_cast<core::CoreComponentStateManagerProvider>(node->getControllerServiceImplementation());
+ }
+
+ /* Try to create a RocksDB-backed provider */
+ node =
controller_service_provider->createControllerService("RocksDbPersistableKeyValueStoreService",
+
"org.apache.nifi.minifi.controllers.RocksDbPersistableKeyValueStoreService",
+
DefaultStateManagerProviderName,
+ true
/*firstTimeAdded*/);
+ if (node != nullptr) {
+ node->initialize();
+ auto provider = node->getControllerServiceImplementation();
+ if (provider != nullptr) {
+ provider->setProperty("Directory",
utils::file::FileUtils::concat_path(base_path, "corecomponentstate"));
+ node->enable();
+ return
std::dynamic_pointer_cast<core::CoreComponentStateManagerProvider>(provider);
+ }
+ }
+
+ /* Fall back to a locked unordered map-backed provider */
+ node =
controller_service_provider->createControllerService("UnorderedMapPersistableKeyValueStoreService",
+
"org.apache.nifi.minifi.controllers.UnorderedMapPersistableKeyValueStoreService",
+
DefaultStateManagerProviderName,
+ true
/*firstTimeAdded*/);
+ if (node != nullptr) {
+ node->initialize();
+ auto provider = node->getControllerServiceImplementation();
+ if (provider != nullptr) {
+ provider->setProperty("File",
utils::file::FileUtils::concat_path(base_path, "corecomponentstate.txt"));
+ node->enable();
+ return
std::dynamic_pointer_cast<core::CoreComponentStateManagerProvider>(provider);
+ }
+ }
Review comment:
@szaszm Ended up adding more code to this, and now it really made sense to
deduplicate it, so I've done that.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services