Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve error message when schema registry connection fails #4799

Closed
Naros opened this issue Jun 18, 2024 · 1 comment
Closed

Improve error message when schema registry connection fails #4799

Naros opened this issue Jun 18, 2024 · 1 comment
Assignees
Labels

Comments

@Naros
Copy link

Naros commented Jun 18, 2024

We had a Debezium user who received the following error message:

2024-06-11 15:12:35,765 ERROR [debezium-connector|task-0] Failed to update cache value for key: {"type":"record","name":"SchemaChangeKey","namespace":"io.debezium.connector.oracle","fields":[

{"name":"databaseName","type":"string"}
],"connect.version":1,"connect.name":"io.debezium.connector.oracle.SchemaChangeKey"} (io.apicurio.registry.resolver.ERCache) [task-thread-debezium-connector-0]
io.apicurio.registry.rest.client.exception.RestClientException
        at io.apicurio.registry.rest.client.impl.ErrorHandler.parseError(ErrorHandler.java:95)
        at io.apicurio.rest.client.JdkHttpClient.sendRequest(JdkHttpClient.java:207)
        at io.apicurio.registry.rest.client.impl.RegistryClientImpl.createArtifact(RegistryClientImpl.java:311)
        at io.apicurio.registry.rest.client.RegistryClient.createArtifact(RegistryClient.java:147)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.lambda$handleAutoCreateArtifact$3(DefaultSchemaResolver.java:277)
        at io.apicurio.registry.resolver.ERCache.lambda$getValue$0(ERCache.java:201)
        at io.apicurio.registry.resolver.ERCache.retry(ERCache.java:254)
        at io.apicurio.registry.resolver.ERCache.getValue(ERCache.java:200)
        at io.apicurio.registry.resolver.ERCache.getByContent(ERCache.java:175)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.handleAutoCreateArtifact(DefaultSchemaResolver.java:275)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.getSchemaFromRegistry(DefaultSchemaResolver.java:122)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.resolveSchema(DefaultSchemaResolver.java:90)
        at io.apicurio.registry.serde.AbstractKafkaSerializer.serialize(AbstractKafkaSerializer.java:83)
        at io.apicurio.registry.utils.converter.SerdeBasedConverter.fromConnectData(SerdeBasedConverter.java:122)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.lambda$convertTransformedRecord$5(AbstractWorkerSourceTask.java:491)
        at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndRetry(RetryWithToleranceOperator.java:180)
        at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:214)
        at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execute(RetryWithToleranceOperator.java:156)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.convertTransformedRecord(AbstractWorkerSourceTask.java:491)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.sendRecords(AbstractWorkerSourceTask.java:402)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.execute(AbstractWorkerSourceTask.java:367)
        at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:204)
        at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:259)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.run(AbstractWorkerSourceTask.java:77)
        at org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:237)

The error message was quite cryptic and didn't provide any useful information to know what could have been the problem. In investigating, the issue was that the user had misconfigured the TLS configuration properties, and was pointing to the non-SSL port and was receiving a connection failure, as outlined in these log entries:

2024-06-17 16:02:36,723 DEBUG [debezium-connector|task-0] Error returned: (io.apicurio.registry.rest.client.impl.ErrorHandler) [task-thread-debezium-connector-0]
java.net.ConnectException
        at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:573)
        at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
        at io.apicurio.rest.client.JdkHttpClient.sendRequest(JdkHttpClient.java:202)
        at io.apicurio.registry.rest.client.impl.RegistryClientImpl.createArtifact(RegistryClientImpl.java:311)
        at io.apicurio.registry.rest.client.RegistryClient.createArtifact(RegistryClient.java:147)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.lambda$handleAutoCreateArtifact$3(DefaultSchemaResolver.java:278)
        at io.apicurio.registry.resolver.ERCache.lambda$getValue$0(ERCache.java:201)
        at io.apicurio.registry.resolver.ERCache.retry(ERCache.java:254)
        at io.apicurio.registry.resolver.ERCache.getValue(ERCache.java:200)
        at io.apicurio.registry.resolver.ERCache.getByContent(ERCache.java:175)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.handleAutoCreateArtifact(DefaultSchemaResolver.java:276)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.getSchemaFromRegistry(DefaultSchemaResolver.java:123)
        at io.apicurio.registry.resolver.DefaultSchemaResolver.resolveSchema(DefaultSchemaResolver.java:91)
        at io.apicurio.registry.serde.AbstractKafkaSerializer.serialize(AbstractKafkaSerializer.java:83)
        at io.apicurio.registry.utils.converter.SerdeBasedConverter.fromConnectData(SerdeBasedConverter.java:122)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.lambda$convertTransformedRecord$5(AbstractWorkerSourceTask.java:491)
        at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndRetry(RetryWithToleranceOperator.java:180)
        at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:214)
        at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execute(RetryWithToleranceOperator.java:156)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.convertTransformedRecord(AbstractWorkerSourceTask.java:491)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.sendRecords(AbstractWorkerSourceTask.java:402)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.execute(AbstractWorkerSourceTask.java:367)
        at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:204)
        at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:259)
        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.run(AbstractWorkerSourceTask.java:77)
        at org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:237)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.net.ConnectException
        at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1055)
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
        at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
        at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
        at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
        ... 3 more
Caused by: java.nio.channels.ClosedChannelException
        at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
        at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
        at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
        at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
        ... 9 more
2024-06-17 16:02:36,723 ERROR [debezium-connector|task-0] Failed to update cache value for key: {"type":"record","name":"SchemaChangeKey","namespace":"io.debezium.connector.oracle","fields":[{"name":"databaseName","type":"string"}],"connect.version":1,"connect.name":"io.debezium.connector.oracle.SchemaChangeKey"} (io.apicurio.registry.resolver.ERCache) [task-thread-debezium-connector-0]
io.apicurio.registry.rest.client.exception.RestClientException

The user was on Registry 2.5.9.Final.
Can this error message be improved so that users would have known that the issue was connection related?

@Naros Naros added the type/bug Something isn't working label Jun 18, 2024
@carlesarnal carlesarnal self-assigned this Jun 18, 2024
@carlesarnal
Copy link
Member

As part of the client refactor this has been addressed in 3.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants