Matt Burgess created NIFI-11655:
-----------------------------------

             Summary: GenerateRecord doesn't generate floats and doubles 
correctly when a schema is supplied
                 Key: NIFI-11655
                 URL: https://issues.apache.org/jira/browse/NIFI-11655
             Project: Apache NiFi
          Issue Type: Bug
          Components: Extensions
            Reporter: Matt Burgess
             Fix For: 1.latest, 2.latest


When a schema is supplied to GenerateRecord via the Schema Text property and it 
contains either float or double fields, the processor fails with an error:

2023-06-06 15:10:36,271 ERROR [Timer-Driven Process Thread-7] 
o.a.n.processors.standard.GenerateRecord 
GenerateRecord[id=9201dbe8-0188-1000-6d56-74ba1fc1e732] Processing failed
org.apache.nifi.processor.exception.ProcessException: Record generation failed
        at 
org.apache.nifi.processors.standard.GenerateRecord.onTrigger(GenerateRecord.java:274)
        at 
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
        at 
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1360)
        at 
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:243)
        at 
org.apache.nifi.controller.scheduling.AbstractTimeBasedSchedulingAgent.lambda$doScheduleOnce$0(AbstractTimeBasedSchedulingAgent.java:59)
        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.lang.ClassCastException: class 
org.apache.nifi.serialization.record.DataType cannot be cast to class 
org.apache.nifi.serialization.record.type.DecimalDataType 
(org.apache.nifi.serialization.record.DataType and 
org.apache.nifi.serialization.record.type.DecimalDataType are in unnamed module 
of loader org.apache.nifi.nar.NarClassLoader @7fd987ef)
        at 
org.apache.nifi.processors.standard.GenerateRecord.generateValueFromRecordField(GenerateRecord.java:316)
        at 
org.apache.nifi.processors.standard.GenerateRecord.lambda$onTrigger$0(GenerateRecord.java:238)
        at 
org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:3138)
        at 
org.apache.nifi.processors.standard.GenerateRecord.onTrigger(GenerateRecord.java:210)


This is because GenerateRecord handles floats, doubles, and decimals the same 
way, by trying to treat them as DecimalDataTypes when floats and doubles are 
not compatible (they have their own distinct data types). The cases should be 
handled separately and unit tests added/augmented to verify.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to