[ 
https://issues.apache.org/jira/browse/FLINK-37774?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sergei Morozov updated FLINK-37774:
-----------------------------------
    Description: 
If a SQL Server database name contains special characters (e.g. a space), the 
connector will fail to read the list of tables:
{quote}Read list of available tables in each database
skipping database 'TEST DATABASE' due to error reading tables: Incorrect syntax 
near '.'.
{quote}
The second problem is that {{TableId}} s that contain special characters are 
incorrectly serialized as part of the snapshot splits. For the above name, 
there will be the following exception:
{quote}java.lang.IllegalArgumentException: Unexpected input: D
at 
io.debezium.relational.TableIdParser$ParsingState$3.handleCharacter(TableIdParser.java:144)
at 
io.debezium.relational.TableIdParser$TableIdTokenizer.tokenize(TableIdParser.java:64)
at io.debezium.text.TokenStream.start(TokenStream.java:446)
at io.debezium.relational.TableIdParser.parse(TableIdParser.java:31)
at io.debezium.relational.TableId.parseParts(TableId.java:51)
at io.debezium.relational.TableId.parse(TableId.java:40)
at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.readTableSchemas(SourceSplitSerializer.java:204)
at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserializeSplit(SourceSplitSerializer.java:142)
at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserialize(SourceSplitSerializer.java:121)
at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserialize(SourceSplitSerializer.java:44)
at 
org.apache.flink.runtime.source.event.AddSplitEvent.splits(AddSplitEvent.java:52)
at 
org.apache.flink.streaming.api.operators.SourceOperator.handleAddSplitsEvent(SourceOperator.java:538)
at 
org.apache.flink.streaming.api.operators.SourceOperator.handleOperatorEvent(SourceOperator.java:526)
at 
org.apache.flink.streaming.runtime.tasks.OperatorEventDispatcherImpl.dispatchEventToHandlers(OperatorEventDispatcherImpl.java:71)
at 
org.apache.flink.streaming.runtime.tasks.RegularOperatorChain.dispatchOperatorEvent(RegularOperatorChain.java:80)
at 
org.apache.flink.streaming.runtime.tasks.StreamTask.lambda$dispatchOperatorEvent$18(StreamTask.java:1430)
at 
org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$1.runThrowing(StreamTaskActionExecutor.java:50)
at org.apache.flink.streaming.runtime.tasks.mailbox.Mail.run(Mail.java:90)
at 
org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMailsWhenDefaultActionUnavailable(MailboxProcessor.java:338)
at 
org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMail(MailboxProcessor.java:324)
at 
org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:201)
at 
org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:807)
at 
org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:756)
at 
org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:948)
at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:927)
at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:741)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:563)
at java.base/java.lang.Thread.run(Thread.java:831)
{quote}
The above stack trace is from Flink CDC 2.4, but the problem should be 
reproducible on 3.3 as well.

  was:
If a SQL Server database name contains special characters (e.g. a space), the 
connector will fail to read the list of tables:

{quote}
Read list of available tables in each database
skipping database 'TEST DATABASE' due to error reading tables: Incorrect syntax 
near '.'.
{quote}

The second problem is that {{TableId}} s that contain special characters are 
incorrectly serialized as part of the snapshot splits. For the above name, 
there will be the following exception:
{quote}
java.lang.IllegalArgumentException: Unexpected input: D
        at 
io.debezium.relational.TableIdParser$ParsingState$3.handleCharacter(TableIdParser.java:144)
        at 
io.debezium.relational.TableIdParser$TableIdTokenizer.tokenize(TableIdParser.java:64)
        at io.debezium.text.TokenStream.start(TokenStream.java:446)
        at io.debezium.relational.TableIdParser.parse(TableIdParser.java:31)
        at io.debezium.relational.TableId.parseParts(TableId.java:51)
        at io.debezium.relational.TableId.parse(TableId.java:40)
        at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.readTableSchemas(SourceSplitSerializer.java:204)
        at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserializeSplit(SourceSplitSerializer.java:142)
        at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserialize(SourceSplitSerializer.java:121)
        at 
com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserialize(SourceSplitSerializer.java:44)
        at 
org.apache.flink.runtime.source.event.AddSplitEvent.splits(AddSplitEvent.java:52)
        at 
org.apache.flink.streaming.api.operators.SourceOperator.handleAddSplitsEvent(SourceOperator.java:538)
        at 
org.apache.flink.streaming.api.operators.SourceOperator.handleOperatorEvent(SourceOperator.java:526)
        at 
