This is an automated email from the ASF dual-hosted git repository. martinzink pushed a commit to branch MINIFICPP-2584-apache in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit f4d23937045f73b8e2016f71b4dc5334a16a2b47 Author: Martin Zink <[email protected]> AuthorDate: Tue Jul 15 21:52:36 2025 +0200 remove LocationsImpl.h --- controller/MiNiFiController.cpp | 7 +- .../tests/ExpressionLanguageTests.cpp | 1 - extensions/python/PythonCreator.h | 38 ++++---- .../rocksdb-repos/DatabaseContentRepository.cpp | 16 ++-- extensions/rocksdb-repos/FlowFileRepository.cpp | 12 +-- .../controllers/RocksDbStateStorage.cpp | 9 +- .../rocksdb-repos/tests/ContentSessionTests.cpp | 1 - .../tests/DBContentRepositoryTests.cpp | 12 --- extensions/rocksdb-repos/tests/EncryptionTests.cpp | 1 - extensions/rocksdb-repos/tests/RepoTests.cpp | 14 --- extensions/rocksdb-repos/tests/SwapTests.cpp | 1 - extensions/sftp/tests/ListSFTPTests.cpp | 6 -- .../tests/unit/TailFileTests.cpp | 1 - libminifi/include/properties/Configure.h | 5 - libminifi/include/properties/LocationsImpl.h | 103 --------------------- libminifi/src/Configure.cpp | 9 -- libminifi/src/core/extension/ExtensionManager.cpp | 13 +-- libminifi/src/utils/file/AssetManager.cpp | 11 +-- libminifi/test/integration/AlertTests.cpp | 1 - libminifi/test/integration/C2DebugBundleTest.cpp | 1 - .../test/integration/C2PropertiesUpdateTests.cpp | 1 - libminifi/test/libtest/unit/TestBase.cpp | 1 - .../test/persistence-tests/PersistenceTests.cpp | 2 - libminifi/test/unit/DecryptorTests.cpp | 1 - libminifi/test/unit/LogMetricsPublisherTests.cpp | 1 - libminifi/test/unit/ProcessSessionTests.cpp | 1 - .../include/minifi-cpp/properties/Configure.h | 3 - .../include/minifi-cpp/properties/Locations.h | 37 -------- minifi_main/Fips.cpp | 21 +++-- minifi_main/Fips.h | 3 +- minifi_main/MainHelper.cpp | 36 ++++++- minifi_main/MainHelper.h | 22 ++--- minifi_main/MiNiFiMain.cpp | 26 +++--- utils/include/utils/Locations.h | 42 +++++++++ 34 files changed, 158 insertions(+), 301 deletions(-) diff --git a/controller/MiNiFiController.cpp b/controller/MiNiFiController.cpp index 643ec6951..a14ba8e0a 100644 --- a/controller/MiNiFiController.cpp +++ b/controller/MiNiFiController.cpp @@ -97,11 +97,10 @@ int main(int argc, char **argv) { } const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(locations); - configuration->loadConfigureFile(locations->getPropertiesPath()); + configuration->loadConfigureFile(locations->properties_path_); - const auto log_properties = std::make_shared<minifi::core::logging::LoggerProperties>(locations->getLogsDirs()); - log_properties->loadConfigureFile(locations->getLogPropertiesPath(), "nifi.log."); + const auto log_properties = std::make_shared<minifi::core::logging::LoggerProperties>(locations->logs_dir_); + log_properties->loadConfigureFile(locations->log_properties_path_, "nifi.log."); minifi::core::logging::LoggerConfiguration::getConfiguration().initialize(log_properties); diff --git a/extensions/expression-language/tests/ExpressionLanguageTests.cpp b/extensions/expression-language/tests/ExpressionLanguageTests.cpp index 007f23134..d2a915a84 100644 --- a/extensions/expression-language/tests/ExpressionLanguageTests.cpp +++ b/extensions/expression-language/tests/ExpressionLanguageTests.cpp @@ -193,7 +193,6 @@ TEST_CASE("GetFile PutFile dynamic attribute", "[expressionLanguageTestGetFilePu LogTestController::getInstance().setTrace<minifi::processors::UpdateAttribute>(); auto conf = std::make_shared<minifi::ConfigureImpl>(); - conf->setLocations(minifi::LocationsImpl::createFromMinifiHome(testController.createTempDirectory())); conf->set("nifi.my.own.property", "custom_value"); diff --git a/extensions/python/PythonCreator.h b/extensions/python/PythonCreator.h index a6a38e7ea..b10d767f0 100644 --- a/extensions/python/PythonCreator.h +++ b/extensions/python/PythonCreator.h @@ -18,26 +18,28 @@ #pragma once -#include <vector> #include <algorithm> -#include <string> -#include <memory> #include <filesystem> -#include "core/Core.h" -#include "core/logging/LoggerFactory.h" -#include "core/Resource.h" +#include <memory> +#include <string> +#include <vector> + #include "ExecutePythonProcessor.h" #include "PythonConfigState.h" +#include "PythonDependencyInstaller.h" #include "PythonObjectFactory.h" +#include "core/Core.h" +#include "core/Resource.h" +#include "core/logging/LoggerFactory.h" #include "minifi-cpp/agent/agent_version.h" #include "minifi-cpp/agent/build_description.h" -#include "utils/file/FileUtils.h" -#include "utils/StringUtils.h" #include "range/v3/algorithm.hpp" -#include "utils/file/FilePattern.h" #include "range/v3/view/filter.hpp" -#include "PythonDependencyInstaller.h" -#include "utils/file/PathUtils.h" +#include "utils/Environment.h" +#include "utils/Locations.h" +#include "utils/StringUtils.h" +#include "utils/file/FilePattern.h" +#include "utils/file/FileUtils.h" namespace org::apache::nifi::minifi::extensions::python { @@ -162,19 +164,13 @@ class PythonCreator : public minifi::core::CoreComponentImpl { } std::filesystem::path getPythonLibPath(const std::shared_ptr<Configure>& configuration) { - constexpr std::string_view DEFAULT_EXTENSION_PATH = "../extensions/*"; const std::string pattern = [&] { - if (const auto opt_pattern = configuration->get(minifi::Configuration::nifi_extension_path)) { + if (const auto opt_pattern = configuration->get(Configuration::nifi_extension_path)) { return *opt_pattern; }; - - if (const auto locations = configuration->getLocations()) { - logger_->log_warn("No extension path is provided in properties, using default : '{}'", locations->getDefaultExtensionsPattern()); - return std::string(locations->getDefaultExtensionsPattern()); - }; - - logger_->log_error("No extension path is provided in properties and locations is empty, using hard-coded default: '{}'", DEFAULT_EXTENSION_PATH); - return std::string(DEFAULT_EXTENSION_PATH); + const auto default_extension_path = utils::getDefaultExtensionsPattern(); + logger_->log_warn("No extension path is provided in properties, using default: '{}'", default_extension_path); + return default_extension_path; }(); const auto candidates = utils::file::match(utils::file::FilePattern(pattern, [&] (std::string_view subpattern, std::string_view error_msg) { logger_->log_error("Error in subpattern '{}': {}", subpattern, error_msg); diff --git a/extensions/rocksdb-repos/DatabaseContentRepository.cpp b/extensions/rocksdb-repos/DatabaseContentRepository.cpp index 5829601ab..6bfa6cefa 100644 --- a/extensions/rocksdb-repos/DatabaseContentRepository.cpp +++ b/extensions/rocksdb-repos/DatabaseContentRepository.cpp @@ -17,26 +17,26 @@ #include "DatabaseContentRepository.h" +#include <cinttypes> #include <memory> #include <string> #include <utility> #include <vector> -#include <cinttypes> -#include "encryption/RocksDbEncryptionProvider.h" -#include "RocksDbStream.h" -#include "utils/gsl.h" #include "Exception.h" -#include "database/RocksDbUtils.h" -#include "database/StringAppender.h" +#include "RocksDbStream.h" #include "core/Resource.h" #include "core/TypedValues.h" +#include "database/RocksDbUtils.h" +#include "database/StringAppender.h" +#include "encryption/RocksDbEncryptionProvider.h" +#include "utils/Locations.h" +#include "utils/gsl.h" namespace org::apache::nifi::minifi::core::repository { bool DatabaseContentRepository::initialize(const std::shared_ptr<minifi::Configure> &configuration) { - const auto locations = configuration->getLocations(); - const auto working_dir = locations ? locations->getWorkingDir() : std::filesystem::current_path(); // TODO(mzink) + const auto working_dir = utils::getMinifiDir(); std::string value; if (configuration->get(Configure::nifi_dbcontent_repository_directory_default, value) && !value.empty()) { diff --git a/extensions/rocksdb-repos/FlowFileRepository.cpp b/extensions/rocksdb-repos/FlowFileRepository.cpp index 346a512d6..a37bc2751 100644 --- a/extensions/rocksdb-repos/FlowFileRepository.cpp +++ b/extensions/rocksdb-repos/FlowFileRepository.cpp @@ -24,13 +24,14 @@ #include <utility> #include <vector> +#include "FlowFileRecord.h" +#include "core/Resource.h" +#include "core/TypedValues.h" #include "rocksdb/options.h" #include "rocksdb/slice.h" -#include "utils/gsl.h" -#include "core/Resource.h" +#include "utils/Locations.h" #include "utils/OptionalUtils.h" -#include "core/TypedValues.h" -#include "FlowFileRecord.h" +#include "utils/gsl.h" using namespace std::literals::chrono_literals; @@ -210,8 +211,7 @@ bool FlowFileRepository::initialize(const std::shared_ptr<Configure> &configure) setCompactionPeriod(configure); - const auto locations = configure->getLocations(); - const auto working_dir = locations ? locations->getWorkingDir() : std::filesystem::current_path(); // TODO(mzink) + const auto working_dir = utils::getMinifiDir(); const auto encrypted_env = createEncryptingEnv(utils::crypto::EncryptionManager{working_dir}, DbEncryptionOptions{directory_, ENCRYPTION_KEY_NAME}); logger_->log_info("Using {} FlowFileRepository", encrypted_env ? "encrypted" : "plaintext"); diff --git a/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp b/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp index 58496ef50..26956e480 100644 --- a/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp +++ b/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp @@ -15,14 +15,16 @@ * limitations under the License. */ +#include "RocksDbStateStorage.h" + #include <cinttypes> #include <fstream> #include <utility> -#include "RocksDbStateStorage.h" #include "../encryption/RocksDbEncryptionProvider.h" -#include "utils/StringUtils.h" #include "core/Resource.h" +#include "utils/Locations.h" +#include "utils/StringUtils.h" namespace org::apache::nifi::minifi::controllers { @@ -61,8 +63,7 @@ void RocksDbStateStorage::onEnable() { db_.reset(); - const auto locations = configuration_->getLocations(); - const auto working_dir = locations ? locations->getWorkingDir() : std::filesystem::current_path(); // TODO(mzink) + const auto working_dir = utils::getMinifiDir(); auto encrypted_env = createEncryptingEnv(utils::crypto::EncryptionManager{working_dir}, core::repository::DbEncryptionOptions{directory_, ENCRYPTION_KEY_NAME}); if (!encrypted_env) { diff --git a/extensions/rocksdb-repos/tests/ContentSessionTests.cpp b/extensions/rocksdb-repos/tests/ContentSessionTests.cpp index 03922bbc6..1c33b14e8 100644 --- a/extensions/rocksdb-repos/tests/ContentSessionTests.cpp +++ b/extensions/rocksdb-repos/tests/ContentSessionTests.cpp @@ -37,7 +37,6 @@ class ContentSessionController : public TestController { : contentRepository(std::make_shared<ContentRepositoryClass>()) { auto contentRepoPath = createTempDirectory(); auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(contentRepoPath)); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, contentRepoPath.string()); contentRepository->initialize(config); } diff --git a/extensions/rocksdb-repos/tests/DBContentRepositoryTests.cpp b/extensions/rocksdb-repos/tests/DBContentRepositoryTests.cpp index 3a6b657be..7fc19ca4d 100644 --- a/extensions/rocksdb-repos/tests/DBContentRepositoryTests.cpp +++ b/extensions/rocksdb-repos/tests/DBContentRepositoryTests.cpp @@ -44,7 +44,6 @@ TEST_CASE("Write Claim", "[TestDBCR1]") { auto content_repo = std::make_shared<TestDatabaseContentRepository>(); auto configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -67,7 +66,6 @@ TEST_CASE("Write Claim", "[TestDBCR1]") { content_repo = std::make_shared<TestDatabaseContentRepository>(); configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -92,7 +90,6 @@ TEST_CASE("Delete Claim", "[TestDBCR2]") { auto content_repo = std::make_shared<TestDatabaseContentRepository>(); auto configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -112,7 +109,6 @@ TEST_CASE("Delete Claim", "[TestDBCR2]") { content_repo = std::make_shared<TestDatabaseContentRepository>(); configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); std::string readstr; @@ -151,7 +147,6 @@ TEST_CASE("Append Claim", "[TestDBCR1]") { auto content_repo = std::make_shared<TestDatabaseContentRepository>(); auto configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -193,7 +188,6 @@ TEST_CASE("Test Empty Claim", "[TestDBCR3]") { auto content_repo = std::make_shared<TestDatabaseContentRepository>(); auto configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -212,7 +206,6 @@ TEST_CASE("Test Empty Claim", "[TestDBCR3]") { content_repo = std::make_shared<TestDatabaseContentRepository>(); configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -230,7 +223,6 @@ TEST_CASE("Delete NonExistent Claim", "[TestDBCR4]") { auto content_repo = std::make_shared<TestDatabaseContentRepository>(); auto configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -250,7 +242,6 @@ TEST_CASE("Delete NonExistent Claim", "[TestDBCR4]") { content_repo = std::make_shared<TestDatabaseContentRepository>(); configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -272,7 +263,6 @@ TEST_CASE("Delete Remove Count Claim", "[TestDBCR5]") { auto content_repo = std::make_shared<TestDatabaseContentRepository>(); auto configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -292,7 +282,6 @@ TEST_CASE("Delete Remove Count Claim", "[TestDBCR5]") { content_repo = std::make_shared<TestDatabaseContentRepository>(); configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); REQUIRE(content_repo->initialize(configuration)); @@ -345,7 +334,6 @@ TEST_CASE("DBContentRepository can clear orphan entries") { TestController testController; auto dir = testController.createTempDirectory(); auto configuration = std::make_shared<org::apache::nifi::minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir.string()); { auto content_repo = std::make_shared<core::repository::DatabaseContentRepository>(); diff --git a/extensions/rocksdb-repos/tests/EncryptionTests.cpp b/extensions/rocksdb-repos/tests/EncryptionTests.cpp index 7bb21b60d..754d12bd4 100644 --- a/extensions/rocksdb-repos/tests/EncryptionTests.cpp +++ b/extensions/rocksdb-repos/tests/EncryptionTests.cpp @@ -35,7 +35,6 @@ class FFRepoFixture : public TestController { home_ = createTempDirectory(); repo_dir_ = home_ / "flowfile_repo"; config_ = std::make_shared<minifi::ConfigureImpl>(); - config_->setLocations(minifi::LocationsImpl::createFromMinifiHome(home_)); container_ = std::make_unique<minifi::ConnectionImpl>(nullptr, nullptr, "container"); content_repo_ = std::make_shared<core::repository::VolatileContentRepository>(); content_repo_->initialize(config_); diff --git a/extensions/rocksdb-repos/tests/RepoTests.cpp b/extensions/rocksdb-repos/tests/RepoTests.cpp index 1d6d5c931..0523ff7d0 100644 --- a/extensions/rocksdb-repos/tests/RepoTests.cpp +++ b/extensions/rocksdb-repos/tests/RepoTests.cpp @@ -76,7 +76,6 @@ TEST_CASE("Test Repo Empty Value Attribute", "[TestFFR1]") { const auto repository = std::make_shared<core::repository::FlowFileRepository>("ff", dir.string(), 0ms, 0, 1ms); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>(); @@ -98,7 +97,6 @@ TEST_CASE("Test Repo Empty Key Attribute ", "[TestFFR2]") { const auto repository = std::make_shared<core::repository::FlowFileRepository>("ff", dir.string(), 0ms, 0, 1ms); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>(); const auto file = std::make_shared<minifi::FlowFileRecordImpl>(); @@ -121,7 +119,6 @@ TEST_CASE("Test Repo Key Attribute Verify ", "[TestFFR3]") { const auto repository = std::make_shared<core::repository::FlowFileRepository>("ff", dir.string(), 0ms, 0, 1ms); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>(); @@ -178,7 +175,6 @@ TEST_CASE("Test Delete Content ", "[TestFFR4]") { std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::FileSystemRepository>(); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); repository->loadComponent(content_repo); @@ -229,7 +225,6 @@ TEST_CASE("Test Validate Checkpoint ", "[TestFFR5]") { std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::FileSystemRepository>(); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); repository->loadComponent(content_repo); @@ -281,7 +276,6 @@ TEST_CASE("Test FlowFile Restore", "[TestFFR6]") { auto dir = testController.createTempDirectory(); auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, (dir / "content_repository").string()); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, (dir / "flowfile_repository").string()); @@ -382,7 +376,6 @@ TEST_CASE("Flush deleted flowfiles before shutdown", "[TestFFR7]") { const auto dir = testController.createTempDirectory(); const auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, (dir / "flowfile_repository").string()); const auto content_repo = std::make_shared<core::repository::VolatileContentRepository>(); @@ -460,7 +453,6 @@ TEST_CASE("FlowFileRepository triggers content repo orphan clear") { auto content_dir = testController.createTempDirectory(); auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(home_dir)); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, ff_dir.string()); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, content_dir.string()); @@ -495,7 +487,6 @@ TEST_CASE("FlowFileRepository synchronously pushes existing flow files") { const auto content_dir = testController.createTempDirectory(); const auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(home_dir)); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, ff_dir.string()); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, content_dir.string()); @@ -577,7 +568,6 @@ TEST_CASE("Test getting flow file repository size properties", "[TestGettingRepo expected_max_repo_size = 7; } auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); auto flow_file = std::make_shared<minifi::FlowFileRecordImpl>(); @@ -626,7 +616,6 @@ TEST_CASE("Test getting noop repository size properties", "[TestGettingRepositor const auto repository = minifi::core::createRepository("NoOpRepository", "ff"); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); const auto flow_file = std::make_shared<minifi::FlowFileRecordImpl>(); @@ -654,7 +643,6 @@ TEST_CASE("Test getting content repository size properties", "[TestGettingReposi const auto content_repo_dir = testController.createTempDirectory(); const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, content_repo_dir.string()); std::string content = "content"; configuration->set(minifi::Configure::nifi_volatile_repository_options_content_max_bytes, std::to_string(content.size())); @@ -747,7 +735,6 @@ TEST_CASE("Flow file repositories can be stopped", "[TestRepoIsRunning]") { } const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); repository->initialize(configuration); REQUIRE(!repository->isRunning()); @@ -810,7 +797,6 @@ TEST_CASE("FlowFileRepository can filter out too small contents") { const auto content_dir = testController.createTempDirectory(); auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(minifi_home)); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, ff_dir.string()); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, content_dir.string()); diff --git a/extensions/rocksdb-repos/tests/SwapTests.cpp b/extensions/rocksdb-repos/tests/SwapTests.cpp index 71eda4d6b..7043351ed 100644 --- a/extensions/rocksdb-repos/tests/SwapTests.cpp +++ b/extensions/rocksdb-repos/tests/SwapTests.cpp @@ -84,7 +84,6 @@ TEST_CASE("Connection will on-demand swap flow files") { auto dir = testController.createTempDirectory(); auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, (dir / "content_repository").string()); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, (dir / "flowfile_repository").string()); diff --git a/extensions/sftp/tests/ListSFTPTests.cpp b/extensions/sftp/tests/ListSFTPTests.cpp index 01f65fc29..3d8072c00 100644 --- a/extensions/sftp/tests/ListSFTPTests.cpp +++ b/extensions/sftp/tests/ListSFTPTests.cpp @@ -74,9 +74,6 @@ class ListSFTPTestsFixture { sftp_server = std::make_unique<SFTPTestServer>(working_directory); REQUIRE(true == sftp_server->start()); - if (configuration) { - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(working_directory)); - } // Build MiNiFi processing graph createPlan(nullptr, configuration); } @@ -95,9 +92,6 @@ class ListSFTPTestsFixture { list_sftp = nullptr; plan.reset(); - if (configuration) { - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(working_directory)); - } plan = testController.createPlan(configuration, state_dir); if (list_sftp_uuid == nullptr) { list_sftp = plan->addProcessor( diff --git a/extensions/standard-processors/tests/unit/TailFileTests.cpp b/extensions/standard-processors/tests/unit/TailFileTests.cpp index 9cc7e9b19..0d8cdfadb 100644 --- a/extensions/standard-processors/tests/unit/TailFileTests.cpp +++ b/extensions/standard-processors/tests/unit/TailFileTests.cpp @@ -1056,7 +1056,6 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n // use persistent state storage that defaults to rocksDB, not volatile const auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(log_dir)); { auto test_plan = testController.createPlan(configuration, state_dir); auto tail_file = test_plan->addProcessor("TailFile", tail_file_uuid, "Tail", {success_relationship}); diff --git a/libminifi/include/properties/Configure.h b/libminifi/include/properties/Configure.h index 249fc53b2..cf8df66b2 100644 --- a/libminifi/include/properties/Configure.h +++ b/libminifi/include/properties/Configure.h @@ -21,7 +21,6 @@ #include <string> #include <utility> -#include "LocationsImpl.h" #include "core/logging/LoggerProperties.h" #include "minifi-cpp/core/AgentIdentificationProvider.h" #include "minifi-cpp/properties/Configure.h" @@ -54,9 +53,6 @@ class ConfigureImpl : public ConfigurationImpl, public virtual core::AgentIdenti void set(const std::string& key, const std::string& value, PropertyChangeLifetime lifetime) override; bool commitChanges() override; - [[nodiscard]] std::shared_ptr<const Locations> getLocations() const override; - void setLocations(std::shared_ptr<const Locations> locations) override; - private: // WARNING! a test utility void setLoggerProperties(std::shared_ptr<core::logging::LoggerProperties> new_properties) { @@ -69,7 +65,6 @@ class ConfigureImpl : public ConfigurationImpl, public virtual core::AgentIdenti mutable std::mutex fallback_identifier_mutex_; std::string fallback_identifier_; std::atomic_bool logger_properties_changed_{false}; - std::shared_ptr<const Locations> locations_; std::shared_ptr<core::logging::LoggerProperties> logger_properties_; }; diff --git a/libminifi/include/properties/LocationsImpl.h b/libminifi/include/properties/LocationsImpl.h deleted file mode 100644 index 5f602e11f..000000000 --- a/libminifi/include/properties/LocationsImpl.h +++ /dev/null @@ -1,103 +0,0 @@ -/** -* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#pragma once - -#include "minifi-cpp/properties/Locations.h" -#include "Defaults.h" -#include "fmt/format.h" - -namespace org::apache::nifi::minifi { -class LocationsImpl final : public Locations { - struct M { - std::filesystem::path working_dir_; - std::filesystem::path lock_path_; - std::filesystem::path log_properties_path_; - std::filesystem::path uid_properties_path_; - std::filesystem::path properties_path_; - std::filesystem::path logs_dir_; - std::filesystem::path fips_bin_path_; - std::filesystem::path fips_conf_path_; - std::string extensions_pattern_; - } m; - - explicit LocationsImpl(M m) : m(std::move(m)) {} - - public: - static std::shared_ptr<LocationsImpl> createFromMinifiHome(const std::filesystem::path& minifi_home) { - return std::shared_ptr<LocationsImpl>(new LocationsImpl(M{ - .working_dir_ = minifi_home, - .lock_path_ = minifi_home / "LOCK", - .log_properties_path_ = minifi_home / DEFAULT_LOG_PROPERTIES_FILE, - .uid_properties_path_ = minifi_home / DEFAULT_UID_PROPERTIES_FILE, - .properties_path_ = minifi_home / DEFAULT_NIFI_PROPERTIES_FILE, - .logs_dir_ = minifi_home / "logs", - .fips_bin_path_ = minifi_home / "fips", - .fips_conf_path_ = minifi_home / "fips", - .extensions_pattern_ = "../extensions/*" - })); - } - - static std::shared_ptr<LocationsImpl> createForFHS() { - return std::shared_ptr<LocationsImpl>(new LocationsImpl(M{ - .working_dir_ = "/var/lib/nifi-minifi-cpp", - .lock_path_ = "/var/lib/nifi-minifi-cpp/LOCK", - .log_properties_path_ = "/etc/nifi-minifi-cpp/minifi-log.properties", - .uid_properties_path_ = "/etc/nifi-minifi-cpp/minifi-uid.properties", - .properties_path_ = "/etc/nifi-minifi-cpp/minifi.properties", - .logs_dir_ = "/var/log/nifi-minifi-cpp", - .fips_bin_path_ = "/usr/lib64/nifi-minifi-cpp/fips", - .fips_conf_path_ = "/etc/nifi-minifi-cpp/fips", - .extensions_pattern_ = "/usr/lib64/nifi-minifi-cpp/extensions/*" - })); - } - - [[nodiscard]] const std::filesystem::path& getWorkingDir() const override { return m.working_dir_; } - [[nodiscard]] const std::filesystem::path& getLockPath() const override { return m.lock_path_; } - [[nodiscard]] const std::filesystem::path& getLogPropertiesPath() const override { return m.log_properties_path_; } - [[nodiscard]] const std::filesystem::path& getUidPropertiesPath() const override { return m.uid_properties_path_; } - [[nodiscard]] const std::filesystem::path& getPropertiesPath() const override { return m.properties_path_; } - [[nodiscard]] const std::filesystem::path& getFipsBinPath() const override { return m.fips_bin_path_; } - [[nodiscard]] const std::filesystem::path& getFipsConfPath() const override { return m.fips_conf_path_; } - [[nodiscard]] const std::filesystem::path& getLogsDirs() const override { return m.logs_dir_; } - [[nodiscard]] std::string_view getDefaultExtensionsPattern() const override { return m.extensions_pattern_; } - - [[nodiscard]] std::string toString() const override { - return fmt::format( - R"( -Locations {{ - working dir: "{}", - lock path: "{}", - log properties path: "{}", - uid properties path: "{}", - properties path: "{}", - fips bin path: "{}", - fips conf path: "{}", - logs dir: "{}", - extensions pattern: "{}" -}})", - getWorkingDir().string(), - getLockPath().string(), - getLogPropertiesPath().string(), - getUidPropertiesPath().string(), - getPropertiesPath().string(), - getFipsBinPath().string(), - getFipsConfPath().string(), - getLogsDirs().string(), - getDefaultExtensionsPattern()); - } -}; -} // namespace org::apache::nifi::minifi diff --git a/libminifi/src/Configure.cpp b/libminifi/src/Configure.cpp index 922a59e22..3e895735e 100644 --- a/libminifi/src/Configure.cpp +++ b/libminifi/src/Configure.cpp @@ -135,15 +135,6 @@ bool ConfigureImpl::commitChanges() { return success; } -std::shared_ptr<const Locations> ConfigureImpl::getLocations() const { - return locations_; -} - -void ConfigureImpl::setLocations(std::shared_ptr<const Locations> locations) { - locations_ = std::move(locations); -} - - gsl::not_null<std::shared_ptr<Configure>> Configure::create() { return gsl::make_not_null<std::shared_ptr<Configure>>(std::make_shared<ConfigureImpl>()); } diff --git a/libminifi/src/core/extension/ExtensionManager.cpp b/libminifi/src/core/extension/ExtensionManager.cpp index 05e2f73ab..9ea19f015 100644 --- a/libminifi/src/core/extension/ExtensionManager.cpp +++ b/libminifi/src/core/extension/ExtensionManager.cpp @@ -26,6 +26,7 @@ #include "agent/agent_version.h" #include "core/extension/Utils.h" #include "properties/Configuration.h" +#include "utils/Locations.h" namespace org::apache::nifi::minifi::core::extension { @@ -49,8 +50,6 @@ ExtensionManager& ExtensionManager::get() { return ExtensionManagerImpl::get(); } -constexpr std::string_view DEFAULT_EXTENSION_PATH = "../extensions/*"; - bool ExtensionManagerImpl::initialize(const std::shared_ptr<Configure>& config) { static bool initialized = ([&] { logger_->log_trace("Initializing extensions"); @@ -69,13 +68,9 @@ bool ExtensionManagerImpl::initialize(const std::shared_ptr<Configure>& config) return *opt_pattern; }; - if (const auto locations = config->getLocations()) { - logger_->log_warn("No extension path is provided in properties, using default : '{}'", locations->getDefaultExtensionsPattern()); - return std::string(locations->getDefaultExtensionsPattern()); - }; - - logger_->log_error("No extension path is provided in properties and locations is empty, using hard-coded default: '{}'", DEFAULT_EXTENSION_PATH); - return std::string(DEFAULT_EXTENSION_PATH); + auto default_extension_path = utils::getDefaultExtensionsPattern(); + logger_->log_warn("No extension path is provided in properties, using default: '{}'", default_extension_path); + return default_extension_path; }(); auto candidates = utils::file::match(utils::file::FilePattern(pattern, [&] (std::string_view subpattern, std::string_view error_msg) { diff --git a/libminifi/src/utils/file/AssetManager.cpp b/libminifi/src/utils/file/AssetManager.cpp index 039078135..024362508 100644 --- a/libminifi/src/utils/file/AssetManager.cpp +++ b/libminifi/src/utils/file/AssetManager.cpp @@ -16,11 +16,13 @@ */ #include "utils/file/AssetManager.h" -#include "utils/file/FileUtils.h" + +#include "core/logging/LoggerFactory.h" #include "rapidjson/document.h" #include "rapidjson/writer.h" -#include "core/logging/LoggerFactory.h" #include "utils/Hash.h" +#include "utils/Locations.h" +#include "utils/file/FileUtils.h" #undef GetObject // windows.h #defines GetObject = GetObjectA or GetObjectW, which conflicts with rapidjson @@ -30,10 +32,7 @@ std::filesystem::path getRootFromConfigure(const Configure& configuration) { if (auto nifi_asset_directory = configuration.get(Configure::nifi_asset_directory)) { return *nifi_asset_directory; } - if (const auto locations = configuration.getLocations()) { - return locations->getWorkingDir() / "asset"; - } - return std::filesystem::path("") / "asset"; + return utils::getMinifiDir() / "asset"; } AssetManager::AssetManager(const Configure& configuration) diff --git a/libminifi/test/integration/AlertTests.cpp b/libminifi/test/integration/AlertTests.cpp index 8530053b4..b972d4b8a 100644 --- a/libminifi/test/integration/AlertTests.cpp +++ b/libminifi/test/integration/AlertTests.cpp @@ -80,7 +80,6 @@ TEST_CASE("Alert system forwards logs") { AlertHandler handler(agent_id); harness.setUrl("http://localhost:0/api/alerts", &handler); harness.getConfiguration()->set(minifi::Configuration::nifi_c2_agent_identifier, agent_id); - harness.getConfiguration()->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir.getPath())); auto log_props = std::make_shared<logging::LoggerProperties>(dir.getPath() / "logs"); log_props->set("appender.alert1", "alert"); diff --git a/libminifi/test/integration/C2DebugBundleTest.cpp b/libminifi/test/integration/C2DebugBundleTest.cpp index ab742d6d0..3e9f1a606 100644 --- a/libminifi/test/integration/C2DebugBundleTest.cpp +++ b/libminifi/test/integration/C2DebugBundleTest.cpp @@ -189,7 +189,6 @@ TEST_CASE("C2DebugBundleTest", "[c2test]") { return true; }); - harness.getConfiguration()->setLocations(minifi::LocationsImpl::createFromMinifiHome(home_dir.string())); harness.getConfiguration()->loadConfigureFile(home_dir / "conf/minifi.properties"); harness.setUrl("http://localhost:0/heartbeat", &heartbeat_handler); harness.setUrl("http://localhost:0/acknowledge", &ack_handler); diff --git a/libminifi/test/integration/C2PropertiesUpdateTests.cpp b/libminifi/test/integration/C2PropertiesUpdateTests.cpp index 6e7076f57..7600c8428 100644 --- a/libminifi/test/integration/C2PropertiesUpdateTests.cpp +++ b/libminifi/test/integration/C2PropertiesUpdateTests.cpp @@ -212,7 +212,6 @@ TEST_CASE("C2PropertiesUpdateTests", "[c2test]") { } }); - harness.getConfiguration()->setLocations(minifi::LocationsImpl::createFromMinifiHome(home_dir.string())); harness.getConfiguration()->loadConfigureFile(home_dir / "conf/minifi.properties"); ConfigTestAccessor::call_setLoggerProperties(harness.getConfiguration(), logger_properties); diff --git a/libminifi/test/libtest/unit/TestBase.cpp b/libminifi/test/libtest/unit/TestBase.cpp index 15527c79e..9d494fa96 100644 --- a/libminifi/test/libtest/unit/TestBase.cpp +++ b/libminifi/test/libtest/unit/TestBase.cpp @@ -717,7 +717,6 @@ TestController::TestController() std::shared_ptr<TestPlan> TestController::createPlan(PlanConfig config) { if (!config.configuration) { config.configuration = minifi::Configure::create(); - config.configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(createTempDirectory())); config.configuration->set(minifi::Configure::nifi_state_storage_local_class_name, "VolatileMapStateStorage"); config.configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, createTempDirectory().string()); } diff --git a/libminifi/test/persistence-tests/PersistenceTests.cpp b/libminifi/test/persistence-tests/PersistenceTests.cpp index c96f888ca..7e986dba5 100644 --- a/libminifi/test/persistence-tests/PersistenceTests.cpp +++ b/libminifi/test/persistence-tests/PersistenceTests.cpp @@ -172,7 +172,6 @@ TEST_CASE("Processors Can Store FlowFiles", "[TestP1]") { auto dir = testController.createTempDirectory(); auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, (dir / "content_repository").string()); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, (dir / "flowfile_repository").string()); @@ -286,7 +285,6 @@ TEST_CASE("Persisted flowFiles are updated on modification", "[TestP1]") { auto dir = testController.createTempDirectory(); auto config = std::make_shared<minifi::ConfigureImpl>(); - config->setLocations(minifi::LocationsImpl::createFromMinifiHome(dir)); config->set(minifi::Configure::nifi_dbcontent_repository_directory_default, (dir / "content_repository").string()); config->set(minifi::Configure::nifi_flowfile_repository_directory_default, (dir / "flowfile_repository").string()); config->set(minifi::Configure::nifi_dbcontent_repository_purge_period, "0 s"); diff --git a/libminifi/test/unit/DecryptorTests.cpp b/libminifi/test/unit/DecryptorTests.cpp index dc1531e28..1c4c44217 100644 --- a/libminifi/test/unit/DecryptorTests.cpp +++ b/libminifi/test/unit/DecryptorTests.cpp @@ -90,7 +90,6 @@ TEST_CASE("Decryptor can decrypt a configuration file", "[decryptSensitiveProper minifi::ConfigureImpl configuration{decryptor}; std::filesystem::path resources_dir{TEST_RESOURCES}; - configuration.setLocations(minifi::LocationsImpl::createFromMinifiHome(resources_dir)); configuration.loadConfigureFile(resources_dir / "encrypted.minifi.properties"); REQUIRE_FALSE(configuration.getConfiguredKeys().empty()); diff --git a/libminifi/test/unit/LogMetricsPublisherTests.cpp b/libminifi/test/unit/LogMetricsPublisherTests.cpp index 557595ac8..252300b75 100644 --- a/libminifi/test/unit/LogMetricsPublisherTests.cpp +++ b/libminifi/test/unit/LogMetricsPublisherTests.cpp @@ -39,7 +39,6 @@ class LogPublisherTestFixture { response_node_loader_(std::make_shared<state::response::ResponseNodeLoaderImpl>(configuration_, std::vector<std::shared_ptr<core::RepositoryMetricsSource>>{provenance_repo_, flow_file_repo_}, nullptr)), publisher_("LogMetricsPublisher") { - configuration_->setLocations(minifi::LocationsImpl::createFromMinifiHome(temp_directory_.getPath())); provenance_repo_->initialize(configuration_); flow_file_repo_->initialize(configuration_); } diff --git a/libminifi/test/unit/ProcessSessionTests.cpp b/libminifi/test/unit/ProcessSessionTests.cpp index 212630677..8585f6456 100644 --- a/libminifi/test/unit/ProcessSessionTests.cpp +++ b/libminifi/test/unit/ProcessSessionTests.cpp @@ -146,7 +146,6 @@ class TestVolatileFlowFileRepository : public core::repository::VolatileFlowFile TEST_CASE("ProcessSession::commit avoids dangling ResourceClaims when using VolatileFlowFileRepository", "[incrementbefore]") { TempDirectory tmp_dir; auto configuration = std::make_shared<minifi::ConfigureImpl>(); - configuration->setLocations(minifi::LocationsImpl::createFromMinifiHome(tmp_dir.getPath())); configuration->set(minifi::Configure::nifi_volatile_repository_options_flowfile_max_count, "2"); auto ff_repo = std::make_shared<TestVolatileFlowFileRepository>("flowfile"); Fixture fixture({ diff --git a/minifi-api/include/minifi-cpp/properties/Configure.h b/minifi-api/include/minifi-cpp/properties/Configure.h index 945bab143..ac05b42db 100644 --- a/minifi-api/include/minifi-cpp/properties/Configure.h +++ b/minifi-api/include/minifi-cpp/properties/Configure.h @@ -22,7 +22,6 @@ #include <utility> #include "Configuration.h" -#include "Locations.h" #include "minifi-cpp/core/AgentIdentificationProvider.h" #include "utils/gsl.h" @@ -45,8 +44,6 @@ class Configure : public virtual Configuration, public virtual core::AgentIdenti using Configuration::set; void set(const std::string& key, const std::string& value, PropertyChangeLifetime lifetime) override = 0; bool commitChanges() override = 0; - [[nodiscard]] virtual std::shared_ptr<const Locations> getLocations() const = 0; - virtual void setLocations(std::shared_ptr<const Locations>) = 0; static gsl::not_null<std::shared_ptr<Configure>> create(); }; diff --git a/minifi-api/include/minifi-cpp/properties/Locations.h b/minifi-api/include/minifi-cpp/properties/Locations.h deleted file mode 100644 index 3643d36cb..000000000 --- a/minifi-api/include/minifi-cpp/properties/Locations.h +++ /dev/null @@ -1,37 +0,0 @@ -/** -* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#pragma once - -#include <filesystem> - -namespace org::apache::nifi::minifi { -class Locations { -public: - virtual ~Locations() = default; - [[nodiscard]] virtual const std::filesystem::path& getWorkingDir() const = 0; - [[nodiscard]] virtual const std::filesystem::path& getLockPath() const = 0; - [[nodiscard]] virtual const std::filesystem::path& getLogPropertiesPath() const = 0; - [[nodiscard]] virtual const std::filesystem::path& getUidPropertiesPath() const = 0; - [[nodiscard]] virtual const std::filesystem::path& getPropertiesPath() const = 0; - [[nodiscard]] virtual const std::filesystem::path& getFipsBinPath() const = 0; - [[nodiscard]] virtual const std::filesystem::path& getFipsConfPath() const = 0; - [[nodiscard]] virtual const std::filesystem::path& getLogsDirs() const = 0; - [[nodiscard]] virtual std::string_view getDefaultExtensionsPattern() const = 0; - - [[nodiscard]] virtual std::string toString() const = 0; -}; -} // namespace org::apache::nifi::minifi diff --git a/minifi_main/Fips.cpp b/minifi_main/Fips.cpp index 084754a56..cb81d32d1 100644 --- a/minifi_main/Fips.cpp +++ b/minifi_main/Fips.cpp @@ -16,15 +16,18 @@ */ #include "Fips.h" -#include <fstream> +#include <openssl/err.h> +#include <openssl/evp.h> +#include <openssl/provider.h> + #include <algorithm> +#include <fstream> #include <string> -#include <openssl/provider.h> -#include <openssl/evp.h> -#include <openssl/err.h> + +#include "MainHelper.h" #include "utils/Environment.h" -#include "utils/StringUtils.h" #include "utils/OptionalUtils.h" +#include "utils/StringUtils.h" namespace org::apache::nifi::minifi::fips { @@ -73,8 +76,8 @@ bool substituteFipsDirVariable(const std::filesystem::path& file_path, const std } bool generateFipsModuleConfig(const Locations& locations, const std::shared_ptr<core::logging::Logger>& logger) { - const auto& fips_bin_path = locations.getFipsBinPath(); - const auto& fips_conf_path = locations.getFipsConfPath(); + const auto& fips_bin_path = locations.fips_bin_path_; + const auto& fips_conf_path = locations.fips_conf_path_; std::filesystem::path output_file(fips_conf_path / "fipsmodule.cnf"); logger->log_info("fipsmodule.cnf was not found, trying to run fipsinstall command to generate the file"); @@ -93,8 +96,8 @@ bool generateFipsModuleConfig(const Locations& locations, const std::shared_ptr< } // namespace void initializeFipsMode(const std::shared_ptr<minifi::Configure>& configure, const Locations& locations, const std::shared_ptr<core::logging::Logger>& logger) { - const auto& fips_bin_path = locations.getFipsBinPath(); - const auto& fips_conf_path = locations.getFipsConfPath(); + const auto& fips_bin_path = locations.fips_bin_path_; + const auto& fips_conf_path = locations.fips_conf_path_; if (!(configure->get(minifi::Configure::nifi_openssl_fips_support_enable) | utils::andThen(utils::string::toBool)).value_or(false)) { logger->log_info("FIPS mode is disabled. FIPS configs and modules will NOT be loaded."); return; diff --git a/minifi_main/Fips.h b/minifi_main/Fips.h index e4a560c81..084ea85d4 100644 --- a/minifi_main/Fips.h +++ b/minifi_main/Fips.h @@ -18,9 +18,10 @@ #include <filesystem> #include <memory> + +#include "MainHelper.h" #include "core/logging/Logger.h" #include "minifi-cpp/properties/Configure.h" -#include "minifi-cpp/properties/Locations.h" namespace org::apache::nifi::minifi::fips { diff --git a/minifi_main/MainHelper.cpp b/minifi_main/MainHelper.cpp index 1b0d4d07b..552ebdafb 100644 --- a/minifi_main/MainHelper.cpp +++ b/minifi_main/MainHelper.cpp @@ -112,18 +112,44 @@ std::filesystem::path determineMinifiHome(const std::shared_ptr<logging::Logger> return minifi_home; } -std::shared_ptr<minifi::Locations> determineLocations(const std::shared_ptr<logging::Logger>& logger) { +Locations getFromMinifiHome(const std::filesystem::path& minifi_home) { + return { + .working_dir_ = minifi_home, + .lock_path_ = minifi_home / "LOCK", + .log_properties_path_ = minifi_home / DEFAULT_LOG_PROPERTIES_FILE, + .uid_properties_path_ = minifi_home / DEFAULT_UID_PROPERTIES_FILE, + .properties_path_ = minifi_home / DEFAULT_NIFI_PROPERTIES_FILE, + .logs_dir_ = minifi_home / "logs", + .fips_bin_path_ = minifi_home / "fips", + .fips_conf_path_ = minifi_home / "fips", + }; +} + +Locations getFromFHS() { + return { + .working_dir_ = "/var/lib/nifi-minifi-cpp", + .lock_path_ = "/var/lib/nifi-minifi-cpp/LOCK", + .log_properties_path_ = "/etc/nifi-minifi-cpp/minifi-log.properties", + .uid_properties_path_ = "/etc/nifi-minifi-cpp/minifi-uid.properties", + .properties_path_ = "/etc/nifi-minifi-cpp/minifi.properties", + .logs_dir_ = "/var/log/nifi-minifi-cpp", + .fips_bin_path_ = "/usr/lib64/nifi-minifi-cpp/fips", + .fips_conf_path_ = "/etc/nifi-minifi-cpp/fips" + }; +} + +std::optional<Locations> determineLocations(const std::shared_ptr<logging::Logger>& logger) { if (const auto minifi_home_env = utils::Environment::getEnvironmentVariable(MINIFI_HOME_ENV_KEY)) { if (minifi_home_env == "FHS") { - return minifi::LocationsImpl::createForFHS(); + return getFromFHS(); } } if (const auto executable_path = utils::file::get_executable_path(); executable_path.parent_path() == "/usr/bin") { - return minifi::LocationsImpl::createForFHS(); + return getFromFHS(); } const auto minifi_home = determineMinifiHome(logger); if (minifi_home.empty()) { - return nullptr; + return std::nullopt; } - return minifi::LocationsImpl::createFromMinifiHome(minifi_home); + return getFromMinifiHome(minifi_home); } diff --git a/minifi_main/MainHelper.h b/minifi_main/MainHelper.h index c584eae11..457a58ea4 100644 --- a/minifi_main/MainHelper.h +++ b/minifi_main/MainHelper.h @@ -52,25 +52,25 @@ extern "C" { #endif #endif -/** - * Validates a MINIFI_HOME value. - * @param home_path - * @return true if home_path represents a valid MINIFI_HOME - */ -bool validHome(const std::string &home_path); +struct Locations { + std::filesystem::path working_dir_; + std::filesystem::path lock_path_; + std::filesystem::path log_properties_path_; + std::filesystem::path uid_properties_path_; + std::filesystem::path properties_path_; + std::filesystem::path logs_dir_; + std::filesystem::path fips_bin_path_; + std::filesystem::path fips_conf_path_; +}; /** * Configures the logger to log everything to syslog/Windows Event Log, and for the minimum log level to INFO */ void setSyslogLogger(); -/** - * Determines the full path of MINIFI_HOME - * @return MINIFI_HOME on success, empty string on failure - */ std::filesystem::path determineMinifiHome(const std::shared_ptr<org::apache::nifi::minifi::core::logging::Logger>& logger); -std::shared_ptr<org::apache::nifi::minifi::Locations> determineLocations(const std::shared_ptr<org::apache::nifi::minifi::core::logging::Logger>& logger); +std::optional<Locations> determineLocations(const std::shared_ptr<org::apache::nifi::minifi::core::logging::Logger>& logger); #endif /* MAIN_MAINHELPER_H_ */ diff --git a/minifi_main/MiNiFiMain.cpp b/minifi_main/MiNiFiMain.cpp index 9d19527cb..6c0ef97b0 100644 --- a/minifi_main/MiNiFiMain.cpp +++ b/minifi_main/MiNiFiMain.cpp @@ -65,7 +65,6 @@ #include "core/state/MetricsPublisherStore.h" #include "core/state/nodes/ResponseNodeLoader.h" #include "properties/Decryptor.h" -#include "properties/LocationsImpl.h" #include "utils/Environment.h" #include "utils/FileMutex.h" #include "utils/file/AssetManager.h" @@ -273,19 +272,19 @@ int main(int argc, char **argv) { return -1; } - utils::FileMutex minifi_home_mtx(locations->getLockPath()); + utils::FileMutex minifi_home_mtx(locations->lock_path_); std::unique_lock minifi_home_lock(minifi_home_mtx, std::defer_lock); try { minifi_home_lock.lock(); } catch (const std::exception& ex) { - logger->log_error("Could not acquire LOCK '{}', maybe another minifi instance is running: {}", locations->getLockPath(), ex.what()); + logger->log_error("Could not acquire LOCK '{}', maybe another minifi instance is running: {}", locations->lock_path_, ex.what()); std::exit(1); } // chdir to MINIFI_HOME std::error_code current_path_error; - std::filesystem::current_path(locations->getWorkingDir(), current_path_error); + std::filesystem::current_path(locations->working_dir_, current_path_error); if (current_path_error) { - logger->log_error("Failed to change working directory to {}", locations->getWorkingDir()); + logger->log_error("Failed to change working directory to {}", locations->working_dir_); return -1; } @@ -310,19 +309,19 @@ int main(int argc, char **argv) { std::string nifi_configuration_class_name = "adaptiveconfiguration"; std::string content_repo_class = "filesystemrepository"; - auto log_properties = std::make_shared<core::logging::LoggerProperties>(locations->getLogsDirs()); - log_properties->loadConfigureFile(locations->getLogPropertiesPath(), "nifi.log."); + auto log_properties = std::make_shared<core::logging::LoggerProperties>(locations->log_properties_path_); + log_properties->loadConfigureFile(locations->log_properties_path_, "nifi.log."); logger_configuration.initialize(log_properties); std::shared_ptr<minifi::Properties> uid_properties = std::make_shared<minifi::PropertiesImpl>("UID properties"); - uid_properties->loadConfigureFile(locations->getUidPropertiesPath()); + uid_properties->loadConfigureFile(locations->uid_properties_path_); utils::IdGenerator::getIdGenerator()->initialize(uid_properties); // Make a record of minifi home in the configured log file. - logger->log_info("MiNiFi Locations={}", locations->toString()); + //logger->log_info("MiNiFi Locations={}", locations->toString()); TODO(mzink) - auto decryptor = minifi::Decryptor::create(locations->getWorkingDir()); + auto decryptor = minifi::Decryptor::create(locations->working_dir_); if (decryptor) { logger->log_info("Found encryption key, will decrypt sensitive properties in the configuration"); } else { @@ -330,8 +329,7 @@ int main(int argc, char **argv) { } const std::shared_ptr<minifi::Configure> configure = std::make_shared<minifi::ConfigureImpl>(std::move(decryptor), std::move(log_properties)); - configure->setLocations(locations); - configure->loadConfigureFile(locations->getPropertiesPath()); + configure->loadConfigureFile(locations->properties_path_); overridePropertiesFromCommandLine(argument_parser, configure); minifi::fips::initializeFipsMode(configure, *locations, logger); @@ -391,7 +389,7 @@ int main(int argc, char **argv) { auto filesystem = std::make_shared<utils::file::FileSystem>( should_encrypt_flow_config, - utils::crypto::EncryptionProvider::create(locations->getWorkingDir())); + utils::crypto::EncryptionProvider::create(locations->working_dir_)); auto asset_manager = std::make_unique<utils::file::AssetManager>(*configure); auto bulletin_store = std::make_unique<core::BulletinStore>(*configure); @@ -403,7 +401,7 @@ int main(int argc, char **argv) { .configuration = configure, .path = configure->get(minifi::Configure::nifi_flow_configuration_file), .filesystem = filesystem, - .sensitive_values_encryptor = utils::crypto::EncryptionProvider::createSensitivePropertiesEncryptor(locations->getWorkingDir()), + .sensitive_values_encryptor = utils::crypto::EncryptionProvider::createSensitivePropertiesEncryptor(locations->working_dir_), .asset_manager = asset_manager.get(), .bulletin_store = bulletin_store.get() }, nifi_configuration_class_name); diff --git a/utils/include/utils/Locations.h b/utils/include/utils/Locations.h new file mode 100644 index 000000000..0f54e5d76 --- /dev/null +++ b/utils/include/utils/Locations.h @@ -0,0 +1,42 @@ +/** +* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#pragma once + +#include <filesystem> + +#include "Environment.h" +#include "file/FileUtils.h" + +constexpr std::string_view MINIFI_HOME_ENV_KEY = "MINIFI_HOME"; + +namespace org::apache::nifi::minifi::utils { +inline std::string getDefaultExtensionsPattern() { + constexpr std::string_view DEFAULT_EXTENSION_PATH = "../extensions/*"; + constexpr std::string_view DEFAULT_EXTENSION_PATH_RPM = "/usr/lib64/nifi-minifi-cpp/extensions/*"; + if (Environment::getEnvironmentVariable(MINIFI_HOME_ENV_KEY.data()) == "FHS" || file::get_executable_path().parent_path() == "/usr/bin") { + return std::string(DEFAULT_EXTENSION_PATH_RPM); + } + return std::string(DEFAULT_EXTENSION_PATH); +} + +inline std::filesystem::path getMinifiDir() { + if (Environment::getEnvironmentVariable(MINIFI_HOME_ENV_KEY.data()) == "FHS" || file::get_executable_path().parent_path() == "/usr/bin") { + return "/var/lib/nifi-minifi-cpp"; + } + return Environment::getEnvironmentVariable(MINIFI_HOME_ENV_KEY.data()).value_or(""); +} +} // org::apache::nifi::minifi::utils \ No newline at end of file
