Details
-
Bug
-
Resolution: Unresolved
-
Major
-
1.7.1.Final
-
None
-
False
-
False
-
Description
Hi,
In case of an Oracle database with a table with a BINARY_FLOAT or a BINARY_DOUBLE column that contains NaN, +Inf or -Inf, the following errors occur with Logminer:
(NaN, BINARY_FLOAT)
2021-12-08 10:40:27,150 ERROR Oracle|transporter-repl1-iusxhg--1|streaming Failed to properly convert data value for 'ORCLPDB1.DEBEZIUM.TEST_TABLE.COL2' of type BINARY_FLOAT for row [7, Nan, Nan]: [io.debezium.relational.TableSchemaBuilder] java.lang.NumberFormatException: For input string: "Nan" at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122) at java.base/java.lang.Float.parseFloat(Float.java:455) at io.debezium.connector.oracle.OracleValueConverters.convertFloat(OracleValueConverters.java:364) at io.debezium.connector.oracle.OracleValueConverters.lambda$converter$2(OracleValueConverters.java:199) at io.debezium.relational.TableSchemaBuilder.lambda$createValueGenerator$5(TableSchemaBuilder.java:264) at io.debezium.relational.TableSchema.valueFromColumnData(TableSchema.java:141) at io.debezium.relational.RelationalChangeRecordEmitter.emitCreateRecord(RelationalChangeRecordEmitter.java:70) at io.debezium.relational.RelationalChangeRecordEmitter.emitChangeRecords(RelationalChangeRecordEmitter.java:46) at io.debezium.pipeline.EventDispatcher.dispatchDataChangeEvent(EventDispatcher.java:218) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:279) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:259) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.dispatchChangeEvent(TransactionCommitConsumer.java:143) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.close(TransactionCommitConsumer.java:99) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.handleCommit(MemoryLogMinerEventProcessor.java:302) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processRow(AbstractLogMinerEventProcessor.java:199) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:177) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.process(MemoryLogMinerEventProcessor.java:134) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:167) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:58) at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:166) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:127) 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.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)
(+Inf, BINARY_FLOAT)
2021-12-08 10:40:27,153 ERROR Oracle|transporter-repl1-iusxhg--1|streaming Failed to properly convert data value for 'ORCLPDB1.DEBEZIUM.TEST_TABLE.COL2' of type BINARY_FLOAT for row [8, Inf, Inf]: [io.debezium.relational.TableSchemaBuilder] java.lang.NumberFormatException: For input string: "Inf" at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122) at java.base/java.lang.Float.parseFloat(Float.java:455) at io.debezium.connector.oracle.OracleValueConverters.convertFloat(OracleValueConverters.java:364) at io.debezium.connector.oracle.OracleValueConverters.lambda$converter$2(OracleValueConverters.java:199) at io.debezium.relational.TableSchemaBuilder.lambda$createValueGenerator$5(TableSchemaBuilder.java:264) at io.debezium.relational.TableSchema.valueFromColumnData(TableSchema.java:141) at io.debezium.relational.RelationalChangeRecordEmitter.emitCreateRecord(RelationalChangeRecordEmitter.java:70) at io.debezium.relational.RelationalChangeRecordEmitter.emitChangeRecords(RelationalChangeRecordEmitter.java:46) at io.debezium.pipeline.EventDispatcher.dispatchDataChangeEvent(EventDispatcher.java:218) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:279) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:259) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.dispatchChangeEvent(TransactionCommitConsumer.java:143) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.close(TransactionCommitConsumer.java:99) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.handleCommit(MemoryLogMinerEventProcessor.java:302) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processRow(AbstractLogMinerEventProcessor.java:199) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:177) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.process(MemoryLogMinerEventProcessor.java:134) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:167) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:58) at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:166) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:127) 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.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)
(-Inf, BINARY_FLOAT)
2021-12-08 10:40:27,153 ERROR Oracle|transporter-repl1-iusxhg--1|streaming Failed to properly convert data value for 'ORCLPDB1.DEBEZIUM.TEST_TABLE.COL2' of type BINARY_FLOAT for row [9, -Inf, -Inf]: [io.debezium.relational.TableSchemaBuilder] java.lang.NumberFormatException: For input string: "-Inf" at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122) at java.base/java.lang.Float.parseFloat(Float.java:455) at io.debezium.connector.oracle.OracleValueConverters.convertFloat(OracleValueConverters.java:364) at io.debezium.connector.oracle.OracleValueConverters.lambda$converter$2(OracleValueConverters.java:199) at io.debezium.relational.TableSchemaBuilder.lambda$createValueGenerator$5(TableSchemaBuilder.java:264) at io.debezium.relational.TableSchema.valueFromColumnData(TableSchema.java:141) at io.debezium.relational.RelationalChangeRecordEmitter.emitCreateRecord(RelationalChangeRecordEmitter.java:70) at io.debezium.relational.RelationalChangeRecordEmitter.emitChangeRecords(RelationalChangeRecordEmitter.java:46) at io.debezium.pipeline.EventDispatcher.dispatchDataChangeEvent(EventDispatcher.java:218) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:279) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:259) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.dispatchChangeEvent(TransactionCommitConsumer.java:143) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.close(TransactionCommitConsumer.java:99) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.handleCommit(MemoryLogMinerEventProcessor.java:302) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processRow(AbstractLogMinerEventProcessor.java:199) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:177) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.process(MemoryLogMinerEventProcessor.java:134) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:167) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:58) at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:166) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:127) 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.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)
A very similar error occurs with BINARY_DOUBLE, for example in the case of NaN:
2021-12-08 10:40:27,152 ERROR Oracle|transporter-repl1-iusxhg--1|streaming Failed to properly convert data value for 'ORCLPDB1.DEBEZIUM.TEST_TABLE.COL3' of type BINARY_DOUBLE for row [7, Nan, Nan]: [io.debezium.relational.TableSchemaBuilder] java.lang.NumberFormatException: For input string: "Nan" at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.base/java.lang.Double.parseDouble(Double.java:543) at io.debezium.connector.oracle.OracleValueConverters.convertDouble(OracleValueConverters.java:381) at io.debezium.connector.oracle.OracleValueConverters.lambda$converter$3(OracleValueConverters.java:201) at io.debezium.relational.TableSchemaBuilder.lambda$createValueGenerator$5(TableSchemaBuilder.java:264) at io.debezium.relational.TableSchema.valueFromColumnData(TableSchema.java:141) at io.debezium.relational.RelationalChangeRecordEmitter.emitCreateRecord(RelationalChangeRecordEmitter.java:70) at io.debezium.relational.RelationalChangeRecordEmitter.emitChangeRecords(RelationalChangeRecordEmitter.java:46) at io.debezium.pipeline.EventDispatcher.dispatchDataChangeEvent(EventDispatcher.java:218) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:279) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor$1.accept(MemoryLogMinerEventProcessor.java:259) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.dispatchChangeEvent(TransactionCommitConsumer.java:143) at io.debezium.connector.oracle.logminer.processor.TransactionCommitConsumer.close(TransactionCommitConsumer.java:99) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.handleCommit(MemoryLogMinerEventProcessor.java:302) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processRow(AbstractLogMinerEventProcessor.java:199) at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:177) at io.debezium.connector.oracle.logminer.processor.memory.MemoryLogMinerEventProcessor.process(MemoryLogMinerEventProcessor.java:134) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:167) at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:58) at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:166) at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:127) 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.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)
I have only tested this with Logminer, I'm not sure what would happen with XStream. No problems occur during a snapshot.