Repository: nifi-minifi-cpp Updated Branches: refs/heads/master b53f497f3 -> 298b5dcce
MINIFICPP-681 - Minor fixes and improvements of HashContent proc. and related docs This closes #452. Signed-off-by: Marc Parisi <[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/298b5dcc Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/298b5dcc Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/298b5dcc Branch: refs/heads/master Commit: 298b5dcce0d1f04175b96eb9eec69eafbc634f1f Parents: b53f497 Author: Arpad Boda <[email protected]> Authored: Thu Nov 29 13:13:26 2018 +0100 Committer: Marc Parisi <[email protected]> Committed: Thu Nov 29 08:52:11 2018 -0500 ---------------------------------------------------------------------- PROCESSORS.md | 5 +++-- libminifi/include/processors/HashContent.h | 9 ++++++--- libminifi/src/processors/HashContent.cpp | 18 ++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/298b5dcc/PROCESSORS.md ---------------------------------------------------------------------- diff --git a/PROCESSORS.md b/PROCESSORS.md index f07a74a..9b77a61 100644 --- a/PROCESSORS.md +++ b/PROCESSORS.md @@ -148,13 +148,14 @@ default values, and whether a property supports the NiFi Expression Language. | - | - | - | - | | Hash Attribute | Checksum | | Name of the attribute the processor will use to add the checksum | | Hash Algorithm | MD5 | MD5, SHA1, SHA256 | Name of the algorithm used to calculate the checksum | +| Fail on empty | false | false, true | Route flow files with empty content to failure relationship | ### Relationships | Name | Description | | - | - | -| success | All FlowFiles are routed to this relationship. | - +| success | By default all flow files are routed to this relationship. | +| failure | In case "Fail on empty" property is set to true, flow files with empty content are routed to this relationship. | ## ConvertHeartBeat http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/298b5dcc/libminifi/include/processors/HashContent.h ---------------------------------------------------------------------- diff --git a/libminifi/include/processors/HashContent.h b/libminifi/include/processors/HashContent.h index acafd0f..28b865a 100644 --- a/libminifi/include/processors/HashContent.h +++ b/libminifi/include/processors/HashContent.h @@ -153,15 +153,17 @@ class HashContent : public core::Processor { //! Supported Properties static core::Property HashAttribute; static core::Property HashAlgorithm; + static core::Property FailOnEmpty; //! Supported Relationships static core::Relationship Success; + static core::Relationship Failure; - void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory) override; + void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory); // override //! OnTrigger method, implemented by NiFi HashContent - void onTrigger(core::ProcessContext *context, core::ProcessSession *session) override; + void onTrigger(core::ProcessContext *context, core::ProcessSession *session); // override //! Initialize, over write by NiFi HashContent - void initialize(void) override; + void initialize(void); // override class ReadCallback : public InputStreamCallback { public: @@ -181,6 +183,7 @@ class HashContent : public core::Processor { std::shared_ptr<logging::Logger> logger_; std::string algoName_; std::string attrKey_; + bool failOnEmpty_; }; REGISTER_RESOURCE(HashContent); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/298b5dcc/libminifi/src/processors/HashContent.cpp ---------------------------------------------------------------------- diff --git a/libminifi/src/processors/HashContent.cpp b/libminifi/src/processors/HashContent.cpp index e76a368..962e70c 100644 --- a/libminifi/src/processors/HashContent.cpp +++ b/libminifi/src/processors/HashContent.cpp @@ -36,8 +36,10 @@ namespace minifi { namespace processors { core::Property HashContent::HashAttribute("Hash Attribute", "Attribute to store checksum to", "Checksum"); -core::Property HashContent::HashAlgorithm("Hash Algorithm", "Name of the algorithm used to generate checksum", "MD5"); +core::Property HashContent::HashAlgorithm("Hash Algorithm", "Name of the algorithm used to generate checksum", "SHA256"); +core::Property HashContent::FailOnEmpty("Fail on empty", "Route to failure relationship in case of empty content", "false"); core::Relationship HashContent::Success("success", "success operational on the flow record"); +core::Relationship HashContent::Failure("failure", "failure operational on the flow record"); void HashContent::initialize() { //! Set the supported properties @@ -48,6 +50,7 @@ void HashContent::initialize() { //! Set the supported relationships std::set<core::Relationship> relationships; relationships.insert(Success); + relationships.insert(Failure); setSupportedRelationships(relationships); } @@ -55,7 +58,14 @@ void HashContent::onSchedule(core::ProcessContext *context, core::ProcessSession std::string value; attrKey_ = (context->getProperty(HashAttribute.getName(), value)) ? value : "Checksum"; - algoName_ = (context->getProperty(HashAlgorithm.getName(), value)) ? value : "MD5"; + algoName_ = (context->getProperty(HashAlgorithm.getName(), value)) ? value : "SHA256"; + + if (context->getProperty(HashAlgorithm.getName(), value)) { + bool bool_value; + failOnEmpty_ = utils::StringUtils::StringToBool(value, bool_value) && bool_value; // Only true in case of valid true string + } else { + failOnEmpty_ = false; + } std::transform(algoName_.begin(), algoName_.end(), algoName_.begin(), ::toupper); @@ -70,6 +80,10 @@ void HashContent::onTrigger(core::ProcessContext *, core::ProcessSession *sessio return; } + if (failOnEmpty_ && flowFile->getSize() == 0) { + session->transfer(flowFile, Failure); + } + ReadCallback cb(flowFile, *this); session->read(flowFile, &cb); session->transfer(flowFile, Success);
