Skip to content

Add back isMethod check in jedis instrumentation#19000

Merged
trask merged 1 commit into
open-telemetry:mainfrom
laurit:jedis-method
Jun 15, 2026
Merged

Add back isMethod check in jedis instrumentation#19000
trask merged 1 commit into
open-telemetry:mainfrom
laurit:jedis-method

Conversation

@laurit

@laurit laurit commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

isMethod got removed by automated review agent. Here instrumenting of constructors is not desired and also fails with

    [otel.javaagent 2026-06-15 11:56:57:707 +0000] [Test worker] ERROR io.opentelemetry.javaagent.testing.bytebuddy.TestAgentListener - Unexpected instrumentation error when instrumenting redis.clients.jedis.BinaryJedis on sun.misc.Launcher$AppClassLoader@df9a5aa0
    java.lang.IllegalStateException: Cannot catch exception during constructor call for public redis.clients.jedis.BinaryJedis()
    	at net.bytebuddy.asm.Advice.doWrap(Advice.java:632)
    	at net.bytebuddy.asm.Advice.wrap(Advice.java:587)
    	at net.bytebuddy.asm.AsmVisitorWrapper$ForDeclaredMethods$Entry.wrap(AsmVisitorWrapper.java:580)
    	at net.bytebuddy.asm.AsmVisitorWrapper$ForDeclaredMethods$DispatchingVisitor.visitMethod(AsmVisitorWrapper.java:662)
    	at org.objectweb.asm.ClassVisitor.visitMethod(ClassVisitor.java:384)
    	at net.bytebuddy.utility.visitor.MetadataAwareClassVisitor.onVisitMethod(MetadataAwareClassVisitor.java:429)
    	at net.bytebuddy.utility.visitor.MetadataAwareClassVisitor.visitMethod(MetadataAwareClassVisitor.java:414)
    	at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1354)
    	at org.objectweb.asm.ClassReader.accept(ClassReader.java:745)
    	at net.bytebuddy.utility.AsmClassReader$ForAsm.accept(AsmClassReader.java:290)
    	at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(TypeWriter.java:4199)
    	at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:2281)
    	at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$UsingTypeWriter.make(DynamicType.java:4889)
    	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.doTransform(AgentBuilder.java:12824)
    	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:12759)
    	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.access$1800(AgentBuilder.java:12468)
    	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$LegacyVmDispatcher.run(AgentBuilder.java:13168)
    	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$LegacyVmDispatcher.run(AgentBuilder.java:13106)
    	at java.security.AccessController.doPrivileged(AccessController.java:725)
    	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.doPrivileged(AgentBuilder.java)
    	at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:12668)
    	at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
    	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:443)
    	at java.lang.ClassLoader.defineClassImpl(Native Method)

This stack trace doesn't seem to make tests fail.

Copilot AI review requested due to automatic review settings June 15, 2026 13:21
@laurit laurit requested a review from a team as a code owner June 15, 2026 13:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR restores Byte Buddy’s isMethod() matcher in Jedis instrumentations to ensure only actual methods (not constructors) are instrumented, preventing constructor-advice application that can trigger Byte Buddy instrumentation errors (as seen for BinaryJedis()).

Changes:

  • Add isMethod() to the public, non-static matcher used for Jedis advice application.
  • Add the corresponding ElementMatchers.isMethod static import across Jedis 1.4 / 3.0 / 4.0 instrumentations.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
instrumentation/jedis/jedis-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/JedisInstrumentation.java Restricts advice application to methods only (excludes constructors) for Jedis 4.x types.
instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisInstrumentation.java Prevents constructor instrumentation for Jedis 3.x types (including BinaryJedis).
instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisInstrumentation.java Aligns Jedis 1.4 instrumentation matching to methods-only to avoid constructor advice.

@trask trask merged commit d7e2947 into open-telemetry:main Jun 15, 2026
95 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants