quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.62k stars 2.64k forks source link

Warning: Multiple httpclient implementation in the classpath #32937

Closed mschorsch closed 6 months ago

mschorsch commented 1 year ago

Describe the bug

I wanted to upgrade one of our applications from Quarkus 2.16.6.Final to Quarkus 3.0.1.Final. The application starts but as soon as I use the Kubernetes client I get the following warning and exception in the console:

2023-04-27 07:48:35,213 WARN [io.fab.kub.cli.uti.HttpClientUtils] (vert.x-eventloop-thread-2) There are multiple httpclient implementation in the classpath, choosing the first non-default implementation. You should exclude dependencies that aren't needed or use an explicit association of the HttpClient.Factory.

2023-04-27 07:48:35,213 WARN  [io.fab.kub.cli.uti.HttpClientUtils] (vert.x-eventloop-thread-2) There are multiple httpclient implementation in the classpath, choosing the first non-default implementation. You should exclude dependencies that aren't needed or use an explicit association of the HttpClient.Factory.
2023-04-27 07:48:50,331 ERROR [de.bvu.tra.tim.htt.ExceptionMappers] (vert.x-eventloop-thread-2) An error has occurred.: io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.
        at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:129)
        at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:122)
        at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.waitForResult(OperationSupport.java:551)
        at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.list(BaseOperation.java:424)
        at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.list(BaseOperation.java:392)
        at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.list(BaseOperation.java:93)
        at com.example.services.InstanceService.findDeployments(InstanceService.kt:105)
        at com.example.services.InstanceService.findApps(InstanceService.kt:86)
        at com.example.services.InstanceService_ClientProxy.findApps(Unknown Source)
        at com.example.http.MainResource.getIndexPage(MainResource.kt:87)
        at com.example.http.MainResource_Subclass.getIndexPage$$superforward(Unknown Source)
        at com.example.http.MainResource_Subclass$$function$$1.apply(Unknown Source)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:74)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:100)
        at io.quarkus.security.runtime.interceptor.SecurityHandler.handle(SecurityHandler.java:27)
        at io.quarkus.security.runtime.interceptor.RolesAllowedInterceptor.intercept(RolesAllowedInterceptor.java:29)
        at io.quarkus.security.runtime.interceptor.RolesAllowedInterceptor_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:71)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:63)
        at io.quarkus.resteasy.reactive.server.runtime.StandardSecurityCheckInterceptor.intercept(StandardSecurityCheckInterceptor.java:44)
        at io.quarkus.resteasy.reactive.server.runtime.StandardSecurityCheckInterceptor_RolesAllowedInterceptor_Bean.intercept(Unknown Source)
        at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
        at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:38)
        at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:26)
        at com.example.http.MainResource_Subclass.getIndexPage(Unknown Source)
        at com.example.http.MainResource_ClientProxy.getIndexPage(Unknown Source)
        at com.example.http.MainResource$quarkusrestinvoker$getIndexPage_2ced74d2fee37c4b83002c0f48a53b817892c857.invoke(Unknown Source)
        at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
        at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
        at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:145)
        at org.jboss.resteasy.reactive.server.handlers.RestInitialHandler.beginProcessing(RestInitialHandler.java:48)
        at org.jboss.resteasy.reactive.server.vertx.ResteasyReactiveVertxHandler.handle(ResteasyReactiveVertxHandler.java:23)
        at org.jboss.resteasy.reactive.server.vertx.ResteasyReactiveVertxHandler.handle(ResteasyReactiveVertxHandler.java:10)
        at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284)
        at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:177)
        at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141)
        at io.quarkus.vertx.http.runtime.StaticResourcesRecorder$2.handle(StaticResourcesRecorder.java:102)
        at io.quarkus.vertx.http.runtime.StaticResourcesRecorder$2.handle(StaticResourcesRecorder.java:88)
        at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284)
        at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:140)
        at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141)
        at io.vertx.ext.web.handler.impl.StaticHandlerImpl.lambda$sendStatic$1(StaticHandlerImpl.java:290)
        at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141)
        at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54)
        at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.util.concurrent.TimeoutException
        at java.base/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1960)
        at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2095)
        at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.waitForResult(OperationSupport.java:528)
        ... 50 more

I guess the exception is due to the warning that there are multiple HTTP clients on the classpath?

Maven dependencies:

    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-reactive-qute</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-reactive-jackson</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-kotlin</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-kubernetes-client</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-oidc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-config-yaml</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-arc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>kotlin-extensions</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.cronutils</groupId>
            <artifactId>cron-utils</artifactId>
        </dependency>
    </dependencies>

How to Reproduce?

reproducer.zip

  1. ./mvnw quarkus:dev
  2. http://localhost:8080/hello

Output of java -version

Java 17

Quarkus version or git rev

3.0.1.Final

Build tool (ie. output of mvnw --version or gradlew --version)

Maven 3.9.1

quarkus-bot[bot] commented 1 year ago

/cc @Sgitario (kubernetes), @evanchooly (kotlin), @geoand (kotlin,kubernetes), @iocanel (kubernetes)

geoand commented 1 year ago

Can you add the output of mvn dependency:tree please?

mschorsch commented 1 year ago

Sure.

[INFO] com.example:my-app:jar:1.5-SNAPSHOT
[INFO] +- io.quarkus:quarkus-hibernate-validator:jar:3.0.1.Final:compile
[INFO] |  +- io.quarkus:quarkus-core:jar:3.0.1.Final:compile
[INFO] |  |  +- jakarta.enterprise:jakarta.enterprise.cdi-api:jar:4.0.1:compile
[INFO] |  |  |  \- jakarta.enterprise:jakarta.enterprise.lang-model:jar:4.0.1:compile
[INFO] |  |  +- jakarta.inject:jakarta.inject-api:jar:2.0.1:compile
[INFO] |  |  +- io.smallrye.common:smallrye-common-os:jar:2.1.0:compile
[INFO] |  |  +- io.quarkus:quarkus-ide-launcher:jar:3.0.1.Final:compile
[INFO] |  |  +- io.quarkus:quarkus-development-mode-spi:jar:3.0.1.Final:compile
[INFO] |  |  +- io.smallrye.config:smallrye-config:jar:3.2.1:compile
[INFO] |  |  |  \- io.smallrye.config:smallrye-config-core:jar:3.2.1:compile
[INFO] |  |  |     \- io.smallrye.common:smallrye-common-expression:jar:2.1.0:compile
[INFO] |  |  |        \- io.smallrye.common:smallrye-common-function:jar:2.1.0:compile
[INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.5.0.Final:compile
[INFO] |  |  +- org.jboss.logmanager:jboss-logmanager-embedded:jar:1.1.1:compile
[INFO] |  |  +- org.jboss.logging:jboss-logging-annotations:jar:2.2.1.Final:compile
[INFO] |  |  +- org.jboss.threads:jboss-threads:jar:3.5.0.Final:compile
[INFO] |  |  +- org.jboss.slf4j:slf4j-jboss-logmanager:jar:2.0.0.Final:compile
[INFO] |  |  +- org.graalvm.sdk:graal-sdk:jar:22.3.0:compile
[INFO] |  |  +- org.wildfly.common:wildfly-common:jar:1.5.4.Final-format-001:compile
[INFO] |  |  +- io.quarkus:quarkus-bootstrap-runner:jar:3.0.1.Final:compile
[INFO] |  |  \- io.quarkus:quarkus-fs-util:jar:0.0.9:compile
[INFO] |  +- org.hibernate.validator:hibernate-validator:jar:8.0.0.Final:compile
[INFO] |  |  +- jakarta.validation:jakarta.validation-api:jar:3.0.2:compile
[INFO] |  |  \- com.fasterxml:classmate:jar:1.5.1:compile
[INFO] |  +- org.glassfish.expressly:expressly:jar:5.0.0:compile
[INFO] |  |  \- jakarta.el:jakarta.el-api:jar:5.0.1:compile
[INFO] |  +- io.smallrye.config:smallrye-config-validator:jar:3.2.1:compile
[INFO] |  \- jakarta.ws.rs:jakarta.ws.rs-api:jar:3.1.0:compile
[INFO] +- io.quarkus:quarkus-resteasy-reactive-qute:jar:3.0.1.Final:compile
[INFO] |  \- io.quarkus:quarkus-qute:jar:3.0.1.Final:compile
[INFO] |     \- io.quarkus.qute:qute-core:jar:3.0.1.Final:compile
[INFO] +- io.quarkus:quarkus-resteasy-reactive-jackson:jar:3.0.1.Final:compile
[INFO] |  \- io.quarkus:quarkus-resteasy-reactive-jackson-common:jar:3.0.1.Final:compile
[INFO] |     \- io.quarkus.resteasy.reactive:resteasy-reactive-jackson:jar:3.0.1.Final:compile
[INFO] +- io.quarkus:quarkus-resteasy-reactive:jar:3.0.1.Final:compile
[INFO] |  +- io.quarkus:quarkus-resteasy-reactive-common:jar:3.0.1.Final:compile
[INFO] |  |  +- io.quarkus.resteasy.reactive:resteasy-reactive-common:jar:3.0.1.Final:compile
[INFO] |  |  |  +- io.quarkus.resteasy.reactive:resteasy-reactive-common-types:jar:3.0.1.Final:compile
[INFO] |  |  |  +- org.reactivestreams:reactive-streams:jar:1.0.4:compile
[INFO] |  |  |  \- io.smallrye.reactive:mutiny-zero-flow-adapters:jar:1.0.0:compile
[INFO] |  |  \- io.quarkus:quarkus-mutiny:jar:3.0.1.Final:compile
[INFO] |  |     +- io.quarkus:quarkus-smallrye-context-propagation:jar:3.0.1.Final:compile
[INFO] |  |     |  \- io.smallrye:smallrye-context-propagation:jar:2.1.0:compile
[INFO] |  |     |     +- io.smallrye:smallrye-context-propagation-api:jar:2.1.0:compile
[INFO] |  |     |     \- io.smallrye:smallrye-context-propagation-storage:jar:2.1.0:compile
[INFO] |  |     \- io.smallrye.reactive:mutiny-smallrye-context-propagation:jar:2.1.0:compile
[INFO] |  +- io.quarkus.resteasy.reactive:resteasy-reactive-vertx:jar:3.0.1.Final:compile
[INFO] |  |  +- io.vertx:vertx-web:jar:4.4.1:compile
[INFO] |  |  |  +- io.vertx:vertx-web-common:jar:4.4.1:compile
[INFO] |  |  |  +- io.vertx:vertx-auth-common:jar:4.4.1:compile
[INFO] |  |  |  \- io.vertx:vertx-bridge-common:jar:4.4.1:compile
[INFO] |  |  +- io.smallrye.reactive:smallrye-mutiny-vertx-core:jar:3.3.0:compile
[INFO] |  |  |  +- io.smallrye.reactive:smallrye-mutiny-vertx-runtime:jar:3.3.0:compile
[INFO] |  |  |  \- io.smallrye.reactive:vertx-mutiny-generator:jar:3.3.0:compile
[INFO] |  |  |     \- io.vertx:vertx-codegen:jar:4.4.1:compile
[INFO] |  |  +- io.quarkus.resteasy.reactive:resteasy-reactive:jar:3.0.1.Final:compile
[INFO] |  |  \- org.jboss.logging:commons-logging-jboss-logging:jar:1.0.0.Final:compile
[INFO] |  +- io.quarkus:quarkus-vertx-http:jar:3.0.1.Final:compile
[INFO] |  |  +- io.quarkus:quarkus-security-runtime-spi:jar:3.0.1.Final:compile
[INFO] |  |  +- io.quarkus:quarkus-credentials:jar:3.0.1.Final:compile
[INFO] |  |  +- io.smallrye.common:smallrye-common-vertx-context:jar:2.1.0:compile
[INFO] |  |  +- io.quarkus:quarkus-vertx-http-dev-console-runtime-spi:jar:3.0.1.Final:compile
[INFO] |  |  +- io.quarkus.security:quarkus-security:jar:2.0.2.Final:compile
[INFO] |  |  +- io.smallrye.reactive:smallrye-mutiny-vertx-web:jar:3.3.0:compile
[INFO] |  |  |  +- io.smallrye.reactive:smallrye-mutiny-vertx-web-common:jar:3.3.0:compile
[INFO] |  |  |  +- io.smallrye.reactive:smallrye-mutiny-vertx-auth-common:jar:3.3.0:compile
[INFO] |  |  |  +- io.smallrye.reactive:smallrye-mutiny-vertx-bridge-common:jar:3.3.0:compile
[INFO] |  |  |  \- io.smallrye.reactive:smallrye-mutiny-vertx-uri-template:jar:3.3.0:compile
[INFO] |  |  \- io.github.crac:org-crac:jar:0.1.3:compile
[INFO] |  \- io.quarkus:quarkus-jsonp:jar:3.0.1.Final:compile
[INFO] |     \- org.eclipse.parsson:parsson:jar:1.1.1:compile
[INFO] |        \- jakarta.json:jakarta.json-api:jar:2.1.1:compile
[INFO] +- io.quarkus:quarkus-kotlin:jar:3.0.1.Final:compile
[INFO] |  +- org.jetbrains:annotations:jar:24.0.1:compile
[INFO] |  +- org.jetbrains.kotlin:kotlin-stdlib:jar:1.8.10:compile
[INFO] |  |  \- org.jetbrains.kotlin:kotlin-stdlib-common:jar:1.8.10:compile
[INFO] |  +- org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:1.8.10:compile
[INFO] |  |  \- org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.8.10:compile
[INFO] |  +- org.jetbrains.kotlin:kotlin-reflect:jar:1.8.10:compile
[INFO] |  +- io.smallrye.reactive:mutiny-kotlin:jar:2.1.0:compile
[INFO] |  |  +- io.smallrye.reactive:mutiny:jar:2.1.0:compile
[INFO] |  |  \- org.jetbrains.kotlinx:kotlinx-coroutines-core:jar:1.6.4:compile
[INFO] |  +- io.smallrye:smallrye-fault-tolerance-kotlin:jar:6.2.2:compile
[INFO] |  \- org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:jar:1.6.4:compile
[INFO] |     \- org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:jar:1.6.4:compile
[INFO] +- io.quarkus:quarkus-kubernetes-client:jar:3.0.1.Final:compile
[INFO] |  +- io.quarkus:quarkus-kubernetes-client-internal:jar:3.0.1.Final:compile
[INFO] |  +- io.quarkus:quarkus-jackson:jar:3.0.1.Final:compile
[INFO] |  |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.14.2:compile
[INFO] |  |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.14.2:compile
[INFO] |  |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.14.2:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.14.2:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.14.2:compile
[INFO] |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.14.2:compile
[INFO] |  +- io.quarkus:quarkus-vertx:jar:3.0.1.Final:compile
[INFO] |  |  +- io.quarkus:quarkus-netty:jar:3.0.1.Final:compile
[INFO] |  |  |  +- io.netty:netty-codec:jar:4.1.90.Final:compile
[INFO] |  |  |  +- io.netty:netty-codec-http:jar:4.1.90.Final:compile
[INFO] |  |  |  +- io.netty:netty-codec-http2:jar:4.1.90.Final:compile
[INFO] |  |  |  +- io.netty:netty-handler:jar:4.1.90.Final:compile
[INFO] |  |  |  |  \- io.netty:netty-transport-native-unix-common:jar:4.1.90.Final:compile
[INFO] |  |  |  \- com.aayushatharva.brotli4j:brotli4j:jar:1.11.0:compile
[INFO] |  |  |     +- com.aayushatharva.brotli4j:service:jar:1.11.0:compile
[INFO] |  |  |     \- com.aayushatharva.brotli4j:native-linux-x86_64:jar:1.11.0:compile
[INFO] |  |  +- io.netty:netty-codec-haproxy:jar:4.1.90.Final:compile
[INFO] |  |  |  +- io.netty:netty-buffer:jar:4.1.90.Final:compile
[INFO] |  |  |  \- io.netty:netty-transport:jar:4.1.90.Final:compile
[INFO] |  |  +- io.smallrye.common:smallrye-common-annotation:jar:2.1.0:compile
[INFO] |  |  +- io.quarkus:quarkus-vertx-latebound-mdc-provider:jar:3.0.1.Final:compile
[INFO] |  |  \- io.smallrye:smallrye-fault-tolerance-vertx:jar:6.2.2:compile
[INFO] |  +- io.fabric8:kubernetes-client:jar:6.5.1:compile
[INFO] |  |  +- io.fabric8:kubernetes-client-api:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-core:jar:6.5.1:compile
[INFO] |  |  |  |  \- io.fabric8:kubernetes-model-common:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-gatewayapi:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-resource:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-rbac:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-admissionregistration:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-apps:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-autoscaling:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-apiextensions:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-batch:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-certificates:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-coordination:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-discovery:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-events:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-extensions:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-flowcontrol:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-networking:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-metrics:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-policy:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-scheduling:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-storageclass:jar:6.5.1:compile
[INFO] |  |  |  +- io.fabric8:kubernetes-model-node:jar:6.5.1:compile
[INFO] |  |  |  +- org.snakeyaml:snakeyaml-engine:jar:2.6:compile
[INFO] |  |  |  \- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.14.2:compile
[INFO] |  |  \- io.fabric8:zjsonpatch:jar:0.3.0:compile
[INFO] |  +- io.fabric8:kubernetes-httpclient-vertx:jar:6.5.1:compile
[INFO] |  |  +- io.vertx:vertx-core:jar:4.4.1:compile
[INFO] |  |  |  +- io.netty:netty-common:jar:4.1.90.Final:compile
[INFO] |  |  |  +- io.netty:netty-handler-proxy:jar:4.1.90.Final:compile
[INFO] |  |  |  |  \- io.netty:netty-codec-socks:jar:4.1.90.Final:compile
[INFO] |  |  |  +- io.netty:netty-resolver:jar:4.1.90.Final:compile
[INFO] |  |  |  \- io.netty:netty-resolver-dns:jar:4.1.90.Final:compile
[INFO] |  |  |     \- io.netty:netty-codec-dns:jar:4.1.90.Final:compile
[INFO] |  |  \- io.vertx:vertx-web-client:jar:4.4.1:compile
[INFO] |  |     \- io.vertx:vertx-uri-template:jar:4.4.1:compile
[INFO] |  +- org.apache.commons:commons-compress:jar:1.23.0:compile
[INFO] |  +- jakarta.annotation:jakarta.annotation-api:jar:2.1.1:compile
[INFO] |  +- jakarta.xml.bind:jakarta.xml.bind-api:jar:4.0.0:compile
[INFO] |  |  \- jakarta.activation:jakarta.activation-api:jar:2.1.1:compile
[INFO] |  \- io.smallrye.config:smallrye-config-source-yaml:jar:3.2.1:compile
[INFO] |     +- org.yaml:snakeyaml:jar:2.0:compile
[INFO] |     +- io.smallrye.config:smallrye-config-common:jar:3.2.1:compile
[INFO] |     |  \- io.smallrye.common:smallrye-common-classloader:jar:2.1.0:compile
[INFO] |     \- io.smallrye.common:smallrye-common-constraint:jar:2.1.0:compile
[INFO] +- io.quarkus:quarkus-oidc:jar:3.0.1.Final:compile
[INFO] |  +- io.quarkus:quarkus-security:jar:3.0.1.Final:compile
[INFO] |  |  \- jakarta.interceptor:jakarta.interceptor-api:jar:2.1.0:compile
[INFO] |  +- io.quarkus:quarkus-oidc-common:jar:3.0.1.Final:compile
[INFO] |  |  +- io.smallrye.reactive:smallrye-mutiny-vertx-web-client:jar:3.3.0:compile
[INFO] |  |  \- io.quarkus:quarkus-smallrye-jwt-build:jar:3.0.1.Final:compile
[INFO] |  |     \- io.smallrye:smallrye-jwt-build:jar:4.2.1:compile
[INFO] |  \- io.smallrye:smallrye-jwt:jar:4.2.1:compile
[INFO] |     +- org.eclipse.microprofile.jwt:microprofile-jwt-auth-api:jar:2.1:compile
[INFO] |     +- org.bitbucket.b_c:jose4j:jar:0.9.3:compile
[INFO] |     \- io.smallrye:smallrye-jwt-common:jar:4.2.1:compile
[INFO] +- io.quarkus:quarkus-config-yaml:jar:3.0.1.Final:compile
[INFO] |  \- org.eclipse.microprofile.config:microprofile-config-api:jar:3.0.3:compile
[INFO] +- io.quarkus:quarkus-arc:jar:3.0.1.Final:compile
[INFO] |  +- io.quarkus.arc:arc:jar:3.0.1.Final:compile
[INFO] |  |  \- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:compile
[INFO] |  \- org.eclipse.microprofile.context-propagation:microprofile-context-propagation-api:jar:1.3:compile
[INFO] +- io.quarkus:quarkus-junit5:jar:3.0.1.Final:test
[INFO] |  +- io.quarkus:quarkus-bootstrap-core:jar:3.0.1.Final:test
[INFO] |  |  +- io.quarkus:quarkus-bootstrap-app-model:jar:3.0.1.Final:test
[INFO] |  |  \- io.smallrye.common:smallrye-common-io:jar:2.1.0:compile
[INFO] |  +- org.eclipse.sisu:org.eclipse.sisu.inject:jar:0.3.5:test
[INFO] |  +- io.quarkus:quarkus-test-common:jar:3.0.1.Final:test
[INFO] |  |  +- io.quarkus:quarkus-core-deployment:jar:3.0.1.Final:test
[INFO] |  |  |  +- org.aesh:readline:jar:2.4:test
[INFO] |  |  |  |  \- org.fusesource.jansi:jansi:jar:2.4.0:test
[INFO] |  |  |  +- org.aesh:aesh:jar:2.7:test
[INFO] |  |  |  +- org.apache.commons:commons-lang3:jar:3.12.0:test
[INFO] |  |  |  +- io.quarkus.gizmo:gizmo:jar:1.6.0.Final:test
[INFO] |  |  |  |  \- org.ow2.asm:asm-util:jar:9.5:test
[INFO] |  |  |  |     \- org.ow2.asm:asm-analysis:jar:9.5:test
[INFO] |  |  |  +- org.ow2.asm:asm:jar:9.5:test
[INFO] |  |  |  +- org.ow2.asm:asm-commons:jar:9.5:test
[INFO] |  |  |  |  \- org.ow2.asm:asm-tree:jar:9.5:test
[INFO] |  |  |  +- io.quarkus:quarkus-class-change-agent:jar:3.0.1.Final:test
[INFO] |  |  |  +- io.quarkus:quarkus-devtools-utilities:jar:3.0.1.Final:test
[INFO] |  |  |  +- io.quarkus:quarkus-builder:jar:3.0.1.Final:test
[INFO] |  |  |  \- org.junit.platform:junit-platform-launcher:jar:1.9.2:test
[INFO] |  |  +- io.quarkus:quarkus-bootstrap-maven-resolver:jar:3.0.1.Final:test
[INFO] |  |  |  +- io.smallrye.beanbag:smallrye-beanbag-maven:jar:1.1.0:test
[INFO] |  |  |  |  +- io.smallrye.beanbag:smallrye-beanbag-sisu:jar:1.1.0:test
[INFO] |  |  |  |  |  \- io.smallrye.beanbag:smallrye-beanbag:jar:1.1.0:test
[INFO] |  |  |  |  +- javax.inject:javax.inject:jar:1:test
[INFO] |  |  |  |  +- org.apache.maven:maven-artifact:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven:maven-builder-support:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven:maven-model:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven:maven-model-builder:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven:maven-repository-metadata:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven:maven-settings:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven.resolver:maven-resolver-api:jar:1.9.7:test
[INFO] |  |  |  |  +- org.apache.maven.resolver:maven-resolver-impl:jar:1.9.7:test
[INFO] |  |  |  |  |  \- org.apache.maven.resolver:maven-resolver-named-locks:jar:1.9.7:test
[INFO] |  |  |  |  +- org.apache.maven.resolver:maven-resolver-spi:jar:1.9.7:test
[INFO] |  |  |  |  +- org.apache.maven.resolver:maven-resolver-util:jar:1.9.7:test
[INFO] |  |  |  |  +- org.apache.maven.wagon:wagon-provider-api:jar:3.5.3:test
[INFO] |  |  |  |  +- org.apache.maven.wagon:wagon-http-lightweight:jar:3.5.3:test
[INFO] |  |  |  |  +- org.apache.maven.wagon:wagon-http-shared:jar:3.5.3:test
[INFO] |  |  |  |  +- org.codehaus.plexus:plexus-interpolation:jar:1.26:test
[INFO] |  |  |  |  +- org.codehaus.plexus:plexus-utils:jar:3.5.1:test
[INFO] |  |  |  |  +- org.sonatype.plexus:plexus-cipher:jar:1.7:test
[INFO] |  |  |  |  \- org.sonatype.plexus:plexus-sec-dispatcher:jar:1.4:test
[INFO] |  |  |  +- org.apache.maven:maven-embedder:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven:maven-core:jar:3.9.1:test
[INFO] |  |  |  |  |  \- org.codehaus.plexus:plexus-component-annotations:jar:2.1.0:test
[INFO] |  |  |  |  +- org.apache.maven:maven-plugin-api:jar:3.9.1:test
[INFO] |  |  |  |  +- org.apache.maven.shared:maven-shared-utils:jar:3.3.4:test
[INFO] |  |  |  |  +- com.google.inject:guice:jar:5.1.0:test
[INFO] |  |  |  |  |  \- aopalliance:aopalliance:jar:1.0:test
[INFO] |  |  |  |  +- com.google.guava:guava:jar:31.1-jre:test
[INFO] |  |  |  |  +- com.google.guava:failureaccess:jar:1.0.1:test
[INFO] |  |  |  |  +- javax.annotation:javax.annotation-api:jar:1.3.2:test
[INFO] |  |  |  |  +- org.codehaus.plexus:plexus-classworlds:jar:2.6.0:test
[INFO] |  |  |  |  +- org.codehaus.plexus:plexus-sec-dispatcher:jar:2.0:test
[INFO] |  |  |  |  +- org.codehaus.plexus:plexus-cipher:jar:2.0:test
[INFO] |  |  |  |  \- commons-cli:commons-cli:jar:1.4:test
[INFO] |  |  |  +- org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.5:test
[INFO] |  |  |  +- org.apache.maven:maven-settings-builder:jar:3.9.1:test
[INFO] |  |  |  +- org.apache.maven:maven-resolver-provider:jar:3.9.1:test
[INFO] |  |  |  +- org.apache.maven.resolver:maven-resolver-connector-basic:jar:1.9.7:test
[INFO] |  |  |  +- org.apache.maven.resolver:maven-resolver-transport-wagon:jar:1.9.7:test
[INFO] |  |  |  +- org.apache.maven.wagon:wagon-http:jar:3.5.3:test
[INFO] |  |  |  \- org.apache.maven.wagon:wagon-file:jar:3.5.3:test
[INFO] |  |  +- io.quarkus:quarkus-bootstrap-gradle-resolver:jar:3.0.1.Final:test
[INFO] |  |  +- io.smallrye:jandex:jar:3.0.5:test
[INFO] |  |  \- commons-io:commons-io:jar:2.11.0:test
[INFO] |  +- io.quarkus:quarkus-junit5-properties:jar:3.0.1.Final:test
[INFO] |  +- org.junit.jupiter:junit-jupiter:jar:5.9.2:test
[INFO] |  |  +- org.junit.jupiter:junit-jupiter-api:jar:5.9.2:test
[INFO] |  |  |  +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] |  |  |  +- org.junit.platform:junit-platform-commons:jar:1.9.2:test
[INFO] |  |  |  \- org.apiguardian:apiguardian-api:jar:1.1.2:test
[INFO] |  |  +- org.junit.jupiter:junit-jupiter-params:jar:5.9.2:test
[INFO] |  |  \- org.junit.jupiter:junit-jupiter-engine:jar:5.9.2:test
[INFO] |  |     \- org.junit.platform:junit-platform-engine:jar:1.9.2:test
[INFO] |  \- com.thoughtworks.xstream:xstream:jar:1.4.20:test
[INFO] |     \- io.github.x-stream:mxparser:jar:1.2.2:test
[INFO] |        \- xmlpull:xmlpull:jar:1.1.3.1:test
[INFO] +- io.rest-assured:kotlin-extensions:jar:5.3.0:test
[INFO] |  \- io.rest-assured:rest-assured:jar:5.3.0:test
[INFO] |     +- org.apache.groovy:groovy:jar:4.0.6:test
[INFO] |     +- org.apache.groovy:groovy-xml:jar:4.0.6:test
[INFO] |     +- org.apache.httpcomponents:httpclient:jar:4.5.14:test
[INFO] |     |  +- org.apache.httpcomponents:httpcore:jar:4.4.16:test
[INFO] |     |  \- commons-codec:commons-codec:jar:1.15:test
[INFO] |     +- org.apache.httpcomponents:httpmime:jar:4.5.14:test
[INFO] |     +- org.hamcrest:hamcrest:jar:2.1:test
[INFO] |     +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:test
[INFO] |     +- io.rest-assured:json-path:jar:5.3.0:test
[INFO] |     |  +- org.apache.groovy:groovy-json:jar:4.0.6:test
[INFO] |     |  \- io.rest-assured:rest-assured-common:jar:5.3.0:test
[INFO] |     \- io.rest-assured:xml-path:jar:5.3.0:test
[INFO] \- com.cronutils:cron-utils:jar:9.2.1:compile
[INFO]    \- org.slf4j:slf4j-api:jar:2.0.6:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.562 s
[INFO] Finished at: 2023-04-27T08:36:44+02:00
[INFO] ------------------------------------------------------------------------
geoand commented 1 year ago

