MINIFICPP-2707 Catch exceptions during C2 Start/Stop commands Closes #2093 Signed-off-by: Marton Szasz <szaszm@apache.org>
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp index 7f5dc67..239c86e 100644 --- a/libminifi/src/c2/C2Agent.cpp +++ b/libminifi/src/c2/C2Agent.cpp
@@ -890,21 +890,27 @@ }); }; - if (lowered_response_name == "flow") { - executeStartStopOnComponent("FlowController"); - } else if (lowered_response_name == "processor") { - auto processor_id = resp.getStringArgument("processorId"); - if (processor_id) { - executeStartStopOnComponent(processor_id.value()); + auto update_state = state::UpdateState::FULLY_APPLIED; + try { + if (lowered_response_name == "flow") { + executeStartStopOnComponent("FlowController"); + } else if (lowered_response_name == "processor") { + if (const auto processor_id = resp.getStringArgument("processorId")) { + executeStartStopOnComponent(processor_id.value()); + } else { + update_state = state::UpdateState::NO_OPERATION; + logger_->log_warn("Processor start/stop request missing 'processorId' argument"); + } } else { - logger_->log_warn("Processor start/stop request missing 'processorId' argument"); + executeStartStopOnComponent(resp.name); } - } else { - executeStartStopOnComponent(resp.name); + } catch (const std::exception& err) { + update_state = state::UpdateState::NOT_APPLIED; + logger_->log_warn("Failed to execute StartStopOnComponent command due to \"{}\"", err.what()); } if (!resp.ident.empty()) { - C2Payload response(Operation::acknowledge, resp.ident, true); + C2Payload response(Operation::acknowledge, update_state, resp.ident, true); enqueue_c2_response(std::move(response)); } }