kamon-io / Kamon

Distributed Tracing, Metrics and Context Propagation for applications running on the JVM
https://kamon.io
Other
1.41k stars 327 forks source link

Kamon-Jdbc doesn't support multiple hosts in connection url #1050

Open yarosman opened 3 years ago

yarosman commented 3 years ago

When we try to use play-anorm with hikari-cp and proxy-sql we retrieve errors

Kamon-Jdbc doesn't support multiple hosts in connection url

java.lang.ClassCastException: class com.sun.proxy.$Proxy60 cannot be cast to class kamon.instrumentation.jdbc.HasDatabaseTags (com.sun.proxy.$Proxy60 and kamon.instrumentation.jdbc.HasDatabaseTags are in unnamed module of loader 'app')
    at kamon.instrumentation.jdbc.DriverConnectAdvice$.exit(StatementInstrumentation.scala:133)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:220)
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:353)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
    at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71)
    at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:727)
    at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:713)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.base/java.lang.Thread.run(Unknown Source)
SimunKaracic commented 3 years ago

Can you give us the specific versions of libraries you are using?

yarosman commented 3 years ago

Can you give us the specific versions of libraries you are using?

"io.kamon"                   %% "kamon-jdbc"                     % "2.1.3",
"org.playframework.anorm"    %% "anorm"                          % "2.6.7",
"mysql"                      % "mysql-connector-java"            % "8.0.20",
yarosman commented 3 years ago

@SimunKaracic we thought that we found the main reason for these problem. If you use several IPs in connection url, instrumentation willn't work for FAILOVER_CONNECTION

mysql-connection

SimunKaracic commented 3 years ago

Nice debugging. Not sure how fast we'll fix this, but atleast we know where the problem is!

yarosman commented 11 months ago

any news ?

stewart-shawn commented 1 week ago

We're seeing something similar but only when kamon.enabled=false. If kamon.enabled=true, the app starts as expected

Caused by: java.lang.ClassCastException: class com.mysql.cj.jdbc.ConnectionImpl cannot be cast to class kamon.instrumentation.jdbc.HasDatabaseTags (com.mysql.cj.jdbc.ConnectionImpl and kamon.instrumentation.jdbc.HasDatabaseTags are in unnamed module of loader kamon.instrumentation.sbt.play.SbtKanelaRunnerPlay$SbtKanelaClassLoader @2f552aa2)

"io.kamon" %% "kamon-jdbc" % "2.7.5" "mysql" % "mysql-connector-java" % "8.0.25" "io.kamon" % "kanela-agent" % "1.0.18" addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.21")