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

endzeit commented on NIFI-11811:
--------------------------------

By default the back pressure mechanisms of processors only affect the 
scheduling. That is, if any of the downstream queues is full (according to its 
configuration), the processor is no longer scheduled until the queue is not 
full anymore.

However, once the processor is scheduled, it might put as many FlowFiles in the 
downstream queues as it desires, even if the queue is deemed full based on its 
back pressure configuration. 

Let's say the downstream queue is limited to 10 FlowFiles and the following 
processor is not started, thus not removing any FlowFiles from the queue. The 
ListS3 processor is scheduled (as the queue is not full) and now searches the 
defined S3 bucket. It might find 50 entries and will create a FlowFile for each 
of them, even though the queue is set to only take up to 10. Afterwards the 
queue is full however and the ListS3 processor will not be scheduled.

This is the default behaviour for all processors aligned with the core NiFi 
framework. Additional work is required in the processor implementation to 
actively watch for the downstream queues back pressure status. Almost no 
processor does this, as far as I know. 

It seems like your listing just contains a lot of objects. Unless the processor 
is scheduled even though the queue is full, this sounds like a feature request 
rather than a bug to me, e.g. introducing a "Max Batch Size" after which the 
listing should be stopped. The existing "Listing Batch Size" only controls how 
many FlowFoles will be commited in a single batch, but does not limit the 
overall amount of FlowFiles to be emitted during a single scheduled run of the 
processor.

> ListS3 Processor doesn't back pressure
> --------------------------------------
>
>                 Key: NIFI-11811
>                 URL: https://issues.apache.org/jira/browse/NIFI-11811
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 1.16.2
>            Reporter: Daniel Hermon
>            Priority: Critical
>
> Dear NiFi team,
> I have built a data flow for syncing two S3 buckets on two separate sites.
> I am using NiFi because the throughput is much higher than any other tool 
> (aws-s3-cli and RClone)
> The flow is pretty straightforward:
> ListS3 on-site A > FetchS3 from site A  -> FetchS3 from site B (check if file 
> already exists)> (on failure) PutS3Object in site B
> Sometimes site B throws 504 timeout exceptions which starts the back pressure 
> mechanism.
> Everything back pressures perfectly fine but not the ListS3 processor output 
> queue, I have to manually terminate it in order to stop listing new files, 
> even trying to stop it fails. 
> I have tried limiting the size (even though it is 0 bytes flow files since 
> the flow file only contains attributes) and also limiting the number of 
> objects.
>  
> p.s the bucket has 5 Billion objects



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

Reply via email to