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

Error validating connector with special character $

XMLWordPrintable

    • False
    • Hide

      None

      Show
      None
    • False
    • Moderate

      Database name is "Database$Demo". When creating a connector it fails to validate due to special character $. I have tried "[Database$Demo]", "Database\$Demo", "Database
      $Demo" and "Databas\\\$Demo", neither work.

      Bug report

      For bug reports, provide this information, please:

      What Debezium connector do you use and what version?

      debezium-connector-sqlserver/2.4.1.Final/debezium-connector-sqlserver-2.4.1.Final-plugin.tar.gz

      What is the connector configuration?

      {         "connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",         "database.history.kafka.bootstrap.servers": "x",         "database.history.kafka.topic": "x",         "database.hostname": "x",         "database.server.name": "x",         "database.names": "Database$Demo",         "database.password": "x",         "database.port": "x",         "database.user": "x",         "decimal.handling.mode": "double",         "errors.log.enable": "true",         "errors.log.include.messages": "true",         "errors.retry.delay.max.ms": "30000",         "errors.retry.timeout": "600000",         "errors.tolerance": "all",         "incremental.snapshot.chunk.size": "32768",         "key.converter.schemas.enable": "false",         "max.batch.size": "32768",         "max.queue.size": "65536",         "name": "x",         "provide.transaction.metadata": "true",         "schema.history.internal.kafka.bootstrap.servers": "x",         "schema.history.internal.kafka.topic": "schema_changes",         "schema.include.list": "x",         "signal.data.collection": "x",         "snapshot.fetch.size": "8000",         "snapshot.isolation.mode": "read_committed",         "snapshot.mode": "schema_only",         "tasks.max": "1",         "time.precision.mode": "connect",         "topic.creation.default.cleanup.policy": "delete",         "topic.creation.default.compression.type": "lz4",         "topic.creation.default.partitions": "10",         "topic.creation.default.replication.factor": "1",         "topic.prefix": "x",         "transforms": "Reroute",         "transforms.Reroute.topic.regex": "x\\.([^.]+)\\.([^.]+)\\.([^.]+)",         "transforms.Reroute.topic.replacement": "x.$2",         "transforms.Reroute.type": "io.debezium.transforms.ByLogicalTableRouter",         "value.converter.schemas.enable": "false"     }

      What is the captured database version and mode of deployment?

      (E.g. on-premises, with a specific cloud provider, etc.)

      Microsoft SQL Server 2022 (RTM-CU16) (KB5048033) - 16.0.4165.4 (X64) 
          Nov  6 2024 19:24:49 
          Copyright (C) 2022 Microsoft Corporation
          Standard Edition (64-bit) on Windows Server 2022 Datacenter 10.0 <X64> (Build 20348: ) (Hypervisor)

      What behavior do you expect?

      Connector is created

      What behavior do you see?

      {     "error_code": 400,     "message": "Connector configuration is invalid and contains the following 1 error(s):\nUnable to connect. Check this and other connection properties. Error: Illegal group reference\nYou can also find the above list of errors at the endpoint `/connector-plugins/\{connectorType}

      /config/validate`"
      }

      Do you see the same behaviour using the latest released Debezium version?

      (Ideally, also verify with latest Alpha/Beta/CR version)

      Have not tried latest version yet.

      Do you have the connector logs, ideally from start till finish?

      (You might be asked later to provide DEBUG/TRACE level log)

      kafka-connect-5d9df5bb96-cgd25 kafka-connect 2025-02-04 12:25:08,805 ERROR Failed testing connection for {connector.class=io.debezium.connector.sqlserver.SqlServerConnector, errors.log.include.messages=true, max.queue.size=65536, topic.creation.default.partitions=10, incremental.snapshot.chunk.size=32768, tasks.max=1, database.history.kafka.topic=x.database_changes, transforms=Reroute, schema.include.list=dbo, provide.transaction.metadata=true, topic.prefix=x, transforms.Reroute.topic.replacement=x.$2, decimal.handling.mode=double, schema.history.internal.kafka.topic=x.schema_changes, signal.data.collection=x.dbo.debezium_signals, topic.creation.default.replication.factor=1, errors.log.enable=true, snapshot.fetch.size=8000, errors.retry.timeout=600000, database.user=x, topic.creation.default.compression.type=lz4, transforms.Reroute.type=io.debezium.transforms.ByLogicalTableRouter, database.names=x$Demo, topic.creation.default.cleanup.policy=delete, database.history.kafka.bootstrap.servers=x, time.precision.mode=connect, database.server.name=x, errors.retry.delay.max.ms=30000, schema.history.internal.kafka.bootstrap.servers=x, snapshot.isolation.mode=read_committed, transforms.Reroute.topic.regex=x\.([^.])\.([^.])\.([^.]+), database.port=x, key.converter.schemas.enable=false, database.hostname=x, database.password=x, name=x, value.converter.schemas.enable=false, errors.tolerance=all, max.batch.size=32768, snapshot.mode=schema_only} with user '[database.user,null,[],[],true]' (io.debezium.connector.sqlserver.SqlServerConnector) [pool-12-thread-18]
      kafka-connect-5d9df5bb96-cgd25 kafka-connect java.lang.IllegalArgumentException: Illegal group reference
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.util.regex.Matcher.appendExpandedReplacement(Matcher.java:1067)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.util.regex.Matcher.appendReplacement(Matcher.java:997)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.util.regex.Matcher.replaceAll(Matcher.java:1181)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.lang.String.replaceAll(String.java:2940)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection.findAndReplace(JdbcConnection.java:312)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection.findAndReplace(JdbcConnection.java:286)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection.lambda$patternBasedFactory$1(JdbcConnection.java:228)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection$ConnectionFactoryDecorator.connect(JdbcConnection.java:127)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:873)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.connector.sqlserver.SqlServerConnection.connection(SqlServerConnection.java:241)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:868)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection.execute(JdbcConnection.java:430)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.jdbc.JdbcConnection.execute(JdbcConnection.java:409)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.connector.sqlserver.SqlServerConnector.validateConnection(SqlServerConnector.java:122)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at io.debezium.connector.common.RelationalBaseSourceConnector.validate(RelationalBaseSourceConnector.java:55)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:491)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$2(AbstractHerder.java:372)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect    at java.base/java.lang.Thread.run(Thread.java:833)
      kafka-connect-5d9df5bb96-cgd25 kafka-connect 2025-02-04 12:25:08,805 INFO AbstractConfig values:
      kafka-connect-5d9df5bb96-cgd25 kafka-connect  (org.apache.kafka.common.config.AbstractConfig) [pool-12-thread-18]

      How to reproduce the issue using our tutorial deployment?

      Post a connector with "database.names": "Database$Demo"

       

      Chris Cranford [ 1:50 PM |https://debezium.zulipchat.com/#narrow/channel/348252-community-sqlserver/topic/Special.20characters.20in.20database.20name/near/497657625]
      @Vojtech Juranek I wonder if this:

       
      {{ if (value != null) {// And replace the variable ...url = url.replaceAll("\\$

      {" + name + "\\}", value);}}}
      would work if we changed it to:


       
      {{ if (value != null) {// And replace the variable ...url = url.replaceAll("\\$
      {" + name + "\}

      ", Pattern.quote(value));}}}

              Unassigned Unassigned
              anygaard@maritech.no Anders Nygård (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: