You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by bq...@apache.org on 2018/02/08 23:47:06 UTC
nifi-minifi-cpp git commit: MINIFICPP-383: Implement env variable
replacement and set the default for repos to prefix with MINIFI_HOME
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 <be...@gmail.com>
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 <ph...@apache.org>
Authored: Fri Feb 2 12:24:32 2018 -0500
Committer: Bin Qiu <be...@gmail.com>
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);