-
Couldn't load subscription status.
- Fork 1k
indy instrumentation - leftovers migration #13074
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
Changes from 1 commit
c911faa
26e79f9
7f3ae3b
9183992
29c99dd
45ead47
ba30ba8
eb945b8
eba7e20
7a1cbc7
590f86e
a8cbb24
403caaa
506cc62
da1c13d
c4350d0
1d54a14
03aa810
2ed4e96
77a4f00
d9cd13f
5e2ef89
20856e3
a38763f
b77428c
bc785b9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| /* | ||
| * Copyright The OpenTelemetry Authors | ||
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
|
|
||
| package io.opentelemetry.javaagent.bootstrap; | ||
|
|
||
| import java.lang.instrument.IllegalClassFormatException; | ||
|
|
||
| /** Transformer for lambda bytecode */ | ||
| public interface LambdaTransformer { | ||
|
|
||
| /** | ||
| * Transforms lambda bytecode for instrumentation | ||
| * | ||
| * @param className class name in JVM format with slashes | ||
| * @param targetClass target class, must not be {@literal null} | ||
| * @param classfileBuffer target class bytecode | ||
| * @return instrumented lambda bytecode | ||
| * @throws IllegalClassFormatException if bytecode is invalid | ||
| */ | ||
| byte[] transform(String className, Class<?> targetClass, byte[] classfileBuffer) | ||
| throws IllegalClassFormatException; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| /* | ||
| * Copyright The OpenTelemetry Authors | ||
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
|
|
||
| package io.opentelemetry.javaagent.bootstrap; | ||
|
|
||
| /** | ||
| * Holder for {@link LambdaTransformer} used by the instrumentation. Calling transform on this | ||
| * transformer processes given bytes the same way as they would be processed during loading of the | ||
| * class. | ||
| */ | ||
| public final class LambdaTransformerHolder { | ||
|
|
||
| private static volatile LambdaTransformer lambdaTransformer; | ||
|
|
||
| /** | ||
| * get lambda transformer | ||
| * | ||
| * @return class transformer for defining lambdas | ||
| */ | ||
| public static LambdaTransformer setLambdaTransformer() { | ||
| return lambdaTransformer; | ||
| } | ||
|
|
||
| /** | ||
| * set lambda transformer | ||
| * | ||
| * @param transformer transformer | ||
| */ | ||
| public static void setLambdaTransformer(LambdaTransformer transformer) { | ||
| lambdaTransformer = transformer; | ||
| } | ||
|
|
||
| private LambdaTransformerHolder() {} | ||
| } | ||
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| /* | ||
| * Copyright The OpenTelemetry Authors | ||
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
|
|
||
| package io.opentelemetry.javaagent.tooling; | ||
|
|
||
| import io.opentelemetry.javaagent.bootstrap.LambdaTransformer; | ||
| import java.lang.instrument.ClassFileTransformer; | ||
| import java.lang.instrument.IllegalClassFormatException; | ||
|
|
||
| /** lambda transformer with java9 jpms module compatibility */ | ||
| public class Java9LambdaTransformer implements LambdaTransformer { | ||
|
|
||
| private final ClassFileTransformer delegate; | ||
|
|
||
| public Java9LambdaTransformer(ClassFileTransformer delegate) { | ||
| this.delegate = delegate; | ||
| } | ||
|
|
||
| @Override | ||
| public byte[] transform(String className, Class<?> targetClass, byte[] classfileBuffer) | ||
| throws IllegalClassFormatException { | ||
|
|
||
| // lambda instrumentation happens only when the lambda is defined, thus the classBeingRedefined | ||
SylvainJuge marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| // must be null otherwise we get a partial instrumentation, for example virtual fields are not | ||
| // properly applied | ||
| return delegate.transform( | ||
| targetClass.getModule(), | ||
| targetClass.getClassLoader(), | ||
| className, | ||
| null, | ||
| null, | ||
| classfileBuffer); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -21,9 +21,10 @@ | |
| import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; | ||
| import io.opentelemetry.javaagent.bootstrap.AgentClassLoader; | ||
| import io.opentelemetry.javaagent.bootstrap.BootstrapPackagePrefixesHolder; | ||
| import io.opentelemetry.javaagent.bootstrap.ClassFileTransformerHolder; | ||
| import io.opentelemetry.javaagent.bootstrap.DefineClassHelper; | ||
| import io.opentelemetry.javaagent.bootstrap.InstrumentedTaskClasses; | ||
| import io.opentelemetry.javaagent.bootstrap.LambdaTransformer; | ||
| import io.opentelemetry.javaagent.bootstrap.LambdaTransformerHolder; | ||
| import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizer; | ||
| import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder; | ||
| import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseMutator; | ||
|
|
@@ -200,14 +201,15 @@ private static void installBytebuddyAgent( | |
|
|
||
| agentBuilder = AgentBuilderUtil.optimize(agentBuilder); | ||
| ClassFileTransformer transformer = agentBuilder.installOn(inst); | ||
| LambdaTransformer lambdaTransformer; | ||
| if (JavaModule.isSupported()) { | ||
| // wrapping in a JPMS compliant implementation | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [for reviewer] wrapping at registration time helps to make the consumer transparently use it with java 8 API. |
||
| transformer = new Java9LambdaClassFileTransformer(transformer); | ||
| lambdaTransformer = new Java9LambdaTransformer(transformer); | ||
| } else { | ||
| // wrapping in a java 8 compliant transformer | ||
| transformer = new LambdaClassFileTransformer(transformer); | ||
| lambdaTransformer = new Java8LambdaTransformer(transformer); | ||
| } | ||
| ClassFileTransformerHolder.setLambdaClassFileTransformer(transformer); | ||
| LambdaTransformerHolder.setLambdaTransformer(lambdaTransformer); | ||
|
|
||
| instrumentationInstalled = true; | ||
|
|
||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.