org.apache.flink.streaming.runtime.tasks.OperatorEventDispatcherImpl.dispatchEventToHandlers(OperatorEventDispatcherImpl.java:71)
        at 
org.apache.flink.streaming.runtime.tasks.RegularOperatorChain.dispatchOperatorEvent(RegularOperatorChain.java:80)
        at 
org.apache.flink.streaming.runtime.tasks.StreamTask.lambda$dispatchOperatorEvent$18(StreamTask.java:1430)
        at 
org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$1.runThrowing(StreamTaskActionExecutor.java:50)
        at 
org.apache.flink.streaming.runtime.tasks.mailbox.Mail.run(Mail.java:90)
        at 
org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMailsWhenDefaultActionUnavailable(MailboxProcessor.java:338)
        at 
org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMail(MailboxProcessor.java:324)
        at 
org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:201)
        at 
org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:807)
        at 
org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:756)
        at 
org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:948)
        at 
org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:927)
        at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:741)
        at org.apache.flink.runtime.taskmanager.Task.run(Task.java:563)
        at java.base/java.lang.Thread.run(Thread.java:831)
{quote}


> SQL Server CDC connector incorrectly handles special characters in database 
> and table names
> -------------------------------------------------------------------------------------------
>
>                 Key: FLINK-37774
>                 URL: https://issues.apache.org/jira/browse/FLINK-37774
>             Project: Flink
>          Issue Type: Bug
>          Components: Flink CDC
>    Affects Versions: cdc-3.3.0
>            Reporter: Sergei Morozov
>            Priority: Major
>
> If a SQL Server database name contains special characters (e.g. a space), the 
> connector will fail to read the list of tables:
> {quote}Read list of available tables in each database
> skipping database 'TEST DATABASE' due to error reading tables: Incorrect 
> syntax near '.'.
> {quote}
> The second problem is that {{TableId}} s that contain special characters are 
> incorrectly serialized as part of the snapshot splits. For the above name, 
> there will be the following exception:
> {quote}java.lang.IllegalArgumentException: Unexpected input: D
> at 
> io.debezium.relational.TableIdParser$ParsingState$3.handleCharacter(TableIdParser.java:144)
> at 
> io.debezium.relational.TableIdParser$TableIdTokenizer.tokenize(TableIdParser.java:64)
> at io.debezium.text.TokenStream.start(TokenStream.java:446)
> at io.debezium.relational.TableIdParser.parse(TableIdParser.java:31)
> at io.debezium.relational.TableId.parseParts(TableId.java:51)
> at io.debezium.relational.TableId.parse(TableId.java:40)
> at 
> com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.readTableSchemas(SourceSplitSerializer.java:204)
> at 
> com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserializeSplit(SourceSplitSerializer.java:142)
> at 
> com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserialize(SourceSplitSerializer.java:121)
> at 
> com.ververica.cdc.connectors.base.source.meta.split.SourceSplitSerializer.deserialize(SourceSplitSerializer.java:44)
> at 
> org.apache.flink.runtime.source.event.AddSplitEvent.splits(AddSplitEvent.java:52)
> at 
> org.apache.flink.streaming.api.operators.SourceOperator.handleAddSplitsEvent(SourceOperator.java:538)
> at 
> org.apache.flink.streaming.api.operators.SourceOperator.handleOperatorEvent(SourceOperator.java:526)
> at 
> org.apache.flink.streaming.runtime.tasks.OperatorEventDispatcherImpl.dispatchEventToHandlers(OperatorEventDispatcherImpl.java:71)
> at 
> org.apache.flink.streaming.runtime.tasks.RegularOperatorChain.dispatchOperatorEvent(RegularOperatorChain.java:80)
> at 
> org.apache.flink.streaming.runtime.tasks.StreamTask.lambda$dispatchOperatorEvent$18(StreamTask.java:1430)
> at 
> org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$1.runThrowing(StreamTaskActionExecutor.java:50)
> at org.apache.flink.streaming.runtime.tasks.mailbox.Mail.run(Mail.java:90)
> at 
> org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMailsWhenDefaultActionUnavailable(MailboxProcessor.java:338)
> at 
> org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.processMail(MailboxProcessor.java:324)
> at 
> org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:201)
> at 
> org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:807)
> at 
> org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:756)
> at 
> org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:948)
> at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:927)
> at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:741)
> at org.apache.flink.runtime.taskmanager.Task.run(Task.java:563)
> at java.base/java.lang.Thread.run(Thread.java:831)
> {quote}
> The above stack trace is from Flink CDC 2.4, but the problem should be 
> reproducible on 3.3 as well.



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

Reply via email to