You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Chris Sampson (Jira)" <ji...@apache.org> on 2022/10/24 19:32:00 UTC

[jira] [Comment Edited] (NIFI-10303) GetElasticsearch processor invokes elasticsearch GET api without an identifier when flow file is null

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

Chris Sampson edited comment on NIFI-10303 at 10/24/22 7:31 PM:
----------------------------------------------------------------

I don't think the {{input == null}} shotcut is appropriate here as it's legitimate that no input FlowFile may be preset for {{GetElasticsearch}}.

However, you're right that it shouldn't try to execute a {{GET}} to Elasticsearch if no {{_id}} (and/or {{index}} or {{type}} where used) is present once any Expression Language has been evaluated for the processor's run {{onTrigger}}. Maybe the most appropriate thing to do would be to:
* route the input FlowFile to {{failure}} (if there was a non-null {{input}}), so that it can be handled appropriately by the Flow and the Flow maintainers can identify why no {{_id}} was present for the call
* log an error and {{yield}} the processor if there was no {{input}} FlowFile at all, e.g. the processor is scheduled to run automatically on a Cron Schedule (or whatever) with an {{_id}} that might be a Parameter or Variable Registry entry (or just a blank string) - this should generate Bulletins for the Flow maintainers to spot and fix as it's a Flow configuration issue at that point


was (Author: chris s):
I don't think the {{input == null}} shotcut is appropriate here as it's legitimate that no input FlowFile may be preset for {{GetElasticsearch}}.

However, you're right that it shouldn't try to execute a {{GET}} to Elasticsearch if no {{_id}} (and/or {{index}} or {{type}} where used) is present once any Expression Language has been evaluated for the processor's run {{onTrigger}}. Maybe the most appropriate thing to do would be to:
* route the input FlowFile to {{failure}} (if there was a non-null {{input}}), so that it can be handled appropriately by the Flow and the Flow maintainers can identify why no {{_id}} was present for the call
* log and error and {{yield}} the processor if there was no {{input}} FlowFile at all, e.g. the processor is scheduled to run automatically on a Cron Schedule (or whatever) with an {{_id}} that might be a Parameter or Variable Registry entry (or just a blank string) - this should generate Bulletins for the Flow maintainers to spot and fix as it's a Flow configuration issue at that point

> GetElasticsearch processor invokes elasticsearch GET api without an identifier when flow file is null
> -----------------------------------------------------------------------------------------------------
>
>                 Key: NIFI-10303
>                 URL: https://issues.apache.org/jira/browse/NIFI-10303
>             Project: Apache NiFi
>          Issue Type: Bug
>    Affects Versions: 1.16.3
>            Reporter: Vijaya Gorla
>            Priority: Major
>              Labels: elasticsearch
>
> When GetElasticsearch processor has an incoming connection, and the document id is an expression, this results in expression evaluating to null when the processor runs without a flow file. This in turn results in elasticsearch GET api being invoked without an ID and elastic throwing an error.
> Also noticed that other processors handle this scenario by short-circuiting at the beginning of onTrigger method
> {code:java}
>         FlowFile input = null;
>         if (context.hasIncomingConnection()) {
>             input = session.get();
>             // If we have no FlowFile, and all incoming connections are self-loops then we can continue on.
>             // However, if we have no FlowFile and we have connections coming from other Processors, then
>             // we know that we should run only if we have a FlowFile.
>             if (input == null && context.hasNonLoopConnection()) {
>                 return;
>             }
>         }
> {code}
> However GetElasticsearch  does not.



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