This is an automated email from the ASF dual-hosted git repository.

szaszm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit 18380fc7d3bd8328e58d7e4553cc944f4ae5b248
Author: Martin Zink <[email protected]>
AuthorDate: Thu Feb 12 17:12:58 2026 +0100

    MINIFICPP-2707 Catch exceptions during C2 Start/Stop commands
    
    Closes #2093
    
    Signed-off-by: Marton Szasz <[email protected]>
---
 libminifi/src/c2/C2Agent.cpp | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index 7f5dc679a..239c86ea7 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -890,21 +890,27 @@ void C2Agent::handle_start_stop(const C2ContentResponse& 
resp) {
     });
   };
 
-  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));
   }
 }

Reply via email to