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

LogMiner parse failure with Update DML with no where condition

    XMLWordPrintable

Details

    Description

      As mentioned in DBZ-3193, ant0nk reported an update DML that had no where clause failed to be parsed.

      update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;
      

      The stack trace is as follows:

      ERROR Mining session stopped due to the {} (io.debezium.connector.oracle.logminer.LogMinerHelper:561)
      io.debezium.connector.oracle.logminer.parser.DmlParserException: DML statement couldn't be parsed. Please open a Jira issue with the statement 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;'. You can set internal.log.mining.dml.parser='legacy' as a workaround until the parse error is fixed.
                      at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:293)
                      at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.processResult(LogMinerQueryResultProcessor.java:199)
                      at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:182)
                      at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:140)
                      at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:113)
                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                      at java.lang.Thread.run(Thread.java:748)
      Caused by: io.debezium.connector.oracle.logminer.parser.DmlParserException: Failed to parse update DML: 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;'
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:176)
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parse(LogMinerDmlParser.java:81)
                      at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:283)
                      ... 9 more
      Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 108
                      at java.lang.String.substring(String.java:1963)
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseWhereClause(LogMinerDmlParser.java:454)
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:149)
                      ... 11 more
      [2021-03-03 18:55:21,984] ERROR Producer failure (io.debezium.pipeline.ErrorHandler:31)
      io.debezium.connector.oracle.logminer.parser.DmlParserException: DML statement couldn't be parsed. Please open a Jira issue with the statement 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;'. You can set internal.log.mining.dml.parser='legacy' as a workaround until the parse error is fixed.
                      at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:293)
                      at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.processResult(LogMinerQueryResultProcessor.java:199)
                      at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:182)
                      at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:140)
                      at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:113)
                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                      at java.lang.Thread.run(Thread.java:748)
      Caused by: io.debezium.connector.oracle.logminer.parser.DmlParserException: Failed to parse update DML: 'update "IBS"."Z#M_D" set "SN" = '11', "SU" = '66', "C_ACC_KT" = NULL, "C_NUM_KT" = NULL;'
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:176)
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parse(LogMinerDmlParser.java:81)
                      at io.debezium.connector.oracle.logminer.LogMinerQueryResultProcessor.parse(LogMinerQueryResultProcessor.java:283)
                      ... 9 more
      Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 108
                      at java.lang.String.substring(String.java:1963)
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseWhereClause(LogMinerDmlParser.java:454)
                      at io.debezium.connector.oracle.logminer.parser.LogMinerDmlParser.parseUpdate(LogMinerDmlParser.java:149)
                      ... 11 more
      

      Isn't it suprising that V$LOGMINER_CONTENTS can output such updates at all given that Debezium can collect Before-state only using WHERE-clause?

      Attachments

        Issue Links

          Activity

            People

              ccranfor@redhat.com Chris Cranford
              ant0nk Anton Kondratev (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: