This is an automated email from the ASF dual-hosted git repository. lordgamez pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit d1c0a99675ddb825d81b0ccce88e1dd4aedb8f3c Author: Adam Debreceni <[email protected]> AuthorDate: Tue Nov 15 09:23:20 2022 +0100 MINIFICPP-1984 - Restart old flow on failed flow update Signed-off-by: Gabor Gyimesi <[email protected]> This closes #1452 --- .../standard-processors/tests/unit/ProcessGroupTestUtils.h | 2 +- .../tests/unit/YamlConfigurationTests.cpp | 10 +++++----- libminifi/src/FlowController.cpp | 14 ++++++++------ libminifi/src/core/yaml/YamlConfiguration.cpp | 2 ++ 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h b/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h index 0ed125426..58a0dacff 100644 --- a/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h +++ b/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h @@ -68,7 +68,7 @@ struct Proc { return {{ "- id: " + id, " name: " + name, - " class: LogAttribute" + " class: LogOnDestructionProcessor" }}; } }; diff --git a/extensions/standard-processors/tests/unit/YamlConfigurationTests.cpp b/extensions/standard-processors/tests/unit/YamlConfigurationTests.cpp index 30bdd9b38..f4fd27f29 100644 --- a/extensions/standard-processors/tests/unit/YamlConfigurationTests.cpp +++ b/extensions/standard-processors/tests/unit/YamlConfigurationTests.cpp @@ -516,8 +516,8 @@ TEST_CASE("Test Dynamic Unsupported", "[YamlConfigurationDynamicUnsupported]") { Flow Controller: name: Simple Processors: -- name: PutFile - class: PutFile +- name: GenerateFlowFile + class: GenerateFlowFile Properties: Dynamic Property: Bad )"; @@ -525,10 +525,10 @@ Processors: std::unique_ptr<core::ProcessGroup> rootFlowConfig = yamlConfig.getYamlRoot(configYamlStream); REQUIRE(rootFlowConfig); - REQUIRE(rootFlowConfig->findProcessorByName("PutFile")); - const utils::Identifier uuid = rootFlowConfig->findProcessorByName("PutFile")->getUUID(); + REQUIRE(rootFlowConfig->findProcessorByName("GenerateFlowFile")); + const utils::Identifier uuid = rootFlowConfig->findProcessorByName("GenerateFlowFile")->getUUID(); REQUIRE(uuid); - REQUIRE(!rootFlowConfig->findProcessorByName("PutFile")->getUUIDStr().empty()); + REQUIRE(!rootFlowConfig->findProcessorByName("GenerateFlowFile")->getUUIDStr().empty()); REQUIRE(LogTestController::getInstance().contains("[warning] Unable to set the dynamic property " "Dynamic Property with value Bad")); diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp index 8d0264a57..a6ca3a3dc 100644 --- a/libminifi/src/FlowController.cpp +++ b/libminifi/src/FlowController.cpp @@ -142,10 +142,16 @@ bool FlowController::applyConfiguration(const std::string &source, const std::st load(std::move(root_), true); flow_update_ = true; started = start() == 0; + } catch (const std::exception& ex) { + logger_->log_error("Caught exception while starting flow, type %s, what: %s", typeid(ex).name(), ex.what()); } catch (...) { - this->root_ = std::move(prevRoot); - load(std::move(this->root_), true); + logger_->log_error("Caught unknown exception while starting flow, type %s", getCurrentExceptionTypeName()); + } + if (!started) { + logger_->log_error("Failed to start new flow, restarting previous flow"); + load(std::move(prevRoot), true); flow_update_ = true; + start(); } } @@ -292,10 +298,6 @@ void FlowController::load(std::unique_ptr<core::ProcessGroup> root, bool reload) this->root_ = loadInitialFlow(); } - if (root_) { - root_->verify(); - } - logger_->log_info("Loaded root processor Group"); logger_->log_info("Initializing timers"); controller_service_provider_impl_ = flow_configuration_->getControllerServiceProvider(); diff --git a/libminifi/src/core/yaml/YamlConfiguration.cpp b/libminifi/src/core/yaml/YamlConfiguration.cpp index 9f9be9be6..e1f23f3ac 100644 --- a/libminifi/src/core/yaml/YamlConfiguration.cpp +++ b/libminifi/src/core/yaml/YamlConfiguration.cpp @@ -135,6 +135,8 @@ std::unique_ptr<core::ProcessGroup> YamlConfiguration::getYamlRoot(const YAML::N root->addControllerService(controller_service->getUUIDStr(), controller_service); } + root->verify(); + return root; }