That's interesting as it looks like there is only one dependency bringing in an client implementation.

Would it be possible to attach a sample application so we can debug and find out what's going on?

Thanks

mschorsch commented 1 year ago

@geoand I'v added a reproducer in the description for the warning "There are multiple httpclient implementation in the classpath, choosing the first non-default implementation. ..."

Sgitario commented 1 year ago

This issue should have been fixed by https://github.com/quarkusio/quarkus/pull/31582. However, the fix does not work for DEV mode (I tried the reproducer running the JAR, and the warning message is gone). I guess this does not work for DEV mode.

@geoand Any ideas if there is a similar build item for DEV mode?

geoand commented 1 year ago

It should work in dev mode as well AFAIR.

I won't have time to look into it, but I don't think there is another build item

mschorsch commented 1 year ago

@Sgitario Do you think that the presence of multiple http clients ist the cause of the KubernetesClientException (not contained in the reproducer)? If not, then there is a additional issue in Quarkus 3.0.1.

Sgitario commented 1 year ago

I didn't hit into the KubernetesClientException issue either in DEV mode or using the JAR.

Can you try to reproduce it running the application using the JAR file instead of running it in DEV mode?

mschorsch commented 1 year ago

I didn't hit into the KubernetesClientException issue either in DEV mode or using the JAR.

