This is an automated email from the ASF dual-hosted git repository. adebreceni pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit afd5b3702b6f8254100b32439f08aca1aaf086ad Author: Gabor Gyimesi <[email protected]> AuthorDate: Wed Feb 23 08:06:53 2022 +0100 MINIFICPP-1753 Remove the possibility of multiple initialization Signed-off-by: Adam Debreceni <[email protected]> This closes #1265 --- extensions/coap/controllerservice/CoapConnector.cpp | 6 +++--- extensions/coap/controllerservice/CoapConnector.h | 2 +- extensions/jni/jvm/JavaControllerService.cpp | 6 +++--- extensions/jni/jvm/JavaControllerService.h | 4 +--- extensions/mqtt/controllerservice/MQTTControllerService.cpp | 6 +++--- extensions/mqtt/controllerservice/MQTTControllerService.h | 2 +- extensions/sql/services/DatabaseService.cpp | 3 ++- extensions/sql/services/DatabaseService.h | 2 +- libminifi/include/c2/C2Client.h | 3 ++- libminifi/include/controllers/SSLContextService.h | 2 +- libminifi/src/c2/C2Client.cpp | 8 ++++++-- libminifi/src/controllers/SSLContextService.cpp | 6 +++--- 12 files changed, 27 insertions(+), 23 deletions(-) diff --git a/extensions/coap/controllerservice/CoapConnector.cpp b/extensions/coap/controllerservice/CoapConnector.cpp index 881797d..da6fc03 100644 --- a/extensions/coap/controllerservice/CoapConnector.cpp +++ b/extensions/coap/controllerservice/CoapConnector.cpp @@ -47,13 +47,13 @@ core::Property CoapConnectorService::MaxQueueSize( core::PropertyBuilder::createProperty("Max Queue Size")->withDescription("Max queue size for received data ")->withDefaultValue<uint64_t>(1000)->isRequired(false)->build()); void CoapConnectorService::initialize() { - if (initialized_) + std::lock_guard<std::mutex> lock(initialization_mutex_); + if (initialized_) { return; + } CoapMessaging::getInstance(); - std::lock_guard<std::mutex> lock(initialization_mutex_); - ControllerService::initialize(); initializeProperties(); diff --git a/extensions/coap/controllerservice/CoapConnector.h b/extensions/coap/controllerservice/CoapConnector.h index ac023ea..cba303e 100644 --- a/extensions/coap/controllerservice/CoapConnector.h +++ b/extensions/coap/controllerservice/CoapConnector.h @@ -97,7 +97,7 @@ class CoapConnectorService : public core::controller::ControllerService { // initialization mutex. std::mutex initialization_mutex_; - std::atomic<bool> initialized_{ false }; + bool initialized_ = false; private: // host connecting to. diff --git a/extensions/jni/jvm/JavaControllerService.cpp b/extensions/jni/jvm/JavaControllerService.cpp index 560e8a7..933e27c 100644 --- a/extensions/jni/jvm/JavaControllerService.cpp +++ b/extensions/jni/jvm/JavaControllerService.cpp @@ -59,10 +59,10 @@ core::Property JavaControllerService::NarDocumentDirectory( core::PropertyBuilder::createProperty("Nar Document Directory")->withDescription("Directory in which documents will be deployed")->isRequired(true)->supportsExpressionLanguage(false)->build()); void JavaControllerService::initialize() { - if (initialized_) - return; - std::lock_guard<std::mutex> lock(initialization_mutex_); + if (initialized_) { + return; + } ControllerService::initialize(); diff --git a/extensions/jni/jvm/JavaControllerService.h b/extensions/jni/jvm/JavaControllerService.h index 0a42683..9b8c278 100644 --- a/extensions/jni/jvm/JavaControllerService.h +++ b/extensions/jni/jvm/JavaControllerService.h @@ -48,12 +48,10 @@ class JavaControllerService : public core::controller::ControllerService, public public: explicit JavaControllerService(const std::string &name, const utils::Identifier &uuid = {}) : ControllerService(name, uuid) { - initialized_ = false; } explicit JavaControllerService(const std::string &name, const std::shared_ptr<Configure> &configuration) : ControllerService(name) { - initialized_ = false; setConfiguration(configuration); initialize(); } @@ -144,7 +142,7 @@ class JavaControllerService : public core::controller::ControllerService, public std::mutex initialization_mutex_; - std::atomic<bool> initialized_; + bool initialized_ = false; std::vector<std::string> classpaths_; diff --git a/extensions/mqtt/controllerservice/MQTTControllerService.cpp b/extensions/mqtt/controllerservice/MQTTControllerService.cpp index 27d5c68..c5333b5 100644 --- a/extensions/mqtt/controllerservice/MQTTControllerService.cpp +++ b/extensions/mqtt/controllerservice/MQTTControllerService.cpp @@ -45,10 +45,10 @@ core::Property MQTTControllerService::Topic("Topic", "The topic to publish the m core::Property MQTTControllerService::SecurityProtocol("Security Protocol", "Protocol used to communicate with brokers", ""); void MQTTControllerService::initialize() { - if (initialized_) - return; - std::lock_guard<std::mutex> lock(initialization_mutex_); + if (initialized_) { + return; + } ControllerService::initialize(); diff --git a/extensions/mqtt/controllerservice/MQTTControllerService.h b/extensions/mqtt/controllerservice/MQTTControllerService.h index 798b39c..b7ca764 100644 --- a/extensions/mqtt/controllerservice/MQTTControllerService.h +++ b/extensions/mqtt/controllerservice/MQTTControllerService.h @@ -288,7 +288,7 @@ class MQTTControllerService : public core::controller::ControllerService { virtual void initializeProperties(); std::mutex initialization_mutex_; - std::atomic<bool> initialized_; + bool initialized_; MQTTClient client_; std::string uri_; diff --git a/extensions/sql/services/DatabaseService.cpp b/extensions/sql/services/DatabaseService.cpp index 459724b..fe9cd4c 100644 --- a/extensions/sql/services/DatabaseService.cpp +++ b/extensions/sql/services/DatabaseService.cpp @@ -43,8 +43,9 @@ core::Property DatabaseService::ConnectionString(core::PropertyBuilder::createPr void DatabaseService::initialize() { std::lock_guard<std::recursive_mutex> lock(initialization_mutex_); - if (initialized_) + if (initialized_) { return; + } ControllerService::initialize(); diff --git a/extensions/sql/services/DatabaseService.h b/extensions/sql/services/DatabaseService.h index 7d4e612..1161132 100644 --- a/extensions/sql/services/DatabaseService.h +++ b/extensions/sql/services/DatabaseService.h @@ -80,7 +80,7 @@ class DatabaseService : public core::controller::ControllerService { // initialization mutex. std::recursive_mutex initialization_mutex_; - bool initialized_{}; + bool initialized_; std::string connection_string_; diff --git a/libminifi/include/c2/C2Client.h b/libminifi/include/c2/C2Client.h index 08d242d..24e2338 100644 --- a/libminifi/include/c2/C2Client.h +++ b/libminifi/include/c2/C2Client.h @@ -73,7 +73,8 @@ class C2Client : public core::Flow, public state::response::NodeReporter { private: std::unique_ptr<C2Agent> c2_agent_; - std::atomic_bool initialized_{false}; + std::mutex initialization_mutex_; + bool initialized_ = false; std::shared_ptr<core::logging::Logger> logger_; mutable std::mutex metrics_mutex_; diff --git a/libminifi/include/controllers/SSLContextService.h b/libminifi/include/controllers/SSLContextService.h index a1975b8..a3ef480 100644 --- a/libminifi/include/controllers/SSLContextService.h +++ b/libminifi/include/controllers/SSLContextService.h @@ -189,7 +189,7 @@ class SSLContextService : public core::controller::ControllerService { virtual void initializeProperties(); std::mutex initialization_mutex_; - std::atomic<bool> initialized_; + bool initialized_; std::atomic<bool> valid_; std::string certificate_; std::string private_key_; diff --git a/libminifi/src/c2/C2Client.cpp b/libminifi/src/c2/C2Client.cpp index a90fedf..d738a92 100644 --- a/libminifi/src/c2/C2Client.cpp +++ b/libminifi/src/c2/C2Client.cpp @@ -70,8 +70,11 @@ void C2Client::initialize(core::controller::ControllerServiceProvider *controlle configuration_->setFallbackAgentIdentifier(getControllerUUID().to_string()); - if (initialized_ && !flow_update_) { - return; + { + std::lock_guard<std::mutex> lock(initialization_mutex_); + if (initialized_ && !flow_update_) { + return; + } } // root_response_nodes_ was not cleared before, it is unclear if that was intentional @@ -123,6 +126,7 @@ void C2Client::initialize(core::controller::ControllerServiceProvider *controlle loadC2ResponseConfiguration("nifi.c2.root.class.definitions"); + std::lock_guard<std::mutex> lock(initialization_mutex_); if (!initialized_) { // C2Agent is initialized once, meaning that a C2-triggered flow/configuration update // might not be equal to a fresh restart diff --git a/libminifi/src/controllers/SSLContextService.cpp b/libminifi/src/controllers/SSLContextService.cpp index eb385da..e410a5e 100644 --- a/libminifi/src/controllers/SSLContextService.cpp +++ b/libminifi/src/controllers/SSLContextService.cpp @@ -119,10 +119,10 @@ const core::Property SSLContextService::ClientCertKeyUsage( #endif // WIN32 void SSLContextService::initialize() { - if (initialized_) - return; - std::lock_guard<std::mutex> lock(initialization_mutex_); + if (initialized_) { + return; + } ControllerService::initialize();
