Repository: nifi-minifi-cpp Updated Branches: refs/heads/master a6e503451 -> 95e676a2b
MINIFICPP-383: Implement env variable replacement and set the default for repos to prefix with MINIFI_HOME This closes #257. Signed-off-by: Bin Qiu <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/95e676a2 Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/95e676a2 Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/95e676a2 Branch: refs/heads/master Commit: 95e676a2b871f4baf6cfab4312753549e2d43ed6 Parents: a6e5034 Author: Marc Parisi <[email protected]> Authored: Fri Feb 2 12:24:32 2018 -0500 Committer: Bin Qiu <[email protected]> Committed: Thu Feb 8 15:45:53 2018 -0800 ---------------------------------------------------------------------- README.md | 11 +++- conf/minifi.properties | 4 +- .../rocksdb-repos/DatabaseContentRepository.cpp | 2 +- .../rocksdb-repos/DatabaseContentRepository.h | 1 - libminifi/include/ResourceClaim.h | 6 +- libminifi/include/core/ContentRepository.h | 6 ++ libminifi/include/core/StreamManager.h | 2 + libminifi/include/utils/StringUtils.h | 39 ++++++++++++- libminifi/include/utils/file/FileUtils.h | 23 ++++++++ libminifi/src/FlowController.cpp | 17 ------ libminifi/src/Properties.cpp | 1 + libminifi/src/ResourceClaim.cpp | 6 +- .../core/repository/FileSystemRepository.cpp | 9 +++ .../rocksdb-tests/DBContentRepositoryTests.cpp | 18 +++--- libminifi/test/unit/StringUtilsTests.cpp | 61 ++++++++++++++++++-- main/MiNiFiMain.cpp | 14 ++++- 16 files changed, 179 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/README.md ---------------------------------------------------------------------- diff --git a/README.md b/README.md index 4bb0b6f..1eb2d08 100644 --- a/README.md +++ b/README.md @@ -494,7 +494,16 @@ https://cwiki.apache.org/confluence/display/MINIFI/C2+Design+Proposal c2.agent.heartbeat.reporter.class=RESTReciver - +### Configuring Repository storage locations +Persistent repositories, such as the Flow File repository, use a configurable path to store data. +The repository locations and their defaults are defined below. By default the MINIFI_HOME env +variable is used. If this is not specified we extrapolate the path and use the root installation +folder. You may specify your own path in place of these defaults. + + in minifi.properties + nifi.provenance.repository.directory.default=${MINIFI_HOME}/provenance_repository + nifi.flowfile.repository.directory.default=${MINIFI_HOME}/flowfile_repository + nifi.database.content.repository.directory.default=${MINIFI_HOME}/content_repository ### Configuring Volatile and NO-OP Repositories Each of the repositories can be configured to be volatile ( state kept in memory and flushed http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/conf/minifi.properties ---------------------------------------------------------------------- diff --git a/conf/minifi.properties b/conf/minifi.properties index 6668754..cb80fae 100644 --- a/conf/minifi.properties +++ b/conf/minifi.properties @@ -20,9 +20,11 @@ nifi.administrative.yield.duration=30 sec # If a component has no work to do (is "bored"), how long should we wait before checking again for work? nifi.bored.yield.duration=10 millis # Provenance Repository # -nifi.provenance.repository.directory.default=./provenance_repository +nifi.provenance.repository.directory.default=${MINIFI_HOME}/provenance_repository nifi.provenance.repository.max.storage.time=1 MIN nifi.provenance.repository.max.storage.size=1 MB +nifi.flowfile.repository.directory.default=${MINIFI_HOME}/flowfile_repository +nifi.database.content.repository.directory.default=${MINIFI_HOME}/content_repository #nifi.remote.input.secure=true nifi.https.need.ClientAuth=true nifi.https.client.certificate=./conf/client.pem http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/extensions/rocksdb-repos/DatabaseContentRepository.cpp ---------------------------------------------------------------------- diff --git a/extensions/rocksdb-repos/DatabaseContentRepository.cpp b/extensions/rocksdb-repos/DatabaseContentRepository.cpp index 40b2124..5842bf2 100644 --- a/extensions/rocksdb-repos/DatabaseContentRepository.cpp +++ b/extensions/rocksdb-repos/DatabaseContentRepository.cpp @@ -34,7 +34,7 @@ bool DatabaseContentRepository::initialize(const std::shared_ptr<minifi::Configu if (configuration->get(Configure::nifi_dbcontent_repository_directory_default, value)) { directory_ = value; } else { - directory_ = "dbcontentrepository"; + directory_ = configuration->getHome() + "/dbcontentrepository"; } rocksdb::Options options; options.create_if_missing = true; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/extensions/rocksdb-repos/DatabaseContentRepository.h ---------------------------------------------------------------------- diff --git a/extensions/rocksdb-repos/DatabaseContentRepository.h b/extensions/rocksdb-repos/DatabaseContentRepository.h index 3c21e04..d469569 100644 --- a/extensions/rocksdb-repos/DatabaseContentRepository.h +++ b/extensions/rocksdb-repos/DatabaseContentRepository.h @@ -117,7 +117,6 @@ class DatabaseContentRepository : public core::ContentRepository, public core::C private: bool is_valid_; - std::string directory_; rocksdb::DB* db_; std::shared_ptr<logging::Logger> logger_; }; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/include/ResourceClaim.h ---------------------------------------------------------------------- diff --git a/libminifi/include/ResourceClaim.h b/libminifi/include/ResourceClaim.h index b788416..8cae8fc 100644 --- a/libminifi/include/ResourceClaim.h +++ b/libminifi/include/ResourceClaim.h @@ -54,9 +54,11 @@ class ResourceClaim : public std::enable_shared_from_this<ResourceClaim> { /*! * Create a new resource claim */ - ResourceClaim(std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager, const std::string contentDirectory = default_directory_path); + //explicit ResourceClaim(std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager, const std::string contentDirectory); - ResourceClaim(const std::string path, std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager, bool deleted = false); + explicit ResourceClaim(std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager); + + explicit ResourceClaim(const std::string path, std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager, bool deleted = false); // Destructor ~ResourceClaim() { } http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/include/core/ContentRepository.h ---------------------------------------------------------------------- diff --git a/libminifi/include/core/ContentRepository.h b/libminifi/include/core/ContentRepository.h index 87ac757..51d2765 100644 --- a/libminifi/include/core/ContentRepository.h +++ b/libminifi/include/core/ContentRepository.h @@ -46,6 +46,10 @@ class ContentRepository : public StreamManager<minifi::ResourceClaim> { */ virtual bool initialize(const std::shared_ptr<Configure> &configure) = 0; + virtual std::string getStoragePath() { + return directory_; + } + /** * Stops this repository. */ @@ -106,6 +110,8 @@ class ContentRepository : public StreamManager<minifi::ResourceClaim> { protected: + std::string directory_; + std::mutex count_map_mutex_; std::map<std::string, uint32_t> count_map_; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/include/core/StreamManager.h ---------------------------------------------------------------------- diff --git a/libminifi/include/core/StreamManager.h b/libminifi/include/core/StreamManager.h index b6d0f0a..5de9dbe 100644 --- a/libminifi/include/core/StreamManager.h +++ b/libminifi/include/core/StreamManager.h @@ -41,6 +41,8 @@ class StreamManager { } + virtual std::string getStoragePath() = 0; + /** * Create a write stream using the streamId as a reference. * @param streamId stream identifier http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/include/utils/StringUtils.h ---------------------------------------------------------------------- diff --git a/libminifi/include/utils/StringUtils.h b/libminifi/include/utils/StringUtils.h index ddd8307..fc8139d 100644 --- a/libminifi/include/utils/StringUtils.h +++ b/libminifi/include/utils/StringUtils.h @@ -16,7 +16,7 @@ */ #ifndef LIBMINIFI_INCLUDE_IO_STRINGUTILS_H_ #define LIBMINIFI_INCLUDE_IO_STRINGUTILS_H_ - +#include <iostream> #include <algorithm> #include <sstream> #include <vector> @@ -149,6 +149,43 @@ class StringUtils { } + static std::string replaceEnvironmentVariables(std::string& original_string) { + int32_t beg_seq = 0; + int32_t end_seq = 0; + std::string source_string = original_string; + do { + beg_seq = source_string.find("${", beg_seq); + if (beg_seq > 0 && source_string.at(beg_seq - 1) == '\\') { + beg_seq += 2; + continue; + } + if (beg_seq < 0) + break; + end_seq = source_string.find("}", beg_seq + 2); + if (end_seq < 0) + break; + if (end_seq - (beg_seq + 2) < 0) { + beg_seq += 2; + continue; + } + const std::string env_field = source_string.substr(beg_seq + 2, end_seq - (beg_seq + 2)); + const std::string env_field_wrapped = source_string.substr(beg_seq, end_seq + 1); + if (env_field.empty()) { + continue; + } + const auto strVal = std::getenv(env_field.c_str()); + std::string env_value; + if (strVal != nullptr) + env_value = strVal; + source_string = replaceAll(source_string, env_field_wrapped, env_value); + beg_seq = 0; // restart + } while (beg_seq >= 0); + + source_string = replaceAll(source_string, "\\$", "$"); + + return source_string; + } + static std::string& replaceAll(std::string& source_string, const std::string &from_string, const std::string &to_string) { std::size_t loc = 0; std::size_t lastFound; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/include/utils/file/FileUtils.h ---------------------------------------------------------------------- diff --git a/libminifi/include/utils/file/FileUtils.h b/libminifi/include/utils/file/FileUtils.h index 2011d7e..fd14e3e 100644 --- a/libminifi/include/utils/file/FileUtils.h +++ b/libminifi/include/utils/file/FileUtils.h @@ -21,6 +21,8 @@ #include <boost/filesystem.hpp> #else #include <cstdlib> +#include <sys/stat.h> +#include <dirent.h> #endif #include <cstdio> #include <unistd.h> @@ -57,6 +59,27 @@ class FileUtils { return 0; } + static int create_dir(const std::string &path, bool create = true) { +#ifdef BOOST_VERSION + boost::filesystem::path dir(path); + if(boost::filesystem::create_directory(dir)) + { + return 0; + } + else + { + return -1; + } +#else + struct stat dir_stat; + if (stat(path.c_str(), &dir_stat)) { + mkdir(path.c_str(), 0700); + } + return 0; +#endif + return -1; + } + }; } /* namespace file */ http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/src/FlowController.cpp ---------------------------------------------------------------------- diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp index e6118e6..e810e0c 100644 --- a/libminifi/src/FlowController.cpp +++ b/libminifi/src/FlowController.cpp @@ -137,23 +137,6 @@ void FlowController::initializePaths(const std::string &adjustedFilename) { configuration_filename_ = pathString; logger_->log_info("FlowController NiFi Configuration file %s", pathString); - // Create the content repo directory if needed - struct stat contentDirStat; - - minifi::setDefaultDirectory(DEFAULT_CONTENT_DIRECTORY); - - if (stat(minifi::default_directory_path.c_str(), &contentDirStat) != -1 && S_ISDIR(contentDirStat.st_mode)) { - path = realpath(minifi::default_directory_path.c_str(), full_path); - logger_->log_info("FlowController content directory %s", full_path); - } else { - if (mkdir(minifi::default_directory_path.c_str(), 0777) == -1) { - logger_->log_error("FlowController content directory creation failed"); - exit(1); - } - } - - std::string clientAuthStr; - if (!path) { logger_->log_error("Could not locate path from provided configuration file name (%s). Exiting.", full_path); exit(1); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/src/Properties.cpp ---------------------------------------------------------------------- diff --git a/libminifi/src/Properties.cpp b/libminifi/src/Properties.cpp index abebfbb..cb3b752 100644 --- a/libminifi/src/Properties.cpp +++ b/libminifi/src/Properties.cpp @@ -86,6 +86,7 @@ void Properties::parseConfigureFileLine(char *buf) { } std::string value = equal; + value = org::apache::nifi::minifi::utils::StringUtils::replaceEnvironmentVariables(value); key = org::apache::nifi::minifi::utils::StringUtils::trimRight(key); value = org::apache::nifi::minifi::utils::StringUtils::trimRight(value); set(key, value); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/src/ResourceClaim.cpp ---------------------------------------------------------------------- diff --git a/libminifi/src/ResourceClaim.cpp b/libminifi/src/ResourceClaim.cpp index 783a108..609ca20 100644 --- a/libminifi/src/ResourceClaim.cpp +++ b/libminifi/src/ResourceClaim.cpp @@ -41,10 +41,14 @@ void setDefaultDirectory(std::string path) { default_directory_path = path; } -ResourceClaim::ResourceClaim(std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager, const std::string contentDirectory) +ResourceClaim::ResourceClaim(std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager) : claim_manager_(claim_manager), deleted_(false), logger_(logging::LoggerFactory<ResourceClaim>::getLogger()) { + auto contentDirectory = claim_manager_->getStoragePath(); + if (contentDirectory.empty()) + contentDirectory = default_directory_path; + // Create the full content path for the content _contentFullPath = contentDirectory + "/" + non_repeating_string_generator_.generate(); logger_->log_debug("Resource Claim created %s", _contentFullPath); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/src/core/repository/FileSystemRepository.cpp ---------------------------------------------------------------------- diff --git a/libminifi/src/core/repository/FileSystemRepository.cpp b/libminifi/src/core/repository/FileSystemRepository.cpp index 4945b31..c0f1694 100644 --- a/libminifi/src/core/repository/FileSystemRepository.cpp +++ b/libminifi/src/core/repository/FileSystemRepository.cpp @@ -18,7 +18,9 @@ #include "core/repository/FileSystemRepository.h" #include <memory> +#include <string> #include "io/FileStream.h" +#include "utils/file/FileUtils.h" namespace org { namespace apache { @@ -28,6 +30,13 @@ namespace core { namespace repository { bool FileSystemRepository::initialize(const std::shared_ptr<minifi::Configure> &configuration) { + std::string value; + if (configuration->get(Configure::nifi_dbcontent_repository_directory_default, value)) { + directory_ = value; + } else { + directory_ = configuration->getHome() + "/contentrepository"; + } + utils::file::FileUtils::create_dir(directory_); return true; } void FileSystemRepository::stop() { http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp ---------------------------------------------------------------------- diff --git a/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp b/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp index 0dc2a3d..15fb81d 100644 --- a/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp +++ b/libminifi/test/rocksdb-tests/DBContentRepositoryTests.cpp @@ -36,7 +36,7 @@ TEST_CASE("Write Claim", "[TestDBCR1]") { REQUIRE(true == content_repo->initialize(configuration)); - auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir); + auto claim = std::make_shared<minifi::ResourceClaim>(content_repo); auto stream = content_repo->write(claim); stream->writeUTF("well hello there"); @@ -77,7 +77,7 @@ TEST_CASE("Delete Claim", "[TestDBCR2]") { REQUIRE(true == content_repo->initialize(configuration)); - auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir); + auto claim = std::make_shared<minifi::ResourceClaim>(content_repo); auto stream = content_repo->write(claim); stream->writeUTF("well hello there"); @@ -115,7 +115,7 @@ TEST_CASE("Test Empty Claim", "[TestDBCR3]") { configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir); REQUIRE(true == content_repo->initialize(configuration)); - auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir); + auto claim = std::make_shared<minifi::ResourceClaim>(content_repo); auto stream = content_repo->write(claim); // we're writing nothing to the stream. @@ -152,7 +152,7 @@ TEST_CASE("Test Null Claim", "[TestDBCR4]") { REQUIRE(true == content_repo->initialize(configuration)); - auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir); + auto claim = std::make_shared<minifi::ResourceClaim>(content_repo); auto stream = content_repo->write(nullptr); REQUIRE(stream == nullptr); @@ -172,7 +172,7 @@ TEST_CASE("Delete Null Claim", "[TestDBCR5]") { configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir); REQUIRE(true == content_repo->initialize(configuration)); - auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir); + auto claim = std::make_shared<minifi::ResourceClaim>(content_repo); auto stream = content_repo->write(claim); stream->writeUTF("well hello there"); @@ -212,8 +212,8 @@ TEST_CASE("Delete NonExistent Claim", "[TestDBCR5]") { configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir); REQUIRE(true == content_repo->initialize(configuration)); - auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir); - auto claim2 = std::make_shared<minifi::ResourceClaim>(content_repo, dir); + auto claim = std::make_shared<minifi::ResourceClaim>(content_repo); + auto claim2 = std::make_shared<minifi::ResourceClaim>(content_repo); auto stream = content_repo->write(claim); stream->writeUTF("well hello there"); @@ -254,8 +254,8 @@ TEST_CASE("Delete Remove Count Claim", "[TestDBCR6]") { configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, dir); REQUIRE(true == content_repo->initialize(configuration)); - auto claim = std::make_shared<minifi::ResourceClaim>(content_repo, dir); - auto claim2 = std::make_shared<minifi::ResourceClaim>(content_repo, dir); + auto claim = std::make_shared<minifi::ResourceClaim>(content_repo); + auto claim2 = std::make_shared<minifi::ResourceClaim>(content_repo); auto stream = content_repo->write(claim); stream->writeUTF("well hello there"); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/libminifi/test/unit/StringUtilsTests.cpp ---------------------------------------------------------------------- diff --git a/libminifi/test/unit/StringUtilsTests.cpp b/libminifi/test/unit/StringUtilsTests.cpp index c4e839b..3abf339 100644 --- a/libminifi/test/unit/StringUtilsTests.cpp +++ b/libminifi/test/unit/StringUtilsTests.cpp @@ -18,27 +18,78 @@ #include <string> #include <vector> - +#include <cstdlib> #include "../TestBase.h" #include "core/Core.h" #include "utils/StringUtils.h" +using org::apache::nifi::minifi::utils::StringUtils; + TEST_CASE("TestStringUtils::split", "[test split no delimiter]") { std::vector<std::string> expected = { "hello" }; - REQUIRE(expected == org::apache::nifi::minifi::utils::StringUtils::split("hello", ",")); + REQUIRE(expected == StringUtils::split("hello", ",")); } TEST_CASE("TestStringUtils::split2", "[test split single delimiter]") { std::vector<std::string> expected = { "hello", "world" }; - REQUIRE(expected == org::apache::nifi::minifi::utils::StringUtils::split("hello world", " ")); + REQUIRE(expected == StringUtils::split("hello world", " ")); } TEST_CASE("TestStringUtils::split3", "[test split multiple delimiter]") { std::vector<std::string> expected = { "hello", "world", "I'm", "a", "unit", "test" }; - REQUIRE(expected == org::apache::nifi::minifi::utils::StringUtils::split("hello world I'm a unit test", " ")); + REQUIRE(expected == StringUtils::split("hello world I'm a unit test", " ")); } TEST_CASE("TestStringUtils::split4", "[test split classname]") { std::vector<std::string> expected = { "org", "apache", "nifi", "minifi", "utils", "StringUtils" }; - REQUIRE(expected == org::apache::nifi::minifi::utils::StringUtils::split(org::apache::nifi::minifi::core::getClassName<org::apache::nifi::minifi::utils::StringUtils>(), "::")); + REQUIRE(expected == StringUtils::split(org::apache::nifi::minifi::core::getClassName<org::apache::nifi::minifi::utils::StringUtils>(), "::")); +} + +TEST_CASE("TestStringUtils::testEnv1", "[test split classname]") { + std::string test_string = "hello world ${blahblahnamenamenotexist}"; + + setenv("blahblahnamenamenotexist", "computer", 0); + + std::string expected = "hello world computer"; + + REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string)); +} + +TEST_CASE("TestStringUtils::testEnv2", "[test split classname]") { + std::string test_string = "hello world ${blahblahnamenamenotexist"; + + setenv("blahblahnamenamenotexist", "computer", 0); + + std::string expected = "hello world ${blahblahnamenamenotexist"; + + REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string)); +} + +TEST_CASE("TestStringUtils::testEnv3", "[test split classname]") { + std::string test_string = "hello world $${blahblahnamenamenotexist}"; + + setenv("blahblahnamenamenotexist", "computer", 0); + + std::string expected = "hello world $computer"; + + REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string)); +} + +TEST_CASE("TestStringUtils::testEnv4", "[test split classname]") { + std::string test_string = "hello world \\${blahblahnamenamenotexist}"; + + setenv("blahblahnamenamenotexist", "computer", 0); + + std::string expected = "hello world ${blahblahnamenamenotexist}"; + + REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string)); +} + +TEST_CASE("TestStringUtils::testEnv5", "[test split classname]") { + // can't use blahblahnamenamenotexist because the setenv in other functions may have already set it + std::string test_string = "hello world ${blahblahnamenamenotexist2}"; + + std::string expected = "hello world "; + + REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string)); } http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/95e676a2/main/MiNiFiMain.cpp ---------------------------------------------------------------------- diff --git a/main/MiNiFiMain.cpp b/main/MiNiFiMain.cpp index 780c4c9..6a669fe 100644 --- a/main/MiNiFiMain.cpp +++ b/main/MiNiFiMain.cpp @@ -19,6 +19,7 @@ */ #include <fcntl.h> #include <stdio.h> +#include <cstdlib> #include <semaphore.h> #include <signal.h> #include <vector> @@ -27,7 +28,7 @@ #include <unistd.h> #include <yaml-cpp/yaml.h> #include <iostream> - +#include "ResourceClaim.h" #include "core/Core.h" #include "core/FlowConfiguration.h" @@ -101,6 +102,9 @@ int main(int argc, char **argv) { getcwd(cwd, PATH_MAX); minifiHome = cwd; } + + logger->log_debug("Setting %s to %s", MINIFI_HOME_ENV_KEY, minifiHome); + setenv(MINIFI_HOME_ENV_KEY, minifiHome.c_str(), 0); } if (!validHome(minifiHome)) { @@ -110,7 +114,7 @@ int main(int argc, char **argv) { } if (signal(SIGINT, sigHandler) == SIG_ERR || signal(SIGTERM, sigHandler) == SIG_ERR || signal(SIGPIPE, SIG_IGN) == SIG_ERR) { - std::cerr << "Cannot install signal handler" << std::endl; + std::cerr << "Cannot install signal handler" << std::endl; return -1; } @@ -161,6 +165,12 @@ int main(int argc, char **argv) { content_repo->initialize(configure); + std::string content_repo_path; + if (configure->get(minifi::Configure::nifi_dbcontent_repository_directory_default, content_repo_path)){ + std::cout << "setting default dir to " << content_repo_path<< std::endl; + minifi::setDefaultDirectory(content_repo_path); + } + configure->get(minifi::Configure::nifi_configuration_class_name, nifi_configuration_class_name); std::shared_ptr<minifi::io::StreamFactory> stream_factory = std::make_shared<minifi::io::StreamFactory>(configure);
