From 2f1b802aad04ed436f191a9a7d04f738edbc1702 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 5 Mar 2020 14:18:45 -0800 Subject: [PATCH] Rename mongo modules (#206) * Rename mongo modules * Update tracer name --- .../mongo-3.1.gradle} | 8 ++++-- .../mongo/MongoClientInstrumentation.java | 0 .../src/test/groovy/MongoClientTest.groovy | 0 .../mongo-3.7.gradle} | 8 ++++-- .../v3_7/MongoClientInstrumentation.java | 0 .../src/test/groovy/MongoClientTest.groovy | 0 .../mongo-async-3.3.gradle} | 8 ++++-- .../MongoAsyncClientInstrumentation.java | 0 .../test/groovy/MongoAsyncClientTest.groovy | 0 .../mongo/mongo-common/mongo-common.gradle | 7 +++++ .../mongo/MongoClientDecorator.java | 3 ++- .../mongo/TracingCommandListener.java | 0 .../src/test/groovy/MongoBaseTest.groovy | 12 ++++++++- .../src/test/java/NoOpInstrumentation.java | 0 instrumentation/mongo/mongo.gradle | 26 ------------------- settings.gradle | 12 ++++++--- 16 files changed, 46 insertions(+), 38 deletions(-) rename instrumentation/mongo/{driver-3.1/driver-3.1.gradle => mongo-3.1/mongo-3.1.gradle} (64%) rename instrumentation/mongo/{driver-3.1 => mongo-3.1}/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientInstrumentation.java (100%) rename instrumentation/mongo/{driver-3.1 => mongo-3.1}/src/test/groovy/MongoClientTest.groovy (100%) rename instrumentation/mongo/{driver-3.7/driver-3.7.gradle => mongo-3.7/mongo-3.7.gradle} (66%) rename instrumentation/mongo/{driver-3.7 => mongo-3.7}/src/main/java/io/opentelemetry/auto/instrumentation/mongo/v3_7/MongoClientInstrumentation.java (100%) rename instrumentation/mongo/{driver-3.7 => mongo-3.7}/src/test/groovy/MongoClientTest.groovy (100%) rename instrumentation/mongo/{driver-async-3.3/driver-async-3.3.gradle => mongo-async-3.3/mongo-async-3.3.gradle} (71%) rename instrumentation/mongo/{driver-async-3.3 => mongo-async-3.3}/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoAsyncClientInstrumentation.java (100%) rename instrumentation/mongo/{driver-async-3.3 => mongo-async-3.3}/src/test/groovy/MongoAsyncClientTest.groovy (100%) create mode 100644 instrumentation/mongo/mongo-common/mongo-common.gradle rename instrumentation/mongo/{ => mongo-common}/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientDecorator.java (97%) rename instrumentation/mongo/{ => mongo-common}/src/main/java/io/opentelemetry/auto/instrumentation/mongo/TracingCommandListener.java (100%) rename instrumentation/mongo/{ => mongo-common}/src/test/groovy/MongoBaseTest.groovy (81%) rename instrumentation/mongo/{ => mongo-common}/src/test/java/NoOpInstrumentation.java (100%) delete mode 100644 instrumentation/mongo/mongo.gradle diff --git a/instrumentation/mongo/driver-3.1/driver-3.1.gradle b/instrumentation/mongo/mongo-3.1/mongo-3.1.gradle similarity index 64% rename from instrumentation/mongo/driver-3.1/driver-3.1.gradle rename to instrumentation/mongo/mongo-3.1/mongo-3.1.gradle index f2c8aa4c4b..5398781318 100644 --- a/instrumentation/mongo/driver-3.1/driver-3.1.gradle +++ b/instrumentation/mongo/mongo-3.1/mongo-3.1.gradle @@ -17,12 +17,16 @@ testSets { } } +// this is needed to force mongo-common test classes to be built first +// so that the dependency below on its test sourceSet will work +compileTestJava.dependsOn tasks.getByPath(':instrumentation:mongo-common:testClasses') + dependencies { - compile(project(':instrumentation:mongo')) + compile(project(':instrumentation:mongo-common')) compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.1.0' - testCompile project(':instrumentation:mongo').sourceSets.test.output + testCompile project(':instrumentation:mongo-common').sourceSets.test.output testCompile group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '1.50.5' testCompile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.1.0' diff --git a/instrumentation/mongo/driver-3.1/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientInstrumentation.java b/instrumentation/mongo/mongo-3.1/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientInstrumentation.java similarity index 100% rename from instrumentation/mongo/driver-3.1/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientInstrumentation.java rename to instrumentation/mongo/mongo-3.1/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientInstrumentation.java diff --git a/instrumentation/mongo/driver-3.1/src/test/groovy/MongoClientTest.groovy b/instrumentation/mongo/mongo-3.1/src/test/groovy/MongoClientTest.groovy similarity index 100% rename from instrumentation/mongo/driver-3.1/src/test/groovy/MongoClientTest.groovy rename to instrumentation/mongo/mongo-3.1/src/test/groovy/MongoClientTest.groovy diff --git a/instrumentation/mongo/driver-3.7/driver-3.7.gradle b/instrumentation/mongo/mongo-3.7/mongo-3.7.gradle similarity index 66% rename from instrumentation/mongo/driver-3.7/driver-3.7.gradle rename to instrumentation/mongo/mongo-3.7/mongo-3.7.gradle index b29739da86..797a4d99db 100644 --- a/instrumentation/mongo/driver-3.7/driver-3.7.gradle +++ b/instrumentation/mongo/mongo-3.7/mongo-3.7.gradle @@ -17,13 +17,17 @@ testSets { } } +// this is needed to force mongo-common test classes to be built first +// so that the dependency below on its test sourceSet will work +compileTestJava.dependsOn tasks.getByPath(':instrumentation:mongo-common:testClasses') + dependencies { - compile(project(':instrumentation:mongo')) + compile(project(':instrumentation:mongo-common')) // a couple of test attribute verifications don't pass until 3.8.0 compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.8.0' - testCompile project(':instrumentation:mongo').sourceSets.test.output + testCompile project(':instrumentation:mongo-common').sourceSets.test.output testCompile group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '1.50.5' testCompile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.8.0' diff --git a/instrumentation/mongo/driver-3.7/src/main/java/io/opentelemetry/auto/instrumentation/mongo/v3_7/MongoClientInstrumentation.java b/instrumentation/mongo/mongo-3.7/src/main/java/io/opentelemetry/auto/instrumentation/mongo/v3_7/MongoClientInstrumentation.java similarity index 100% rename from instrumentation/mongo/driver-3.7/src/main/java/io/opentelemetry/auto/instrumentation/mongo/v3_7/MongoClientInstrumentation.java rename to instrumentation/mongo/mongo-3.7/src/main/java/io/opentelemetry/auto/instrumentation/mongo/v3_7/MongoClientInstrumentation.java diff --git a/instrumentation/mongo/driver-3.7/src/test/groovy/MongoClientTest.groovy b/instrumentation/mongo/mongo-3.7/src/test/groovy/MongoClientTest.groovy similarity index 100% rename from instrumentation/mongo/driver-3.7/src/test/groovy/MongoClientTest.groovy rename to instrumentation/mongo/mongo-3.7/src/test/groovy/MongoClientTest.groovy diff --git a/instrumentation/mongo/driver-async-3.3/driver-async-3.3.gradle b/instrumentation/mongo/mongo-async-3.3/mongo-async-3.3.gradle similarity index 71% rename from instrumentation/mongo/driver-async-3.3/driver-async-3.3.gradle rename to instrumentation/mongo/mongo-async-3.3/mongo-async-3.3.gradle index 499a9610c4..2ab6bc0a4d 100644 --- a/instrumentation/mongo/driver-async-3.3/driver-async-3.3.gradle +++ b/instrumentation/mongo/mongo-async-3.3/mongo-async-3.3.gradle @@ -24,12 +24,16 @@ testSets { } } +// this is needed to force mongo-common test classes to be built first +// so that the dependency below on its test sourceSet will work +compileTestJava.dependsOn tasks.getByPath(':instrumentation:mongo-common:testClasses') + dependencies { - compile(project(':instrumentation:mongo')) + compile(project(':instrumentation:mongo-common')) compileOnly group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.3.0' - testCompile project(':instrumentation:mongo').sourceSets.test.output + testCompile project(':instrumentation:mongo-common').sourceSets.test.output testCompile group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '1.50.5' testCompile group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.3.0' diff --git a/instrumentation/mongo/driver-async-3.3/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoAsyncClientInstrumentation.java b/instrumentation/mongo/mongo-async-3.3/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoAsyncClientInstrumentation.java similarity index 100% rename from instrumentation/mongo/driver-async-3.3/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoAsyncClientInstrumentation.java rename to instrumentation/mongo/mongo-async-3.3/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoAsyncClientInstrumentation.java diff --git a/instrumentation/mongo/driver-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy b/instrumentation/mongo/mongo-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy similarity index 100% rename from instrumentation/mongo/driver-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy rename to instrumentation/mongo/mongo-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy diff --git a/instrumentation/mongo/mongo-common/mongo-common.gradle b/instrumentation/mongo/mongo-common/mongo-common.gradle new file mode 100644 index 0000000000..a0a3436949 --- /dev/null +++ b/instrumentation/mongo/mongo-common/mongo-common.gradle @@ -0,0 +1,7 @@ +apply from: "${rootDir}/gradle/java.gradle" + +dependencies { + compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.1.0' + + testCompile group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '1.50.5' +} diff --git a/instrumentation/mongo/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientDecorator.java b/instrumentation/mongo/mongo-common/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientDecorator.java similarity index 97% rename from instrumentation/mongo/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientDecorator.java rename to instrumentation/mongo/mongo-common/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientDecorator.java index 92f65ab528..65f45d411f 100644 --- a/instrumentation/mongo/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientDecorator.java +++ b/instrumentation/mongo/mongo-common/src/main/java/io/opentelemetry/auto/instrumentation/mongo/MongoClientDecorator.java @@ -37,8 +37,9 @@ import org.bson.BsonValue; public class MongoClientDecorator extends DatabaseClientDecorator { public static final MongoClientDecorator DECORATE = new MongoClientDecorator(); + // TODO use tracer names *.mongo-3.1, *.mongo-3.7, *.mongo-async-3.3 respectively in each module public static final Tracer TRACER = - OpenTelemetry.getTracerFactory().get("io.opentelemetry.auto.mongo-driver-3.1"); + OpenTelemetry.getTracerFactory().get("io.opentelemetry.auto.mongo"); @Override protected String service() { diff --git a/instrumentation/mongo/src/main/java/io/opentelemetry/auto/instrumentation/mongo/TracingCommandListener.java b/instrumentation/mongo/mongo-common/src/main/java/io/opentelemetry/auto/instrumentation/mongo/TracingCommandListener.java similarity index 100% rename from instrumentation/mongo/src/main/java/io/opentelemetry/auto/instrumentation/mongo/TracingCommandListener.java rename to instrumentation/mongo/mongo-common/src/main/java/io/opentelemetry/auto/instrumentation/mongo/TracingCommandListener.java diff --git a/instrumentation/mongo/src/test/groovy/MongoBaseTest.groovy b/instrumentation/mongo/mongo-common/src/test/groovy/MongoBaseTest.groovy similarity index 81% rename from instrumentation/mongo/src/test/groovy/MongoBaseTest.groovy rename to instrumentation/mongo/mongo-common/src/test/groovy/MongoBaseTest.groovy index e97b3a69b9..61faade66e 100644 --- a/instrumentation/mongo/src/test/groovy/MongoBaseTest.groovy +++ b/instrumentation/mongo/mongo-common/src/test/groovy/MongoBaseTest.groovy @@ -48,7 +48,17 @@ class MongoBaseTest extends AgentTestRunner { .net(new Net("localhost", port, Network.localhostIsIPv6())) .build() - mongodExe = STARTER.prepare(mongodConfig) + // using a system-wide file lock to prevent other modules that may be running in parallel + // from clobbering each other while downloading and extracting mongodb + def lockFile = new File(System.getProperty("java.io.tmpdir"), "prepare-embedded-mongo.lock") + def channel = new RandomAccessFile(lockFile, "rw").getChannel() + def lock = channel.lock() + try { + mongodExe = STARTER.prepare(mongodConfig) + } finally { + lock.release() + channel.close() + } mongod = mongodExe.start() } diff --git a/instrumentation/mongo/src/test/java/NoOpInstrumentation.java b/instrumentation/mongo/mongo-common/src/test/java/NoOpInstrumentation.java similarity index 100% rename from instrumentation/mongo/src/test/java/NoOpInstrumentation.java rename to instrumentation/mongo/mongo-common/src/test/java/NoOpInstrumentation.java diff --git a/instrumentation/mongo/mongo.gradle b/instrumentation/mongo/mongo.gradle deleted file mode 100644 index 56d31693a6..0000000000 --- a/instrumentation/mongo/mongo.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply from: "${rootDir}/gradle/java.gradle" - -dependencies { - compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.1.0' - - testCompile group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '1.50.5' -} - -// Forcing strict test execution order (no parallel execution) to ensure proper mongo executable initialization. -List testTasks = [] -tasks.withType(Test) { Test testTask -> - testTasks.each { - testTask.shouldRunAfter(it) - } - testTasks.add(testTask) -} -subprojects { - afterEvaluate { - tasks.withType(Test) { Test testTask -> - testTasks.each { - testTask.shouldRunAfter(it) - } - testTasks.add(testTask) - } - } -} diff --git a/settings.gradle b/settings.gradle index 6340b2a069..04e903eefb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -108,10 +108,10 @@ include ':instrumentation:log4j-events-2.0' // FIXME this instrumentation relied on scope listener // include ':instrumentation:log4j2' include ':instrumentation:logback-events-1.0' -include ':instrumentation:mongo' -include ':instrumentation:mongo:driver-3.1' -include ':instrumentation:mongo:driver-3.7' -include ':instrumentation:mongo:driver-async-3.3' +include ':instrumentation:mongo-3.1' +include ':instrumentation:mongo-3.7' +include ':instrumentation:mongo-async-3.3' +include ':instrumentation:mongo-common' include ':instrumentation:netty-4.0' include ':instrumentation:netty-4.1' include ':instrumentation:okhttp-3.0' @@ -166,3 +166,7 @@ project(':agent-bootstrap').name = 'auto-bootstrap' project(':agent-tooling').name = 'auto-tooling' project(':java-agent').name = 'opentelemetry-auto' +project(':instrumentation:mongo-3.1').projectDir = new File(settingsDir, 'instrumentation/mongo/mongo-3.1') +project(':instrumentation:mongo-3.7').projectDir = new File(settingsDir, 'instrumentation/mongo/mongo-3.7') +project(':instrumentation:mongo-async-3.3').projectDir = new File(settingsDir, 'instrumentation/mongo/mongo-async-3.3') +project(':instrumentation:mongo-common').projectDir = new File(settingsDir, 'instrumentation/mongo/mongo-common')