MINIFICPP-1984 - Restart old flow on failed flow update
Signed-off-by: Gabor Gyimesi <gamezbird@gmail.com>
This closes #1452
diff --git a/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h b/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h
index 0ed1254..58a0dac 100644
--- a/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h
+++ b/extensions/standard-processors/tests/unit/ProcessGroupTestUtils.h
@@ -68,7 +68,7 @@
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 30bdd9b..f4fd27f 100644
--- a/extensions/standard-processors/tests/unit/YamlConfigurationTests.cpp
+++ b/extensions/standard-processors/tests/unit/YamlConfigurationTests.cpp
@@ -516,8 +516,8 @@
Flow Controller:
name: Simple
Processors:
-- name: PutFile
- class: PutFile
+- name: GenerateFlowFile
+ class: GenerateFlowFile
Properties:
Dynamic Property: Bad
)";
@@ -525,10 +525,10 @@
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 8d0264a..a6ca3a3 100644
--- a/libminifi/src/FlowController.cpp
+++ b/libminifi/src/FlowController.cpp
@@ -142,10 +142,16 @@
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 @@
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 9f9be9b..e1f23f3 100644
--- a/libminifi/src/core/yaml/YamlConfiguration.cpp
+++ b/libminifi/src/core/yaml/YamlConfiguration.cpp
@@ -135,6 +135,8 @@
root->addControllerService(controller_service->getUUIDStr(), controller_service);
}
+ root->verify();
+
return root;
}