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

ASF GitHub Bot commented on NIFI-5075:
--------------------------------------

Github user ijokarumawak commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/2634#discussion_r181951840
  
    --- Diff: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/tasks/ConnectableTask.java
 ---
    @@ -103,8 +104,24 @@ private boolean isYielded() {
             return connectable.getYieldExpiration() > 
System.currentTimeMillis();
         }
     
    +    /**
    +     * Make sure processor has work to do. This means that it meets one of 
these criteria:
    +     * <ol>
    +     * <li>It is annotated with @TriggerWhenEmpty</li>
    +     * <li>It has no incoming connections</li>
    +     * <li>All incoming connections are self-loops</li>
    +     * <li>It has data in an incoming Connection
    +     *     AND It is not a Funnel without outgoing connections
    +     * </li>
    +     * </ol>
    +     * @return true if there is work to do, otherwise false
    +     */
         private boolean isWorkToDo() {
    -        return connectable.isTriggerWhenEmpty() || 
!connectable.hasIncomingConnection() || !hasNonLoopConnection || 
Connectables.flowFilesQueued(connectable);
    +        return connectable.isTriggerWhenEmpty()
    +                || !connectable.hasIncomingConnection()
    +                || !hasNonLoopConnection
    +                || (Connectables.flowFilesQueued(connectable)
    --- End diff --
    
    @markap14 Thank you for testing.
    
    I understand what went wrong. I tested with an existing flow including 
Funnel which had an incoming connection from GenerateFlowFile already. Since 
Funnels are not stopped/scheduled, the `hasNonLoopConnection` field only gets 
populated when the Funnel is added. 
    `hasNonLoopConnection` becomes `false` for a newly created Funnels, and 
stays false even incoming connections are added later. ConnectableTasks for 
other components than Funnel can be recreated when the component is 
re-scheduled, however, those components should also NOT cache 
`hasNonLoopConnection` because NiFi allows new connections to be added while a 
component is running, without requiring stop/start.
    
    I will update the PR.


> Funnels with no outgoing relationship error
> -------------------------------------------
>
>                 Key: NIFI-5075
>                 URL: https://issues.apache.org/jira/browse/NIFI-5075
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 1.6.0
>            Reporter: Peter Wicks
>            Assignee: Koji Kawamura
>            Priority: Major
>
> If a Funnel has no outgoing relationships it will throw an exception when it 
> tries to send FlowFile's to that non-existent relationship.
> Replicate by creating a GenerateFlowFile processor to a Funnel, start the 
> GenerateFlowFile processor and check your log file.
>  
> 2018-04-11 23:53:28,066 ERROR [Timer-Driven Process Thread-31] 
> o.apache.nifi.controller.StandardFunnel 
> StandardFunnel[id=b868231c-0162-1000-571c-ae3e7d15d848] 
> StandardFunnel[id=b868231c-0162-1000-571c-ae3e7d15d848] failed to process 
> session due to java.lang.RuntimeException: 
> java.lang.IllegalArgumentException: Relationship '' is not known; Processor 
> Administratively Yielded for 1 sec: java.lang.RuntimeException: 
> java.lang.IllegalArgumentException: Relationship '' is not known
> java.lang.RuntimeException: java.lang.IllegalArgumentException: Relationship 
> '' is not known
>         at 
> org.apache.nifi.controller.StandardFunnel.onTrigger(StandardFunnel.java:365)
>         at 
> org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:175)
>         at 
> org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
>         at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>         at java.lang.Thread.run(Thread.java:748)
> Caused by: java.lang.IllegalArgumentException: Relationship '' is not known
>         at 
> org.apache.nifi.controller.repository.StandardProcessSession.transfer(StandardProcessSession.java:1935)
>         at 
> org.apache.nifi.controller.StandardFunnel.onTrigger(StandardFunnel.java:379)
>         at 
> org.apache.nifi.controller.StandardFunnel.onTrigger(StandardFunnel.java:358)
>         ... 9 common frames omitted



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to