Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-5842

Numeric Overflow may happen when a transaction contains more events than Integer.MAX_VALUE

    XMLWordPrintable

Details

    • Bug
    • Resolution: Duplicate
    • Blocker
    • None
    • 2.1.0.Alpha1
    • oracle-connector
    • None
    • False
    • None
    • False

    Description

      my guess is that https://github.com/debezium/debezium/blame/30d95358b847aab9bb879a35d0cca00f26bb71a4/debezium-connector-oracle/src/main/java/io/debezium/connector/oracle/logminer/events/LogMinerEventRow.java#L182 should be getLong instead of getInt, and then any other lines where that data type is defined

       

      ```

      [2022-11-15 22:26:26,095] INFO WorkerSourceTask{id=kafka-connect-src-01-0} flushing 0 outstanding messages for offset commit (org.apache.kafka.connect.runtime.WorkerSourceTask)
      [2022-11-15 22:26:32,830] ERROR Mining session stopped due to error. (io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource)
      java.sql.SQLException: Numeric Overflow
              at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:4139)
              at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:125)
              at oracle.jdbc.driver.GeneratedStatement.getInt(GeneratedStatement.java:199)
              at oracle.jdbc.driver.GeneratedScrollableResultSet.getInt(GeneratedScrollableResultSet.java:246)
              at io.debezium.connector.oracle.logminer.events.LogMinerEventRow.initializeFromResultSet(LogMinerEventRow.java:182)
              at io.debezium.connector.oracle.logminer.events.LogMinerEventRow.fromResultSet(LogMinerEventRow.java:154)
              at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:255)
              at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.process(AbstractLogMinerEventProcessor.java:194)
              at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:212)
              at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:59)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:174)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:141)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:109)
              at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
              at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
              at java.base/java.lang.Thread.run(Unknown Source)
      [2022-11-15 22:26:32,830] ERROR Producer failure (io.debezium.pipeline.ErrorHandler)
      java.sql.SQLException: Numeric Overflow
              at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:4139)
              at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:125)
              at oracle.jdbc.driver.GeneratedStatement.getInt(GeneratedStatement.java:199)
              at oracle.jdbc.driver.GeneratedScrollableResultSet.getInt(GeneratedScrollableResultSet.java:246)
              at io.debezium.connector.oracle.logminer.events.LogMinerEventRow.initializeFromResultSet(LogMinerEventRow.java:182)
              at io.debezium.connector.oracle.logminer.events.LogMinerEventRow.fromResultSet(LogMinerEventRow.java:154)
              at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:255)
              at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.process(AbstractLogMinerEventProcessor.java:194)
              at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:212)
              at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:59)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:174)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:141)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:109)
              at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
              at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
              at java.base/java.lang.Thread.run(Unknown Source)
      [2022-11-15 22:26:32,831] INFO startScn=526312306076, endScn=526323153889 (io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource)
      [2022-11-15 22:26:32,939] INFO WorkerSourceTask{id=kafka-connect-src-01-0} flushing 0 outstanding messages for offset commit (org.apache.kafka.connect.runtime.WorkerSourceTask)
      [2022-11-15 22:26:32,939] ERROR WorkerSourceTask{id=kafka-connect-src-01-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask)
      org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped.
              at io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:53)
              at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:225)
              at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:59)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:174)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:141)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:109)
              at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
              at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
              at java.base/java.lang.Thread.run(Unknown Source)
      Caused by: java.sql.SQLException: Numeric Overflow
              at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:4139)
              at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:125)
              at oracle.jdbc.driver.GeneratedStatement.getInt(GeneratedStatement.java:199)
              at oracle.jdbc.driver.GeneratedScrollableResultSet.getInt(GeneratedScrollableResultSet.java:246)
              at io.debezium.connector.oracle.logminer.events.LogMinerEventRow.initializeFromResultSet(LogMinerEventRow.java:182)
              at io.debezium.connector.oracle.logminer.events.LogMinerEventRow.fromResultSet(LogMinerEventRow.java:154)
              at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.processResults(AbstractLogMinerEventProcessor.java:255)
              at io.debezium.connector.oracle.logminer.processor.AbstractLogMinerEventProcessor.process(AbstractLogMinerEventProcessor.java:194)
              at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:212)
              ... 9 more

      ```

       

      i also got nullpointerexception because this part is not wrapped in a if != null check: https://github.com/debezium/debezium/blob/004fef10bb98b9928554b9df3fb944350c33e803/debezium-connector-oracle/src/main/java/io/debezium/connector/oracle/OracleSourceInfoStructMaker.java#L58

       

      cc ccranfor@redhat.com jpechane 

      Attachments

        Issue Links

          Activity

            People

              ccranfor@redhat.com Chris Cranford
              tooptoop toop toop (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: