You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Matt Burgess (Jira)" <ji...@apache.org> on 2023/06/06 19:16:00 UTC

[jira] [Created] (NIFI-11655) GenerateRecord doesn't generate floats and doubles correctly when a schema is supplied

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)