Uploaded image for project: 'Apache NiFi'
  1. Apache NiFi
  2. NIFI-5612

org.apache.avro.UnresolvedUnionException: Not in union ["null","int"]: 0

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.5.0, 1.6.0, 1.7.1
    • Fix Version/s: 1.8.0
    • Component/s: Extensions
    • Labels:
    • Environment:
      Microsoft Windows, MySQL Enterprise 5.0.80

      Description

      I'm seeing this when I execute SELECT * FROM <tablename> on a few tables but not on dozens of others in the same database.

      2018-09-13 01:11:31,434 WARN [Timer-Driven Process Thread-8] o.a.n.controller.tasks.ConnectableTask Administratively Yielding ExecuteSQL[id=cf5c0996-eddf-3e05-25a3-c407c5edf990] due to uncaught Exception: org.apache.avro.file.DataFileWriter$AppendWriteException: org.apache.avro.UnresolvedUnionException: Not in union ["null","int"]: 0
      org.apache.avro.file.DataFileWriter$AppendWriteException: org.apache.avro.UnresolvedUnionException: Not in union ["null","int"]: 0
      	at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:308)
      	at org.apache.nifi.processors.standard.util.JdbcCommon.convertToAvroStream(JdbcCommon.java:462)
      	at org.apache.nifi.processors.standard.ExecuteSQL.lambda$onTrigger$1(ExecuteSQL.java:252)
      	at org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:2625)
      	at org.apache.nifi.processors.standard.ExecuteSQL.onTrigger(ExecuteSQL.java:242)
      	at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
      	at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1165)
      	at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:203)
      	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:745)
      Caused by: org.apache.avro.UnresolvedUnionException: Not in union ["null","int"]: 0
      	at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:709)
      	at org.apache.avro.generic.GenericDatumWriter.resolveUnion(GenericDatumWriter.java:192)
      	at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:110)
      	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:73)
      	at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:153)
      	at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:143)
      	at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:105)
      	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:73)
      	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:60)
      	at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:302)
      	... 15 common frames omitted
      

      I don't know if I can share the database schema – still working with my team on that – but looking at it, I think it has something to do with the signedness of int(1) or tinyint(1) because those two are the only numerical types common to all of the table.

       

      Edit 2018-09-24, so that my update doesn't get buried:

      I am able to reproduce the exception using

      • Vagrant 2.1.1
      • Virtualbox 5.2.18 r124319
      • Ubuntu 18.04
      • MySQL 5.0.81 (as close as I can get to the 5.0.80 Enterprise Edition in use on the system where I observed this failure first)
      • MySQL Connector/J 5.1.46
      • NiFi 1.7.1

      With this table definition and data:

      create table fails ( 
        fails int(1) unsigned NOT NULL default '0' 
      ) ENGINE=InnoDB AUTO_INCREMENT=16527 DEFAULT CHARSET=latin1;
      
      insert into fails values ();
      

      and an ExecuteSQL processor set up to access that table.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                colindean Colin Dean
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: