JunboWang created FLINK-38641:
---------------------------------

             Summary: Trim surrounding double quotes from default values for 
BIGINT and SMALLINT types when parsing MySQL DDL
                 Key: FLINK-38641
                 URL: https://issues.apache.org/jira/browse/FLINK-38641
             Project: Flink
          Issue Type: Improvement
          Components: Flink CDC
    Affects Versions: cdc-3.5.0
         Environment: Flink CDC 3.5.0
            Reporter: JunboWang


User may use DDL SQL like
{code:java}
// code placeholder
alter table test_tbl add column `col4` INT NOT NULL DEFAULT " 0";
alter table test_tbl add column `col5` DOUBLE NOT NULL DEFAULT " 0.0";
alter table test_tbl add column `col6` BIGINT NOT NULL DEFAULT " 0"; {code}
And we will meet Exception like this:
{code:java}
// code placeholder
18445 [Source Data Fetcher for Source: default_value_test[1] -> 
ConstraintEnforcer[2] (1/4)#0] ERROR 
org.apache.flink.connector.base.source.reader.fetcher.SplitFetcherManager - 
Received uncaught exception.
java.lang.RuntimeException: SplitFetcher thread 0 received unexpected exception 
while polling the records
    at 
org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:168)
 ~[flink-connector-base-1.18.0-qiyi-1.jar:1.18.0-qiyi-1]
    at 
org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:117)
 [flink-connector-base-1.18.0-qiyi-1.jar:1.18.0-qiyi-1]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
[?:1.8.0_401]
    at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) 
[?:1.8.0_401]
    at java.util.concurrent.FutureTask.run(FutureTask.java) [?:1.8.0_401]
    at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
[?:1.8.0_401]
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
[?:1.8.0_401]
    at java.lang.Thread.run(Thread.java:750) [?:1.8.0_401]
Caused by: 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:50) 
~[debezium-core-1.9.8.Final.jar:1.9.8.Final]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.task.context.MySqlErrorHandler.setProducerThrowable(MySqlErrorHandler.java:86)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleEvent(MySqlStreamingChangeEventSource.java:430)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.task.MySqlBinlogSplitReadTask.handleEvent(MySqlBinlogSplitReadTask.java:96)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$execute$25(MySqlStreamingChangeEventSource.java:1096)
 ~[classes/:?]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.notifyEventListeners(BinaryLogClient.java:1246)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1072)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:631)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient$7.run(BinaryLogClient.java:932) 
~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    ... 1 more
Caused by: io.debezium.DebeziumException: Error processing binlog event
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleEvent(MySqlStreamingChangeEventSource.java:430)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.task.MySqlBinlogSplitReadTask.handleEvent(MySqlBinlogSplitReadTask.java:96)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$execute$25(MySqlStreamingChangeEventSource.java:1096)
 ~[classes/:?]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.notifyEventListeners(BinaryLogClient.java:1246)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1072)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:631)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient$7.run(BinaryLogClient.java:932) 
~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    ... 1 more
Caused by: io.debezium.DebeziumException: java.lang.NumberFormatException: For 
input string: "" 0 ""
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$handleQueryEvent$2(MySqlStreamingChangeEventSource.java:675)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.dispatcher.EventDispatcherImpl.dispatchSchemaChangeEvent(EventDispatcherImpl.java:145)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.dispatcher.EventDispatcherImpl.dispatchSchemaChangeEvent(EventDispatcherImpl.java:64)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleQueryEvent(MySqlStreamingChangeEventSource.java:668)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$execute$14(MySqlStreamingChangeEventSource.java:1050)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleEvent(MySqlStreamingChangeEventSource.java:409)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.task.MySqlBinlogSplitReadTask.handleEvent(MySqlBinlogSplitReadTask.java:96)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$execute$25(MySqlStreamingChangeEventSource.java:1096)
 ~[classes/:?]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.notifyEventListeners(BinaryLogClient.java:1246)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1072)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:631)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient$7.run(BinaryLogClient.java:932) 
~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    ... 1 more
Caused by: java.lang.NumberFormatException: For input string: "" 0 ""
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
~[?:1.8.0_401]
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
~[?:1.8.0_401]
    at java.lang.Double.parseDouble(Double.java:538) ~[?:1.8.0_401]
    at 
io.debezium.connector.mysql.MySqlValueConverters.convertSmallInt(MySqlValueConverters.java:459)
 ~[classes/:?]
    at 
io.debezium.jdbc.JdbcValueConverters.lambda$converter$4(JdbcValueConverters.java:293)
 ~[debezium-core-1.9.8.Final.jar:1.9.8.Final]
    at 
io.debezium.connector.mysql.MySqlDefaultValueConverter.parseDefaultValue(MySqlDefaultValueConverter.java:140)
 ~[classes/:?]
    at 
io.debezium.relational.TableSchemaBuilder.lambda$addField$9(TableSchemaBuilder.java:393)
 ~[debezium-core-1.9.8.Final.jar:?]
    at java.util.Optional.flatMap(Optional.java:241) ~[?:1.8.0_401]
    at 
io.debezium.relational.TableSchemaBuilder.addField(TableSchemaBuilder.java:393) 
~[debezium-core-1.9.8.Final.jar:?]
    at 
io.debezium.relational.TableSchemaBuilder.lambda$create$2(TableSchemaBuilder.java:149)
 ~[debezium-core-1.9.8.Final.jar:?]
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) 
~[?:1.8.0_401]
    at 
java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 
~[?:1.8.0_401]
    at 
java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) 
~[?:1.8.0_401]
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) 
~[?:1.8.0_401]
    at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) 
~[?:1.8.0_401]
    at 
java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 
~[?:1.8.0_401]
    at 
java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
 ~[?:1.8.0_401]
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
~[?:1.8.0_401]
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 
~[?:1.8.0_401]
    at 
io.debezium.relational.TableSchemaBuilder.create(TableSchemaBuilder.java:147) 
~[debezium-core-1.9.8.Final.jar:?]
    at 
io.debezium.relational.RelationalDatabaseSchema.buildAndRegisterSchema(RelationalDatabaseSchema.java:135)
 ~[debezium-core-1.9.8.Final.jar:?]
    at 
io.debezium.connector.mysql.MySqlDatabaseSchema.lambda$applySchemaChange$2(MySqlDatabaseSchema.java:179)
 ~[debezium-connector-mysql-1.9.8.Final.jar:?]
    at java.lang.Iterable.forEach(Iterable.java:75) ~[?:1.8.0_401]
    at 
io.debezium.connector.mysql.MySqlDatabaseSchema.applySchemaChange(MySqlDatabaseSchema.java:179)
 ~[debezium-connector-mysql-1.9.8.Final.jar:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.dispatcher.EventDispatcherImpl$SchemaChangeEventReceiver.schemaChangeEvent(EventDispatcherImpl.java:216)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$handleQueryEvent$2(MySqlStreamingChangeEventSource.java:673)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.dispatcher.EventDispatcherImpl.dispatchSchemaChangeEvent(EventDispatcherImpl.java:145)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.dispatcher.EventDispatcherImpl.dispatchSchemaChangeEvent(EventDispatcherImpl.java:64)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleQueryEvent(MySqlStreamingChangeEventSource.java:668)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$execute$14(MySqlStreamingChangeEventSource.java:1050)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.handleEvent(MySqlStreamingChangeEventSource.java:409)
 ~[classes/:?]
    at 
org.apache.flink.cdc.connectors.mysql.debezium.task.MySqlBinlogSplitReadTask.handleEvent(MySqlBinlogSplitReadTask.java:96)
 ~[classes/:?]
    at 
io.debezium.connector.mysql.MySqlStreamingChangeEventSource.lambda$execute$25(MySqlStreamingChangeEventSource.java:1096)
 ~[classes/:?]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.notifyEventListeners(BinaryLogClient.java:1246)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:1072)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:631)
 ~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    at 
com.github.shyiko.mysql.binlog.BinaryLogClient$7.run(BinaryLogClient.java:932) 
~[mysql-binlog-connector-java-0.27.2.jar:0.27.2]
    ... 1 more {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to