Martin Scholl created FLINK-4108:
------------------------------------

             Summary: NPE in Row.productArity
                 Key: FLINK-4108
                 URL: https://issues.apache.org/jira/browse/FLINK-4108
             Project: Flink
          Issue Type: Bug
          Components: Batch Connectors and Input/Output Formats, Type 
Serialization System
    Affects Versions: 1.1.0
            Reporter: Martin Scholl


[this is my first issue request here, please apologize if something is missing]

 JDBCInputFormat of flink 1.1-SNAPSHOT fails with an NPE in Row.productArity:

{quote}
java.io.IOException: Couldn't access resultSet
        at 
org.apache.flink.api.java.io.jdbc.JDBCInputFormat.nextRecord(JDBCInputFormat.java:288)
        at 
org.apache.flink.api.java.io.jdbc.JDBCInputFormat.nextRecord(JDBCInputFormat.java:98)
        at 
org.apache.flink.runtime.operators.DataSourceTask.invoke(DataSourceTask.java:162)
        at org.apache.flink.runtime.taskmanager.Task.run(Task.java:588)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
        at org.apache.flink.api.table.Row.productArity(Row.scala:28)
        at 
org.apache.flink.api.java.io.jdbc.JDBCInputFormat.nextRecord(JDBCInputFormat.java:279)
        ... 4 more
{quote}

The code reproduce this can be found in this gist: 
https://gist.github.com/zeitgeist/b91a60460661618ca4585e082895c616

The reason for the NPE, I believe, is the way through which Flink creates Row 
instances through Kryo. As Row expects the number of fields to allocate as a 
parameter, which Kryo does not provide, the ‘fields’ member of Row ends up 
being null. As I’m neither a reflection nor a Kryo expert, I rather leave a 
true analysis to more knowledgable programmers.

Part of the aforementioned example is a not very elegant workaround though a 
custom type and a cast (function {{jdbcNoIssue}} + custom Row type {{MyRow}}) 
to serve as a further hint towards my theory.





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to