Yes. It cant bei reproduced with my reproducer, only the warning. I guess the "wrong" http client is chosen and this leads to the KubernetesClientException.

Can you try to reproduce it running the application using the JAR file instead of running it in DEV mode?

I will try.

mschorsch commented 1 year ago

The warning disappeard in prod mode (running the jar).

But I continue to see the KubernetesClientException and now additionally io.vertx.core.VertxException: thread blocked even though the REST method do not have a reactive return type (Uni, Mutli, suspend method) and also the REST methods are not annotated with @Blocking. The REST methods return a TemplateInstance (Qute). Is Qute now executed on the IO threads by default?

Sgitario commented 1 year ago

But I continue to see the KubernetesClientException and now additionally io.vertx.core.VertxException: thread blocked even though the REST method do not have a reactive return type (Uni, Mutli, suspend method) and also the REST methods are not annotated with @Blocking. The REST methods return a TemplateInstance (Qute). Is Qute now executed on the IO threads by default?

This would definitely be another issue, different from this one. Please, report a new issue with the steps we can follow to reproduce it (I could not see this error), so we can help you better.

mschorsch commented 1 year ago

After annotating all REST methods with @Blocking, no exception is thrown and the application works as expected, but you're right, this is another issue. I will open a new issue.

metacosm commented 1 year ago

