Geoff, The difference between penalization and yielding is whether the failure is data-dependent or not.
So, an easy way to think about this is to consider a scenario where you have a simple flow: GetFTP -> PutFTP. Something else is picking up data from the FTP server that you’re putting to. You know that sometimes the data will already exist with the same name, but you don’t want to overwrite it because it’s likely to actually be different data with a conflicting filename. So you want to wait a while and try to push that file again. In the meantime, you want to continue pushing other files to the FTP server. In this case, the processor would penalize that FlowFile so that it can continue working on other data. On the other hand, if PutFTP were to get a connection failure, it’s not even able to connect to that FTP server, then it doesn’t make sense to penalize that FlowFile and move onto the next one and try to push it. It can’t connect, so it can’t make progress regardless of what data it has. In this case, the processor should yield. Note, however, that it is up to the processor developer to tell the processor to yield or to penalize the FlowFile. It’s not up to the creator of the data flow. Does that help? Thanks -Mark On Apr 22, 2021, at 2:08 PM, Greene (US), Geoffrey N <[email protected]<mailto:[email protected]>> wrote: We have a rest endpoint that is “unreliable”. It works sometimes. When it doesn’t work, the solution seems to be to sleep for awhile, then try again So I put in a retry processor: http processor <- Retry | \ ^ Success Failure -----| So far, so good, that loop works. But how do I handle the slow down? Does the penalty / yield go on the retry? Or on the http? Whats the difference? How do I know if I should YIELD or impose a penalty? I’m not sure I understand the differences here Thanks Geoff
