Skip to content

Commit d94a530

Browse files
authored
Upgrade otel 1 10 (#357)
* ⬆️ upgrade otel * ♻️ update servlet-common packaging * ♻️ update HttpStatusConverter package location' * ♻️ update TestOpenTelemetryInstaller to be an AgentListener * ➕ add new deps to the testing bootstrap * ➕ add logging exporter to classpath explicitly for tests * ♻️ fix initialization in instrumentation tests * ➕ add servlet-common bootstrap to test runtime for servlet projects * ♻️ refactor MuzzlePlugin to handle refactor of MuzzleGradlePluginUtil to kotlin companion object' * 🐛 fix muzzle check for instrumentation modules that need the servlet-common bootstrap * ⬆️ upgrade byte buddy * 🐛 fix expected metric name for otlp exporter exported' * 🐛 disable assertions failing due to upstream bug
1 parent 7cb15a9 commit d94a530

File tree

20 files changed

+144
-101
lines changed

20 files changed

+144
-101
lines changed

build.gradle.kts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ subprojects {
3434
extra.set("versions", mapOf(
3535
// when updating these values, some values must also be updated in buildSrc as this map
3636
// cannot be accessed there
37-
"opentelemetry" to "1.9.1",
37+
"opentelemetry" to "1.10.0",
3838
"opentelemetry_proto" to "0.11.0-alpha",
39-
"opentelemetry_java_agent" to "1.9.2-alpha",
40-
"opentelemetry_java_agent_all" to "1.9.2",
41-
"opentelemetry_gradle_plugin" to "1.9.2-alpha",
42-
"byte_buddy" to "1.11.22",
39+
"opentelemetry_java_agent" to "1.10.0-alpha",
40+
"opentelemetry_java_agent_all" to "1.10.0",
41+
"opentelemetry_gradle_plugin" to "1.10.0-alpha",
42+
"byte_buddy" to "1.12.6",
4343
"slf4j" to "1.7.30"
4444
))
4545

buildSrc/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ repositories {
2727
dependencies {
2828
implementation(gradleApi())
2929
implementation(localGroovy())
30-
val otelInstrumentationVersion = "1.9.2-alpha"
30+
val otelInstrumentationVersion = "1.10.0-alpha"
3131
implementation("io.opentelemetry.javaagent:opentelemetry-muzzle:$otelInstrumentationVersion")
3232
implementation("io.opentelemetry.instrumentation.muzzle-generation:io.opentelemetry.instrumentation.muzzle-generation.gradle.plugin:$otelInstrumentationVersion")
3333
implementation("io.opentelemetry.instrumentation.muzzle-check:io.opentelemetry.instrumentation.muzzle-check.gradle.plugin:$otelInstrumentationVersion")
@@ -40,10 +40,10 @@ dependencies {
4040
implementation("org.ow2.asm", "asm", "9.1")
4141
implementation("org.ow2.asm", "asm-tree", "9.1")
4242
implementation("org.apache.httpcomponents:httpclient:4.5.10")
43-
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.11.22") {
43+
implementation("net.bytebuddy:byte-buddy-gradle-plugin:1.12.6") {
4444
exclude(group = "net.bytebuddy", module = "byte-buddy")
4545
}
46-
implementation("net.bytebuddy:byte-buddy-dep:1.11.22")
46+
implementation("net.bytebuddy:byte-buddy-dep:1.12.6")
4747

4848
testImplementation("org.spockframework", "spock-core", "1.3-groovy-2.5")
4949
testImplementation("org.codehaus.groovy", "groovy-all", "2.5.8")

buildSrc/src/main/groovy/MuzzlePlugin.groovy

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
*/
55

66

7+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
8+
import io.opentelemetry.javaagent.muzzle.matcher.MuzzleGradlePluginUtil
79
import org.gradle.api.file.FileCollection
10+
import org.gradle.api.file.RegularFile
11+
import org.gradle.api.tasks.bundling.AbstractArchiveTask
812

9-
import java.lang.reflect.Method
10-
import java.security.SecureClassLoader
1113
import java.util.concurrent.atomic.AtomicReference
1214
import java.util.function.Predicate
1315
import java.util.regex.Pattern
@@ -72,6 +74,13 @@ class MuzzlePlugin implements Plugin<Project> {
7274
// compileMuzzle compiles all projects required to run muzzle validation.
7375
// Not adding group and description to keep this task from showing in `gradle tasks`.
7476
def compileMuzzle = project.task('compileMuzzle')
77+
def muzzleBootstrap = project.configurations.create("muzzleBootstrap")
78+
muzzleBootstrap.setCanBeConsumed(false)
79+
muzzleBootstrap.setCanBeResolved(true)
80+
def shadowMuzzleBootstrap = project.tasks.create("shadowMuzzleBootstrap", ShadowJar.class) {
81+
configurations = [muzzleBootstrap]
82+
archiveFileName.set("bootstrap-for-muzzle-check.jar")
83+
}
7584
def muzzle = project.task('muzzle') {
7685
group = 'Muzzle'
7786
description = "Run instrumentation muzzle on compile time dependencies"
@@ -80,21 +89,18 @@ class MuzzlePlugin implements Plugin<Project> {
8089
project.getLogger().info('No muzzle pass directives configured. Asserting pass against instrumentation compile-time dependencies')
8190
ClassLoader userCL = createCompileDepsClassLoader(project, bootstrapProject)
8291
ClassLoader instrumentationCL = createInstrumentationClassloader(project, toolingProject)
83-
Method assertionMethod = instrumentationCL.loadClass('io.opentelemetry.javaagent.muzzle.matcher.MuzzleGradlePluginUtil')
84-
.getMethod('assertInstrumentationMuzzled', ClassLoader.class, ClassLoader.class, boolean.class)
85-
assertionMethod.invoke(null, instrumentationCL, userCL, true)
92+
MuzzleGradlePluginUtil.@Companion.assertInstrumentationMuzzled(instrumentationCL, userCL, true)
8693
}
8794
println "Muzzle executing for $project"
8895
}
96+
dependsOn(shadowMuzzleBootstrap)
8997
}
9098
def printReferences = project.task('printMuzzleReferences') {
9199
group = 'Muzzle'
92100
description = "Print references created by instrumentation muzzle"
93101
doLast {
94102
ClassLoader instrumentationCL = createInstrumentationClassloader(project, toolingProject)
95-
Method assertionMethod = instrumentationCL.loadClass('io.opentelemetry.javaagent.muzzle.matcher.MuzzleGradlePluginUtil')
96-
.getMethod('printMuzzleReferences', ClassLoader.class)
97-
assertionMethod.invoke(null, instrumentationCL)
103+
MuzzleGradlePluginUtil.@Companion.printMuzzleReferences(instrumentationCL)
98104
}
99105
}
100106
project.tasks.compileMuzzle.dependsOn(bootstrapProject.tasks.compileJava)
@@ -201,7 +207,7 @@ class MuzzlePlugin implements Plugin<Project> {
201207
/**
202208
* Create a classloader with dependencies for a single muzzle task.
203209
*/
204-
private static ClassLoader createClassLoaderForTask(Project project, Project bootstrapProject, String muzzleTaskName) {
210+
private static ClassLoader createClassLoaderForTask(Project project, Project bootstrapProject, String muzzleTaskName, RegularFile shadowMuzzleArchiveFile) {
205211
List<URL> userUrls = new ArrayList<>()
206212

207213
project.getLogger().info("Creating task classpath")
@@ -214,6 +220,9 @@ class MuzzlePlugin implements Plugin<Project> {
214220
project.getLogger().info("-- Added to instrumentation bootstrap classpath: $f")
215221
userUrls.add(f.toURI().toURL())
216222
}
223+
if (shadowMuzzleArchiveFile != null) {
224+
userUrls.add(shadowMuzzleArchiveFile.asFile.toURI().toURL())
225+
}
217226
return new URLClassLoader(userUrls.toArray(new URL[0]), ClassLoader.platformClassLoader)
218227
}
219228

@@ -377,12 +386,14 @@ class MuzzlePlugin implements Plugin<Project> {
377386
ClassLoader instrumentationCL = createInstrumentationClassloader(instrumentationProject, toolingProject)
378387
def ccl = Thread.currentThread().contextClassLoader
379388
Thread.currentThread().contextClassLoader = instrumentationCL
380-
ClassLoader userCL = createClassLoaderForTask(instrumentationProject, bootstrapProject, taskName)
389+
def shadowMuzzleTask = project.tasks.findByName("shadowMuzzleBootstrap") as AbstractArchiveTask
390+
RegularFile shadowMuzzleArchiveFile
391+
if (shadowMuzzleTask != null) {
392+
shadowMuzzleArchiveFile = shadowMuzzleTask.getArchiveFile().get()
393+
}
394+
ClassLoader userCL = createClassLoaderForTask(instrumentationProject, bootstrapProject, taskName, shadowMuzzleArchiveFile)
381395
try {
382-
// find all instrumenters, get muzzle, and assert
383-
Method assertionMethod = instrumentationCL.loadClass('io.opentelemetry.javaagent.muzzle.matcher.MuzzleGradlePluginUtil')
384-
.getMethod('assertInstrumentationMuzzled', ClassLoader.class, ClassLoader.class, boolean.class)
385-
assertionMethod.invoke(null, instrumentationCL, userCL, muzzleDirective.assertPass)
396+
MuzzleGradlePluginUtil.@Companion.assertInstrumentationMuzzled(instrumentationCL, userCL, muzzleDirective.assertPass)
386397
} finally {
387398
Thread.currentThread().contextClassLoader = ccl
388399
}

instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/client/HttpClientResponseTracingHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import io.opentelemetry.api.trace.Span;
2929
import io.opentelemetry.context.Context;
3030
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter;
31+
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.client.NettyClientSingletons;

instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_0/server/HttpServerResponseTracingHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import io.opentelemetry.api.trace.Span;
2929
import io.opentelemetry.context.Context;
3030
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter;
31+
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_0.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.NettyServerSingletons;

instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/client/HttpClientResponseTracingHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import io.opentelemetry.api.trace.Span;
2929
import io.opentelemetry.context.Context;
3030
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter;
31+
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.client.NettyClientSingletons;

instrumentation/netty/netty-4.1/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/netty/v4_1/server/HttpServerResponseTracingHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import io.opentelemetry.api.trace.Span;
2929
import io.opentelemetry.context.Context;
3030
import io.opentelemetry.context.Scope;
31-
import io.opentelemetry.instrumentation.api.tracer.HttpStatusConverter;
31+
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpStatusConverter;
3232
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.AttributeKeys;
3333
import io.opentelemetry.javaagent.instrumentation.hypertrace.netty.v4_1.DataCaptureUtils;
3434
import io.opentelemetry.javaagent.instrumentation.netty.v4_1.server.NettyServerSingletons;

instrumentation/servlet/servlet-3.0/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ afterEvaluate{
3030
val versions: Map<String, String> by extra
3131

3232
dependencies {
33-
implementation("io.opentelemetry.instrumentation:opentelemetry-servlet-common:${versions["opentelemetry_java_agent"]}")
33+
implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common:${versions["opentelemetry_java_agent"]}")
3434
implementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}") // Servlet3Accessor
3535
testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}")
3636
testImplementation("io.opentelemetry.javaagent:opentelemetry-muzzle:${versions["opentelemetry_java_agent"]}")
3737
compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-bootstrap:${versions["opentelemetry_java_agent"]}")
3838
compileOnly("javax.servlet:javax.servlet-api:3.1.0")
39+
testRuntimeOnly("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common-bootstrap:${versions["opentelemetry_java_agent"]}")
40+
muzzleBootstrap("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common-bootstrap:${versions["opentelemetry_java_agent"]}")
3941

4042
testImplementation(project(":instrumentation:servlet:servlet-rw"))
4143
testImplementation(testFixtures(project(":testing-common")) as ProjectDependency) {

instrumentation/servlet/servlet-3.0/src/main/java/io/opentelemetry/javaagent/instrumentation/hypertrace/servlet/v3_0/nowrapping/async/BodyCaptureAsyncListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
import io.opentelemetry.api.trace.Span;
2020
import io.opentelemetry.instrumentation.api.field.VirtualField;
21-
import io.opentelemetry.instrumentation.servlet.ServletAsyncListener;
2221
import io.opentelemetry.javaagent.instrumentation.hypertrace.servlet.v3_0.nowrapping.Utils;
22+
import io.opentelemetry.javaagent.instrumentation.servlet.ServletAsyncListener;
2323
import io.opentelemetry.javaagent.instrumentation.servlet.v3_0.Servlet3Singletons;
2424
import java.io.BufferedReader;
2525
import java.io.PrintWriter;

instrumentation/spark-2.3/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
plugins {
23
`java-library`
34
id("net.bytebuddy.byte-buddy")
@@ -30,6 +31,8 @@ dependencies {
3031
testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-spark-2.3:${versions["opentelemetry_java_agent"]}")
3132
testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-3.0:${versions["opentelemetry_java_agent"]}")
3233
testImplementation("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-jetty-8.0:${versions["opentelemetry_java_agent"]}")
34+
testRuntimeOnly("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common-bootstrap:${versions["opentelemetry_java_agent"]}")
35+
muzzleBootstrap("io.opentelemetry.javaagent.instrumentation:opentelemetry-javaagent-servlet-common-bootstrap:${versions["opentelemetry_java_agent"]}")
3336

3437
compileOnly("com.sparkjava:spark-core:2.3")
3538

0 commit comments

Comments
 (0)