You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Kevin Doran (Jira)" <ji...@apache.org> on 2026/04/07 01:11:00 UTC

[jira] [Created] (NIFI-15801) StandardVersionedComponentSynchronizer.synchronizeProcessors fails when processors are running

Kevin Doran created NIFI-15801:
----------------------------------

             Summary: StandardVersionedComponentSynchronizer.synchronizeProcessors fails when processors are running
                 Key: NIFI-15801
                 URL: https://issues.apache.org/jira/browse/NIFI-15801
             Project: Apache NiFi
          Issue Type: Task
          Components: Core Framework
            Reporter: Kevin Doran
            Assignee: Kevin Doran


`StandardVersionedComponentSynchronizer.synchronizeProcessors()` calls `updateProcessor()` without first stopping the processor. `updateProcessor()` begins with `processor.setAnnotationData(...)`, and `StandardProcessorNode.setAnnotationData()` throws `IllegalStateException` if the processor is running.

This was never triggered before the introduction of Connectors, because the NiFi REST API `FlowUpdateResource.updateFlow()` explicitly stops all affected processors and disables affected controller services *before* calling `StandardProcessGroup.updateFlow()` -> `synchronizeFlow()` -> `synchronize()` -> `synchronizeProcessors()`. 

The Connector framework's `applyUpdate` path, introduced in NIFI-15258, calls `StandardProcessGroup.updateFlow()` directly without stopping processors first, exposing this gap.

The single-processor synchronization path (`synchronize(ProcessorNode, VersionedProcessor, ...)`) already correctly calls `stopOrTerminate()` before `updateProcessor()`. The group-level `synchronizeProcessors()` was relying on the caller to have stopped processors, which was a valid assumption for the REST path.

**Steps to Reproduce:**
1. Start a Connector
2. While the connector is running, change a configuration property that affects an existing processor in the flow.
3. Call `applyUpdate()`.

**Expected:** The flow is updated successfully; affected processors are stopped, updated, and restarted.

**Actual:** `FlowUpdateException` wrapping `IllegalStateException: Cannot set AnnotationData on CaptureChangePostgreSQL[...] while processor is running`.

**Fix:** Stop running processors in `synchronizeProcessors()` before calling `updateProcessor()`, matching the pattern used in `synchronize(ProcessorNode, ...)` and `synchronizeProcessGroupSettings()`. Track which processors were stopped and restart them in a `finally` block to ensure they are restarted even if the update fails.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)