Vincenzo Lombardo created NIFI-16457:
----------------------------------------

             Summary: Add C2 CLEAR CONNECTION operation to MiNiFi
                 Key: NIFI-16457
                 URL: https://issues.apache.org/jira/browse/NIFI-16457
             Project: Apache NiFi
          Issue Type: New Feature
          Components: MiNiFi
            Reporter: Vincenzo Lombardo


h3. Problem

The C2 protocol defines {{OperationType.CLEAR}} with {{OperandType.CONNECTION}} 
as its only supported operand ({{c2-protocol-api}}), but MiNiFi Java does not 
register any {{C2OperationHandler}} for it. As a result:

* a C2 server has no way to empty a connection queue on an agent (the 
equivalent of "Empty Queue" on the NiFi canvas), for example to recover an 
agent blocked by back pressure or by FlowFiles that cannot be processed
* an operation CLEAR / CONNECTION sent to an agent is never acknowledged

The only current workaround is pushing a new flow configuration or accessing 
the host directly.

h3. Proposed change

Implement the operation with the same structure used for processor START/STOP - 
 (NIFI-15017):

* {{ConnectionQueueStrategy}} interface and {{ClearConnectionOperationHandler}} 
in {{c2-client-service}}; the handler reads the {{connectionId}} argument and 
returns NOT_APPLIED when it is missing
* {{DefaultConnectionQueueStrategy}} in {{minifi-framework-core}}: looks up the 
connection through {{FlowManager}} and calls 
{{FlowFileQueue.dropFlowFiles(...)}}, the same mechanism 
{{DefaultUpdateConfigurationStrategy}} already uses to empty queues removed by 
a flow update
* the drop request is asynchronous, so the strategy waits for its completion up 
to a timeout (30 seconds):
** FULLY_APPLIED when the drop request completes
** PARTIALLY_APPLIED when it is still running after the timeout
** NOT_APPLIED when the connection does not exist or the drop request fails
* register the handler in {{C2NifiClientService}}, so CLEAR / CONNECTION is 
advertised in the agent's supported operations

Example operation:

{code:json}
{
  "identifier": "op-1",
  "operation": "CLEAR",
  "operand": "CONNECTION",
  "args": { "connectionId": "<connection instance identifier>" }
}
{code}



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

Reply via email to