The exception should be unrelated to the warning, but I might be wrong. I will try to take a look at what's going on as well, but probably not before next Wednesday.

mschorsch commented 1 year ago

Results summarized so far:

  1. The warning "multiple httpclient implementation in the classpath" is only displayed in dev mode and not in prod mode. The warning can be reproduced with the reproducer I provided.
  2. The exception KubernetesClientException is thrown in both dev mode and prod mode. The exception is thrown when a Rest method returns a Qute TemplateInstance and in this or in one of the dependent methods the Kubernetes Client is used e.g. to find deployments. If the Rest method is annotated with @Blocking then no exception is thrown. Hard to say if this is a result of the warning. With the reproducer provided, this case cannot be recreated.
ggallen commented 1 year ago

@metacosm , I have a test case for #2 above. I am seeing the same behavior.

manusa commented 1 year ago

/cc @shawkins

The log warning should be fixed now.

Regarding the second problem (timeout), looks very similar to https://github.com/fabric8io/kubernetes-client/issues/5091#issuecomment-1531296315. Maybe caused by a deadlock and having only one IO thread available to process the HTTP response results.

mschorsch commented 1 year ago

The log warning should be fixed now.

I can confirm that the warning no longer appears in Quarkus 3.0.2.Final.

Regarding the second problem (timeout), looks very similar to https://github.com/fabric8io/kubernetes-client/issues/5091#issuecomment-1531296315. Maybe caused by a deadlock and having only one IO thread available to process the HTTP response results.

Seems likely

shawkins commented 1 year ago

The log warning should be fixed now.

Or at least it will be clearer what the situation is - the may still be a warning log, but it will indicate what all of the implementations are.

geoand commented 1 year ago

What's the status of this in Quarkus 3.2.0.CR1?

mschorsch commented 1 year ago

What's the status of this in Quarkus 3.2.0.CR1?

The second problem (timeout) still exists.

Has the kubernetes client been upgraded to 6.6.0 in Quarkus 3.2.0.CR1 (see https://github.com/fabric8io/kubernetes-client/issues/5091)?

geoand commented 1 year ago

Has the kubernetes client been upgraded to 6.6.0 in Quarkus 3.2.0.CR1 (see https://github.com/fabric8io/kubernetes-client/issues/5091)?

We have moved even further: https://mvnrepository.com/artifact/io.quarkus/quarkus-kubernetes-client/3.2.0.CR1

geoand commented 6 months ago

Is this still a problem with Quarkus 3.8?

mschorsch commented 6 months ago

I cannot reproduce it anymore.

geoand commented 6 months ago

Thanks a lot for checking!