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_r389762676
##########
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:
Because we need to set a File in one and a Directory in the other, obviously
with different names, creating a function from this would not save us much - it
would actually make it less readable in my opinion.
----------------------------------------------------------------
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