You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Anders Synstad (Jira)" <ji...@apache.org> on 2022/01/21 08:30:00 UTC

[jira] [Updated] (NIFI-9613) QueryRecord fails with java.util.NoSuchElementException

     [ https://issues.apache.org/jira/browse/NIFI-9613?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Anders Synstad updated NIFI-9613:
---------------------------------
    Description: 
I am getting java.util.NoSuchElementException in QueryRecord under certain conditions using JsonTreeReader + JsonRecordSetWriter + a simple json event.

Generating a simple flowfile with the following json using GenerateFlowFile:
    {{

{"epoch":1642669279,"thing":[1234],"foo":"bar"}

}}

Using QueryRecord with the following dynamic properties work:
    {{SELECT * FROM FLOWFILE WHERE foo = 'bar'}}
    {{SELECT * FROM FLOWFILE WHERE foo LIKE 'ba%'}}

However, using the following generates an error:
    {{SELECT * FROM FLOWFILE WHERE foo LIKE 'fo%'}}

It appears it will fail if the WHERE clause does not find any matches in the
flowfile.Removing {{"thing":[12345]}} from the json in the flowfile causes all 3 dynamic
properties in QueryRecord to work.The error generated is:
{code}
2022-01-20 10:19:25,403 ERROR [Timer-Driven Process Thread-24] o.a.nifi.processors.standard.QueryRecord QueryRecord[id=9a2539a7-14df-159f-b3f4-83787721a05f] Unable to query StandardFlowFileRecord[uuid=db24c0b5-e874-4a55-82a7-cbdf69b0cf5a,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1642670361821-5989894, container=default, section=518], offset=517544, length=47],offset=0,name=db24c0b5-e874-4a55-82a7-cbdf69b0cf5a,size=47] due to org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
↳ causes: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
↳ causes: org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
at org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:343)
at org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:2909)
at org.apache.nifi.processors.standard.QueryRecord.onTrigger(QueryRecord.java:332)
at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1273)
at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:214)
at org.apache.nifi.controller.scheduling.AbstractTimeBasedSchedulingAgent.lambda$doScheduleOnce$0(AbstractTimeBasedSchedulingAgent.java:63)
at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
at org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:65)
at org.apache.calcite.avatica.util.AbstractCursor$AccessorImpl.getObject(AbstractCursor.java:355)
at org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getObject(AbstractCursor.java:1286)
at org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getArray(AbstractCursor.java:1354)
at org.apache.calcite.avatica.AvaticaResultSet.getArray(AvaticaResultSet.java:729)
at org.apache.nifi.serialization.record.ResultSetRecordSet.getArrayDataType(ResultSetRecordSet.java:295)
at org.apache.nifi.serialization.record.ResultSetRecordSet.getDataType(ResultSetRecordSet.java:207)
at org.apache.nifi.serialization.record.ResultSetRecordSet.createSchema(ResultSetRecordSet.java:184)
at org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:86)
at org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:71)
at org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:339)
... 13 common frames omitted
Caused by: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
at org.apache.calcite.avatica.util.IteratorCursor.current(IteratorCursor.java:71)
at org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:55)
... 23 common frames omitted
{code}

See attached template for a test configuration.

  was:
I am getting java.util.NoSuchElementException in QueryRecord under certain conditions using JsonTreeReader + JsonRecordSetWriter + a simple json event.

Generating a simple flowfile with the following json using GenerateFlowFile:
    {{{"epoch":1642669279,"thing":[1234],"foo":"bar"}}}

Using QueryRecord with the following dynamic properties work:
    {{SELECT * FROM FLOWFILE WHERE foo = 'bar'}}
    {{SELECT * FROM FLOWFILE WHERE foo LIKE 'ba%'}}

However, using the following generates an error:
    {{SELECT * FROM FLOWFILE WHERE foo LIKE 'fo%'}}

It appears it will fail if the WHERE clause does not find any matches in the
flowfile.Removing {{"thing":[12345]}} from the json in the flowfile causes all 3 dynamic
properties in QueryRecord to work.The error generated is:
2022-01-20 10:19:25,403 ERROR [Timer-Driven Process Thread-24] o.a.nifi.processors.standard.QueryRecord QueryRecord[id=9a2539a7-14df-159f-b3f4-83787721a05f] Unable to query StandardFlowFileRecord[uuid=db24c0b5-e874-4a55-82a7-cbdf69b0cf5a,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1642670361821-5989894, container=default, section=518], offset=517544, length=47],offset=0,name=db24c0b5-e874-4a55-82a7-cbdf69b0cf5a,size=47] due to org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
↳ causes: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
↳ causes: org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
        at org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:343)
        at org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:2909)
        at org.apache.nifi.processors.standard.QueryRecord.onTrigger(QueryRecord.java:332)
        at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
        at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1273)
        at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:214)
        at org.apache.nifi.controller.scheduling.AbstractTimeBasedSchedulingAgent.lambda$doScheduleOnce$0(AbstractTimeBasedSchedulingAgent.java:63)
        at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
        at org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:65)
        at org.apache.calcite.avatica.util.AbstractCursor$AccessorImpl.getObject(AbstractCursor.java:355)
        at org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getObject(AbstractCursor.java:1286)
        at org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getArray(AbstractCursor.java:1354)
        at org.apache.calcite.avatica.AvaticaResultSet.getArray(AvaticaResultSet.java:729)
        at org.apache.nifi.serialization.record.ResultSetRecordSet.getArrayDataType(ResultSetRecordSet.java:295)
        at org.apache.nifi.serialization.record.ResultSetRecordSet.getDataType(ResultSetRecordSet.java:207)
        at org.apache.nifi.serialization.record.ResultSetRecordSet.createSchema(ResultSetRecordSet.java:184)
        at org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:86)
        at org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:71)
        at org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:339)
        ... 13 common frames omitted
