[ 
https://issues.apache.org/jira/browse/NIFI-16337?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18115730#comment-18115730
 ] 

ASF subversion and git services commented on NIFI-16337:
--------------------------------------------------------

Commit 751efb02f0360f89266d625cbda8e7c3a00465ee in nifi's branch 
refs/heads/main from Matt Gilman
[ https://gitbox.apache.org/repos/asf?p=nifi.git;h=751efb02f03 ]

NIFI-16337: Add support for stopping Process Group sources (#11678)

* NIFI-16337: Add support for stopping Process Group sources

- add the Stop sources REST endpoint and cluster response handling
- expose resolved execution engines on Process Group payloads
- add Flow Designer actions for stopping source components
- reject STATELESS targets and skip nested STATELESS groups
- add backend and frontend test coverage

* NIFI-16337: Addressing review feedback.

> Stop source components in a Process Group without stopping the rest of the 
> group
> --------------------------------------------------------------------------------
>
>                 Key: NIFI-16337
>                 URL: https://issues.apache.org/jira/browse/NIFI-16337
>             Project: Apache NiFi
>          Issue Type: Improvement
>          Components: Core Framework, Core UI
>            Reporter: Matt Gilman
>            Assignee: Matt Gilman
>            Priority: Major
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Users often want to stop new data from entering a Process Group while letting 
> in-flight FlowFiles finish and still cross Process Group boundaries. Today, 
> Start/Stop applies to the whole group (or the entire Remote Process Group), 
> which also stops local ports and RPG egress.
> Add a Process Group action that stops only sources of new data in that group 
> and its descendants.
> h3. What is stopped
>  * Source processors: no incoming connections, or only self-loops 
> (!Connectables.hasNonLoopConnection)
>  * Remote Process Group output ports (REMOTE_OUTPUT_PORT): stop transmitting 
> that port, not the whole RPG
>  * Public input ports (PublicPort + INPUT_PORT) when they have no non-loop 
> incoming connection (typical Site-to-Site ingress on the root group)
> h3. What is left running
>  * Ordinary local input/output ports (LocalPort)
>  * Public output ports
>  * RPG remote input ports (REMOTE_INPUT_PORT)
>  * The Remote Process Group as a whole
>  * Funnels and non-source processors
> This is intentional: stopping a child's local input ports would block the 
> parent from feeding it, and stopping output ports or RPG egress would trap 
> data that should leave.
> h3. API
> PUT /nifi-api/flow/process-groups/\{id}/sources
> Request body reuses ScheduleComponentsEntity:
> {code:json}
> {
>   "id": "<process-group-id>",
>   "state": "STOPPED",
>   "disconnectedNodeAcknowledged": false
> }
> {code}
> components is omitted by the client. The coordinator identifies sources, 
> fail-closed authorizes operate on each one, fills components, then 
> replicates. Replicas do not rediscover. If no sources are found, the response 
> is 200 with an empty components map. If the user cannot operate any 
> identified source, the request fails with 403 and nothing is stopped.
> The identified IDs are stopped through the existing scheduleComponents(..., 
> STOPPED, ...) path (PROCESSOR → stopProcessor, INPUT_PORT → stopInputPort, 
> REMOTE_OUTPUT_PORT → stopTransmitting). Do not call the bulk RPG run-status 
> endpoint, which would stop all transmission including egress.
> Identification lives on 
> NiFiServiceFacade.findSourceComponentIds(ProcessGroup). A cluster 
> StopSourcesEndpointMerger is registered for the new URI.
> h3. UI
> Flow Designer context menu: Stop sources. Available on canvas background 
> (current group) or a selected Process Group. No confirmation dialog (same as 
> Start/Stop).
> h3. How to test
>  # Create a Process Group with a source processor, a downstream processor, a 
> local input/output port pair, and (if possible) an RPG with both input and 
> output ports and a public input port.
>  # Start the group. Right-click the canvas or the Process Group and choose 
> Stop sources.
>  # Verify the source processor, RPG output port, and public input port stop; 
> local ports, RPG input ports, and downstream processors remain running.
>  # Confirm queued data can still leave the group through local output ports.
>  # As a user without operate permission on one identified source, confirm the 
> request fails with 403 and no component is stopped.
>  # In a cluster, confirm the coordinator identifies sources once and replicas 
> apply the filled components list.



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

Reply via email to