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();