You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ad...@apache.org on 2022/02/23 07:09:17 UTC

[nifi-minifi-cpp] 01/02: MINIFICPP-1753 Remove the possibility of multiple initialization

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 <ga...@gmail.com>
AuthorDate: Wed Feb 23 08:06:53 2022 +0100

    MINIFICPP-1753 Remove the possibility of multiple initialization
    
    Signed-off-by: Adam Debreceni <ad...@apache.org>
    
    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();