Chris Norton created NIFI-10192:
-----------------------------------

             Summary: LookupRecord attempts first lookup multiple times
                 Key: NIFI-10192
                 URL: https://issues.apache.org/jira/browse/NIFI-10192
             Project: Apache NiFi
          Issue Type: Bug
          Components: Core Framework
    Affects Versions: 1.16.3, 1.16.2, 1.16.1
            Reporter: Chris Norton


A change was implemented in 
[NIFI-9903|https://issues.apache.org/jira/browse/NIFI-9903] which results in 
*lookupService.lookup()* being called twice per record ([at least until the 
first 
match|https://github.com/apache/nifi/blob/rel/nifi-1.16.1/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/LookupRecord.java#L350]).
 For lookup services which are idempotent (CSVRecordLookupService, 
DistributedMapCacheLookupService, PropertiesFileLookupService) making lookups 
twice won’t affect the result or have undesired side effects. However, the 
RestLookupService can make arbitrary HTTP requests for the standard HTTP 
methods (GET, POST, PUT, DELETE) and there is no guarantee that these requests 
will be idempotent. POST requests in particular are not expected to be 
idempotent and may cause undesirable behaviour if invoked multiple times (as in 
our case).

As the name suggests, LookupRecord could be expected to be used only to perform 
lookups which are idempotent and do not have side effects. [Matt Burgess wrote 
an 
article|http://funnifi.blogspot.com/2018/08/database-sequence-lookup-with.html] 
where it seems the expected behaviour was that *lookupService.lookup()* would 
only be called once. The change in behaviour and being called twice would now 
cause IDs to be skipped.

It was suggested by Mark Payne in a Slack discussion that lookup results could 
be cached up until the first match, which may alleviate the issues we are 
seeing.



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

Reply via email to