From 26355485d924142dcf9cc47d4f0444f02c2f3d37 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 27 Jan 2020 11:11:05 -0800 Subject: [PATCH] Move OpenTelemetry SDK out of the bootstrap loader (#86) * Move OpenTelemetry SDK out of bootstrap loader * Improve shading After this change, the shaded opentelemetry-sdk is only used by test modules, so it doesn't need to be published. --- agent-bootstrap/agent-bootstrap.gradle | 1 - agent-tooling/agent-tooling.gradle | 3 ++- instrumentation/instrumentation.gradle | 15 +++++++++++---- java-agent/java-agent.gradle | 3 --- .../opentelemetry-sdk-shaded-for-testing.gradle | 10 +++++++++- settings.gradle | 2 +- testing/testing.gradle | 7 +++++-- 7 files changed, 28 insertions(+), 13 deletions(-) rename opentelemetry-sdk/opentelemetry-sdk.gradle => opentelemetry-sdk-shaded-for-testing/opentelemetry-sdk-shaded-for-testing.gradle (61%) diff --git a/agent-bootstrap/agent-bootstrap.gradle b/agent-bootstrap/agent-bootstrap.gradle index 254b5e9c77..4ccdeac2a4 100644 --- a/agent-bootstrap/agent-bootstrap.gradle +++ b/agent-bootstrap/agent-bootstrap.gradle @@ -8,7 +8,6 @@ apply from: "${rootDir}/gradle/java.gradle" dependencies { compile project(':trace-api') compile deps.opentelemetryApi - compile(project(path: ':opentelemetry-sdk', configuration: 'shadow')) compile deps.slf4j compile group: 'org.slf4j', name: 'slf4j-simple', version: versions.slf4j // ^ Generally a bad idea for libraries, but we're shadowing. diff --git a/agent-tooling/agent-tooling.gradle b/agent-tooling/agent-tooling.gradle index 41ba82cc7f..2756b5fc7f 100644 --- a/agent-tooling/agent-tooling.gradle +++ b/agent-tooling/agent-tooling.gradle @@ -18,7 +18,8 @@ dependencies { exclude group: 'org.slf4j', module: 'slf4j-simple' } compile deps.opentelemetryApi - compile(project(path: ':opentelemetry-sdk', configuration: 'shadow')) + compile deps.opentelemetrySdk + compile group: 'com.blogspot.mydailyjava', name: 'weak-lock-free', version: '0.15' compile deps.bytebuddy compile deps.bytebuddyagent diff --git a/instrumentation/instrumentation.gradle b/instrumentation/instrumentation.gradle index 5bb653029f..ee7118c61e 100644 --- a/instrumentation/instrumentation.gradle +++ b/instrumentation/instrumentation.gradle @@ -46,11 +46,19 @@ subprojects { Project subProj -> dependencies { // Apply common dependencies for instrumentation. compile project(':trace-api') - compile project(':agent-tooling') + compile(project(':agent-tooling')) { + // OpenTelemetry SDK is not needed for compilation, and :opentelemetry-sdk-shaded-for-testing + // is brought in for tests by project(:testing) below + exclude group: 'io.opentelemetry', module: 'opentelemetry-sdk' + } compile deps.bytebuddy if (jdkCompile) { "$jdkCompile" project(':trace-api') - "$jdkCompile" project(':agent-tooling') + "$jdkCompile"(project(':agent-tooling')) { + // OpenTelemetry SDK is not needed for compilation, and :opentelemetry-sdk-shaded-for-testing + // is brought in for tests by project(:testing) below + exclude group: 'io.opentelemetry', module: 'opentelemetry-sdk' + } "$jdkCompile" deps.bytebuddy } annotationProcessor deps.autoservice @@ -80,7 +88,7 @@ configurations { // exclude bootstrap dependencies from shadowJar runtime.exclude module: deps.slf4j runtime.exclude group: 'org.slf4j' - runtime.exclude group: 'io.opentelemetry' + runtime.exclude group: 'io.opentelemetry', module: 'opentelemetry-api' } shadowJar { @@ -101,7 +109,6 @@ shadowJar { dependencies { exclude(project(':agent-bootstrap')) exclude(project(':trace-api')) - exclude(project(':opentelemetry-sdk')) } // relocate OpenTelemetry API usage diff --git a/java-agent/java-agent.gradle b/java-agent/java-agent.gradle index 69a7374bc6..866a198804 100644 --- a/java-agent/java-agent.gradle +++ b/java-agent/java-agent.gradle @@ -63,9 +63,6 @@ shadowJar { // relocate OpenTelemetry API dependency relocate "io.grpc", "io.opentelemetry.auto.shaded.io.grpc" - - // relocate OpenTelemetry SDK - relocate "io.opentelemetry.sdk", "io.opentelemetry.auto.shaded.io.opentelemetry.sdk" } dependencies { diff --git a/opentelemetry-sdk/opentelemetry-sdk.gradle b/opentelemetry-sdk-shaded-for-testing/opentelemetry-sdk-shaded-for-testing.gradle similarity index 61% rename from opentelemetry-sdk/opentelemetry-sdk.gradle rename to opentelemetry-sdk-shaded-for-testing/opentelemetry-sdk-shaded-for-testing.gradle index 89799e702f..5b91d9060d 100644 --- a/opentelemetry-sdk/opentelemetry-sdk.gradle +++ b/opentelemetry-sdk-shaded-for-testing/opentelemetry-sdk-shaded-for-testing.gradle @@ -9,8 +9,16 @@ dependencies { } // OpenTelemetry SDK with shaded dependencies so that they do not conflict with other libraries (in particular guava) -// when running various instrumentation tests +// when running various instrumentation tests (e.g. datastax-cassandra) +// TODO this is not ideal because tests are run using this partially shaded OpenTelemetry SDK, while the agent ends up +// running with unshaded OpenTelemetry SDK (because its in isolated class loader at that point) +// build agent-tooling-and-instrumentation.isolated and use that in tests, then wouldn't need to shade guava, etc shadowJar { + + dependencies { + exclude(dependency('io.opentelemetry:opentelemetry-api')) + } + mergeServiceFiles() relocate "com.google", "io.opentelemetry.auto.shaded.com.google" diff --git a/settings.gradle b/settings.gradle index e864f8ff62..ea314acd6b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -23,7 +23,7 @@ include ':trace-api' // agent projects include ':java-agent' -include ':opentelemetry-sdk' +include ':opentelemetry-sdk-shaded-for-testing' include ':agent-bootstrap' include ':agent-tooling' include ':load-generator' diff --git a/testing/testing.gradle b/testing/testing.gradle index 4c85009f6f..bf29812654 100644 --- a/testing/testing.gradle +++ b/testing/testing.gradle @@ -15,7 +15,7 @@ excludedClassesCoverage += [ dependencies { compile deps.opentelemetryApi - compile(project(path: ':opentelemetry-sdk', configuration: 'shadow')) + compile(project(path: ':opentelemetry-sdk-shaded-for-testing', configuration: 'shadow')) compile deps.bytebuddy compile deps.bytebuddyagent compile deps.slf4j @@ -27,7 +27,10 @@ dependencies { compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '8.0.0.v20110901' - compile project(':agent-tooling') + compile(project(':agent-tooling')) { + // including :opentelemetry-sdk-shaded-for-testing above instead + exclude group: 'io.opentelemetry', module: 'opentelemetry-sdk' + } compile project(':utils:test-utils') annotationProcessor deps.autoservice