Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-4108

NPE in Row.productArity

    XMLWordPrintableJSON

Details

    Description

      [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:

      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

      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.

      Attachments

        Issue Links

          Activity

            People

              twalthr Timo Walther
              ms@funkpopes.org Martin Scholl
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: