[ https://issues.apache.org/jira/browse/NIFI-5075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16439451#comment-16439451 ]
ASF GitHub Bot commented on NIFI-5075: -------------------------------------- Github user markobean commented on a diff in the pull request: https://github.com/apache/nifi/pull/2634#discussion_r181735366 --- 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() --- End diff -- This logic seems inverted unnecessarily. Why is 'connectable.hasIncomingConnection()' negated? This leads to the method returning true when there are no incoming connections. Similarly, is it the intent to indicate no work to do if the only incoming connections are looped connections? > 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)