Caused by: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
        at org.apache.calcite.avatica.util.IteratorCursor.current(IteratorCursor.java:71)
        at org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:55)
        ... 23 common frames omitted

See attached template for a test configuration.


> QueryRecord fails with java.util.NoSuchElementException
> -------------------------------------------------------
>
>                 Key: NIFI-9613
>                 URL: https://issues.apache.org/jira/browse/NIFI-9613
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 1.15.2
>         Environment: Ubuntu 18.04 with openjdk-11-jre-headless 11.0.13+8-0ubuntu1~18.04
>            Reporter: Anders Synstad
>            Priority: Minor
>         Attachments: JSON-test.xml
>
>
> I am getting java.util.NoSuchElementException in QueryRecord under certain conditions using JsonTreeReader + JsonRecordSetWriter + a simple json event.
> Generating a simple flowfile with the following json using GenerateFlowFile:
>     {{
> {"epoch":1642669279,"thing":[1234],"foo":"bar"}
> }}
> Using QueryRecord with the following dynamic properties work:
>     {{SELECT * FROM FLOWFILE WHERE foo = 'bar'}}
>     {{SELECT * FROM FLOWFILE WHERE foo LIKE 'ba%'}}
> However, using the following generates an error:
>     {{SELECT * FROM FLOWFILE WHERE foo LIKE 'fo%'}}
> It appears it will fail if the WHERE clause does not find any matches in the
> flowfile.Removing {{"thing":[12345]}} from the json in the flowfile causes all 3 dynamic
> properties in QueryRecord to work.The error generated is:
> {code}
> 2022-01-20 10:19:25,403 ERROR [Timer-Driven Process Thread-24] o.a.nifi.processors.standard.QueryRecord QueryRecord[id=9a2539a7-14df-159f-b3f4-83787721a05f] Unable to query StandardFlowFileRecord[uuid=db24c0b5-e874-4a55-82a7-cbdf69b0cf5a,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1642670361821-5989894, container=default, section=518], offset=517544, length=47],offset=0,name=db24c0b5-e874-4a55-82a7-cbdf69b0cf5a,size=47] due to org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
> ↳ causes: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
> ↳ causes: org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
> org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
> at org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:343)
> at org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:2909)
> at org.apache.nifi.processors.standard.QueryRecord.onTrigger(QueryRecord.java:332)
> at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
> at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1273)
> at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:214)
> at org.apache.nifi.controller.scheduling.AbstractTimeBasedSchedulingAgent.lambda$doScheduleOnce$0(AbstractTimeBasedSchedulingAgent.java:63)
> at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
> at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
> at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> at java.base/java.lang.Thread.run(Thread.java:829)
> Caused by: java.sql.SQLException: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
> at org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:65)
> at org.apache.calcite.avatica.util.AbstractCursor$AccessorImpl.getObject(AbstractCursor.java:355)
> at org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getObject(AbstractCursor.java:1286)
> at org.apache.calcite.avatica.util.AbstractCursor$ArrayAccessor.getArray(AbstractCursor.java:1354)
> at org.apache.calcite.avatica.AvaticaResultSet.getArray(AvaticaResultSet.java:729)
> at org.apache.nifi.serialization.record.ResultSetRecordSet.getArrayDataType(ResultSetRecordSet.java:295)
> at org.apache.nifi.serialization.record.ResultSetRecordSet.getDataType(ResultSetRecordSet.java:207)
> at org.apache.nifi.serialization.record.ResultSetRecordSet.createSchema(ResultSetRecordSet.java:184)
> at org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:86)
> at org.apache.nifi.serialization.record.ResultSetRecordSet.<init>(ResultSetRecordSet.java:71)
> at org.apache.nifi.processors.standard.QueryRecord$1.process(QueryRecord.java:339)
> ... 13 common frames omitted
> Caused by: java.util.NoSuchElementException: Expecting cursor position to be Position.OK, actual is Position.AFTER_END
> at org.apache.calcite.avatica.util.IteratorCursor.current(IteratorCursor.java:71)
> at org.apache.calcite.avatica.util.PositionedCursor$ArrayGetter.getObject(PositionedCursor.java:55)
> ... 23 common frames omitted
> {code}
> See attached template for a test configuration.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)