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)