From ce88169deeab4e0c9416a69f60257274f7f3f33b Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Mon, 11 May 2026 16:50:57 +0200 Subject: [PATCH 001/478] build: Remove nullable type in TestJvmSpec (#11336) build: Remove nullable type in TestJvmSpec Gradle 9 prevent the declaration of nullable types in the Provider API. Co-authored-by: devflow.devflow-routing-intake --- .../datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt index da9663f247a..16fd16977d8 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt @@ -14,6 +14,7 @@ import org.gradle.jvm.toolchain.JvmImplementation import org.gradle.jvm.toolchain.JvmVendorSpec import org.gradle.jvm.toolchain.internal.DefaultToolchainSpec import org.gradle.jvm.toolchain.internal.SpecificInstallationToolchainSpec +import org.gradle.kotlin.dsl.property import org.gradle.kotlin.dsl.support.serviceOf import java.nio.file.Files import java.nio.file.Path @@ -151,7 +152,7 @@ class TestJvmSpec(val project: Project) { project.providers.zip(testJvmSpec, normalizedTestJvm) { jvmSpec, testJvm -> // Only change test JVM if it's not the one we are running the gradle build with if ((jvmSpec as? SpecificInstallationToolchainSpec)?.javaHome == currentJavaHomePath.get()) { - project.providers.provider { null } + project.objects.property() } else { // The provider always says that a value is present so we need to wrap it for proper error messages project.javaToolchains.launcherFor(jvmSpec).orElse(project.providers.provider { From 74cb793e2fd344c1245c67f0590a02c35b31ef18 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 11 May 2026 17:39:04 +0200 Subject: [PATCH 002/478] Remove deprecated internal spanBuilder methods (#11287) Remove deprecated internal spanBuilder methods Fix missing callsites in tests change name for dynamic-instrumentation Co-authored-by: devflow.devflow-routing-intake --- .../debugger/agent/DebuggerTracer.java | 5 +- .../datadog/debugger/CapturedSnapshot20.java | 2 +- .../datadog/debugger/CapturedSnapshot21.java | 8 +-- .../datadog/debugger/CapturedSnapshot28.java | 2 +- .../client/DatadogRequestTracer.java | 2 +- .../client/DatadogRequestTracer.java | 2 +- ...tractPreparedStatementInstrumentation.java | 6 +- .../instrumentation/jdbc/JDBCDecorator.java | 2 +- .../jdbc/StatementInstrumentation.java | 6 +- .../coroutines/CoreKotlinCoroutineTests.kt | 2 +- .../ognl/OgnlInstrumentationSpec.groovy | 2 +- .../groovy/ReactorCoreTest.groovy | 2 +- .../src/test/groovy/ReactorCoreTest.groovy | 2 +- .../spark/AbstractDatadogSparkListener.java | 2 +- .../spark/SparkLauncherListener.java | 2 +- .../spark/SparkLauncherTest.groovy | 6 +- .../src/test/scala/ZioTestFixtures.scala | 2 +- .../TracerConnectionReliabilityTest.groovy | 2 +- .../api/writer/PrintingWriterTest.groovy | 2 +- ...isibilityApmProtocolInterceptorTest.groovy | 8 +-- .../CiVisibilityTraceInterceptorTest.groovy | 6 +- .../sampling/AsmStandaloneSamplerTest.groovy | 6 +- .../sampling/ForcePrioritySamplerTest.groovy | 8 +-- .../RateByServiceTraceSamplerTest.groovy | 16 ++--- .../sampling/RuleBasedSamplingTest.groovy | 18 +++--- .../trace/common/sampling/SamplerTest.groovy | 2 +- .../sampling/SingleSpanSamplerTest.groovy | 14 ++--- .../writer/DDAgentWriterCombinedTest.groovy | 6 +- .../common/writer/DDAgentWriterTest.groovy | 8 +-- .../writer/DDIntakeWriterCombinedTest.groovy | 6 +- .../common/writer/DDIntakeWriterTest.groovy | 8 +-- .../common/writer/TraceMapperTest.groovy | 2 +- .../DDIntakeTraceInterceptorTest.groovy | 6 +- .../trace/core/DDSpanContextTest.groovy | 28 ++++----- .../datadog/trace/core/DDSpanTest.groovy | 48 +++++++-------- .../trace/core/KnuthSamplingRateTest.groovy | 12 ++-- .../trace/core/PendingTraceTestBase.groovy | 20 +++---- .../trace/core/TraceInterceptorTest.groovy | 4 +- .../IterationSpansForkedTest.groovy | 22 +++---- .../taginterceptor/TagInterceptorTest.groovy | 58 +++++++++---------- .../ddintake/LLMObsSpanMapperTest.groovy | 12 ++-- .../ParentBasedAlwaysOnSamplerTest.java | 11 ++-- .../trace/core/CoreSpanBuilderTest.java | 3 +- .../datadog/trace/core/CoreTracerTest.java | 26 +++++---- .../DDSpanContextPropagationTagsTest.java | 14 +++-- .../trace/core/TraceCorrelationTest.java | 8 +-- .../groovy/DDApiIntegrationTest.groovy | 2 +- .../opentracing/DefaultLogHandlerTest.groovy | 16 ++--- .../IterationSpansForkedTest.groovy | 22 +++---- .../instrumentation/api/AgentTracer.java | 11 ---- 50 files changed, 248 insertions(+), 242 deletions(-) diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java index 92df0d5a654..a00a93d268e 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTracer.java @@ -25,7 +25,10 @@ public DebuggerSpan createSpan(String encodedProbeId, String resourceName, Strin return DebuggerSpan.NOOP_SPAN; } AgentSpan dynamicSpan = - tracerAPI.buildSpan(OPERATION_NAME).withResourceName(resourceName).start(); + tracerAPI + .buildSpan("dynamic-instrumentation", OPERATION_NAME) + .withResourceName(resourceName) + .start(); if (tags != null) { for (String tag : tags) { int idx = tag.indexOf(':'); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot20.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot20.java index 7dd2f39552c..85061184202 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot20.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot20.java @@ -24,7 +24,7 @@ public class CapturedSnapshot20 { public static int main(String arg) { AgentTracer.TracerAPI tracerAPI = AgentTracer.get(); - AgentSpan span = tracerAPI.buildSpan("process").start(); + AgentSpan span = tracerAPI.buildSpan("dynamic-instrumentation", "process").start(); try (AgentScope scope = tracerAPI.activateManualSpan(span)) { if (arg.equals("exception") || arg.equals("illegal")) { return new CapturedSnapshot20().processWithException(arg); diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot21.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot21.java index 0423fae5fc7..eb097c0b7a7 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot21.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot21.java @@ -24,7 +24,7 @@ public class CapturedSnapshot21 { public static int main(String arg) { AgentTracer.TracerAPI tracerAPI = AgentTracer.get(); - AgentSpan span = tracerAPI.buildSpan("rootProcess").start(); + AgentSpan span = tracerAPI.buildSpan("dynamic-instrumentation", "rootProcess").start(); try (AgentScope scope = tracerAPI.activateManualSpan(span)) { return new CapturedSnapshot21().rootProcess(arg); } finally { @@ -34,7 +34,7 @@ public static int main(String arg) { private int rootProcess(String arg) { AgentTracer.TracerAPI tracerAPI = AgentTracer.get(); - AgentSpan span = tracerAPI.buildSpan("process1").start(); + AgentSpan span = tracerAPI.buildSpan("dynamic-instrumentation", "process1").start(); try (AgentScope scope = tracerAPI.activateManualSpan(span)) { return process1(arg) + 1; } finally { @@ -44,7 +44,7 @@ private int rootProcess(String arg) { private int process1(String arg) { AgentTracer.TracerAPI tracerAPI = AgentTracer.get(); - AgentSpan span = tracerAPI.buildSpan("process2").start(); + AgentSpan span = tracerAPI.buildSpan("dynamic-instrumentation", "process2").start(); try (AgentScope scope = tracerAPI.activateManualSpan(span)) { return process2(arg) + 1; } finally { @@ -54,7 +54,7 @@ private int process1(String arg) { private int process2(String arg) { AgentTracer.TracerAPI tracerAPI = AgentTracer.get(); - AgentSpan span = tracerAPI.buildSpan("process3").start(); + AgentSpan span = tracerAPI.buildSpan("dynamic-instrumentation", "process3").start(); try (AgentScope scope = tracerAPI.activateManualSpan(span)) { return process3(arg) + 1; } finally { diff --git a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot28.java b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot28.java index c1d5212e2d8..5060b569597 100644 --- a/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot28.java +++ b/dd-java-agent/agent-debugger/src/test/resources/com/datadog/debugger/CapturedSnapshot28.java @@ -25,7 +25,7 @@ public class CapturedSnapshot28 { public static int main(String arg) { AgentTracer.TracerAPI tracerAPI = AgentTracer.get(); - AgentSpan span = tracerAPI.buildSpan("process").start(); + AgentSpan span = tracerAPI.buildSpan("dynamic-instrumentation", "process").start(); try (AgentScope scope = tracerAPI.activateManualSpan(span)) { return new CapturedSnapshot28().process(arg); } finally { diff --git a/dd-java-agent/instrumentation/couchbase/couchbase-3.1/src/main/java/datadog/trace/instrumentation/couchbase_31/client/DatadogRequestTracer.java b/dd-java-agent/instrumentation/couchbase/couchbase-3.1/src/main/java/datadog/trace/instrumentation/couchbase_31/client/DatadogRequestTracer.java index 57d04969b98..14c0105d31c 100644 --- a/dd-java-agent/instrumentation/couchbase/couchbase-3.1/src/main/java/datadog/trace/instrumentation/couchbase_31/client/DatadogRequestTracer.java +++ b/dd-java-agent/instrumentation/couchbase/couchbase-3.1/src/main/java/datadog/trace/instrumentation/couchbase_31/client/DatadogRequestTracer.java @@ -50,7 +50,7 @@ public RequestSpan requestSpan(String requestName, RequestSpan requestParent) { seedNodes = parent.getTag(InstrumentationTags.COUCHBASE_SEED_NODES); } - AgentTracer.SpanBuilder builder = tracer.singleSpanBuilder(spanName); + AgentTracer.SpanBuilder builder = tracer.singleSpanBuilder("couchbase", spanName); if (null != parent) { builder.asChildOf(parent.context()); } diff --git a/dd-java-agent/instrumentation/couchbase/couchbase-3.2/src/main/java/datadog/trace/instrumentation/couchbase_32/client/DatadogRequestTracer.java b/dd-java-agent/instrumentation/couchbase/couchbase-3.2/src/main/java/datadog/trace/instrumentation/couchbase_32/client/DatadogRequestTracer.java index d330f5e36b9..6bdb7c0526a 100644 --- a/dd-java-agent/instrumentation/couchbase/couchbase-3.2/src/main/java/datadog/trace/instrumentation/couchbase_32/client/DatadogRequestTracer.java +++ b/dd-java-agent/instrumentation/couchbase/couchbase-3.2/src/main/java/datadog/trace/instrumentation/couchbase_32/client/DatadogRequestTracer.java @@ -54,7 +54,7 @@ public RequestSpan requestSpan(String requestName, RequestSpan requestParent) { } } if (requestSpan == null) { - AgentTracer.SpanBuilder builder = tracer.singleSpanBuilder(spanName); + AgentTracer.SpanBuilder builder = tracer.singleSpanBuilder("couchbase", spanName); if (null != parent) { builder.asChildOf(parent.context()); } diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java index fc93e1c8edd..f24dcb8077a 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java @@ -86,7 +86,11 @@ public static AgentScope onEnter(@Advice.This final Statement statement) { // The span ID is pre-determined so that we can reference it when setting the context final long spanID = DECORATE.setContextInfo(connection, dbInfo); // we then force that pre-determined span ID for the span covering the actual query - span = AgentTracer.get().singleSpanBuilder(DATABASE_QUERY).withSpanId(spanID).start(); + span = + AgentTracer.get() + .singleSpanBuilder("java-jdbc-prepared_statement", DATABASE_QUERY) + .withSpanId(spanID) + .start(); span.setTag(DBM_TRACE_INJECTED, true); } else if (DECORATE.isPostgres(dbInfo) && DBM_TRACE_PREPARED_STATEMENTS) { span = startSpan("java-jdbc-prepared_statement", DATABASE_QUERY); diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java index e9ead946cda..b2f62b5eb7f 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java @@ -336,7 +336,7 @@ public long setContextInfo(Connection connection, DBInfo dbInfo) { // potentially get build span like here AgentSpan instrumentationSpan = AgentTracer.get() - .singleSpanBuilder("set context_info") + .singleSpanBuilder("java-jdbc", "set context_info") .withTag("dd.instrumentation", true) .start(); DECORATE.afterStart(instrumentationSpan); diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java index 5e565470572..5b5ec71b671 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java @@ -98,7 +98,11 @@ public static AgentScope onEnter( // The span ID is pre-determined so that we can reference it when setting the context final long spanID = DECORATE.setContextInfo(connection, dbInfo); // we then force that pre-determined span ID for the span covering the actual query - span = AgentTracer.get().singleSpanBuilder(DATABASE_QUERY).withSpanId(spanID).start(); + span = + AgentTracer.get() + .singleSpanBuilder("java-jdbc-statement", DATABASE_QUERY) + .withSpanId(spanID) + .start(); } else if (isOracle) { span = startSpan("java-jdbc-statement", DATABASE_QUERY); DECORATE.setAction(span, connection); diff --git a/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt index ef870d6a9fe..75a66319120 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt +++ b/dd-java-agent/instrumentation/kotlin-coroutines-1.3/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt @@ -364,7 +364,7 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc activeSpan().setSpanName(opName) } - protected fun childSpan(opName: String): AgentSpan = get().buildSpan(opName) + protected fun childSpan(opName: String): AgentSpan = get().buildSpan("kotlin_coroutine", opName) .withResourceName("coroutines-test-span") .start() diff --git a/dd-java-agent/instrumentation/ognl-appsec-3.3.2/src/test/groovy/datadog/trace/instrumentation/ognl/OgnlInstrumentationSpec.groovy b/dd-java-agent/instrumentation/ognl-appsec-3.3.2/src/test/groovy/datadog/trace/instrumentation/ognl/OgnlInstrumentationSpec.groovy index 16282c29911..d2d77722b24 100644 --- a/dd-java-agent/instrumentation/ognl-appsec-3.3.2/src/test/groovy/datadog/trace/instrumentation/ognl/OgnlInstrumentationSpec.groovy +++ b/dd-java-agent/instrumentation/ognl-appsec-3.3.2/src/test/groovy/datadog/trace/instrumentation/ognl/OgnlInstrumentationSpec.groovy @@ -8,7 +8,7 @@ import ognl.Ognl class OgnlInstrumentationSpec extends InstrumentationSpecification { void 'creates a new span for ognl parsing expressions'() { when: - AgentSpan span = AgentTracer.get().buildSpan("top-span").start() + AgentSpan span = AgentTracer.get().buildSpan("ognl", "top-span").start() def ognlExpr AgentTracer.activateSpan(span).withCloseable { ognlExpr = Ognl.parseExpression('foo') diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy index d2cd1baf58e..260f5af9f9a 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy @@ -417,7 +417,7 @@ class ReactorCoreTest extends InstrumentationSpecification { where: spanType | buildSpan | finishSpan "datadog" | { - TEST_TRACER.buildSpan("contextual").start() + TEST_TRACER.buildSpan("reactor-core", "contextual").start() } | { AgentSpan span -> span.finish() } diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy index 1245cc641b0..6a2dfcd14e4 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy @@ -417,7 +417,7 @@ class ReactorCoreTest extends InstrumentationSpecification { where: spanType | buildSpan | finishSpan "datadog" | { - TEST_TRACER.buildSpan("contextual").start() + TEST_TRACER.buildSpan("reactor-core", "contextual").start() } | { AgentSpan span -> span.finish() } diff --git a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java index 292719f31fd..817aa1f0d84 100644 --- a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java +++ b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java @@ -1092,7 +1092,7 @@ private void setDataJobsSamplingPriority(AgentSpan span) { private AgentTracer.SpanBuilder buildSparkSpan(String spanName, Properties properties) { AgentTracer.SpanBuilder builder = - tracer.buildSpan(spanName).withSpanType("spark").withTag("app_id", appId); + tracer.buildSpan("spark", spanName).withSpanType("spark").withTag("app_id", appId); if (databricksServiceName != null) { builder.withServiceName(databricksServiceName); diff --git a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java index c926b42b1ef..643953b22c8 100644 --- a/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java +++ b/dd-java-agent/instrumentation/spark/spark-common/src/main/java/datadog/trace/instrumentation/spark/SparkLauncherListener.java @@ -38,7 +38,7 @@ public static synchronized void createLauncherSpan(Object launcher) { AgentTracer.TracerAPI tracer = AgentTracer.get(); AgentSpan span = tracer - .buildSpan("spark.launcher.launch") + .buildSpan("spark-launcher", "spark.launcher.launch") .withSpanType("spark") .withResourceName("SparkLauncher.startApplication") .start(); diff --git a/dd-java-agent/instrumentation/spark/spark-common/src/test/groovy/datadog/trace/instrumentation/spark/SparkLauncherTest.groovy b/dd-java-agent/instrumentation/spark/spark-common/src/test/groovy/datadog/trace/instrumentation/spark/SparkLauncherTest.groovy index f7a5b5a9601..eb26699c1e6 100644 --- a/dd-java-agent/instrumentation/spark/spark-common/src/test/groovy/datadog/trace/instrumentation/spark/SparkLauncherTest.groovy +++ b/dd-java-agent/instrumentation/spark/spark-common/src/test/groovy/datadog/trace/instrumentation/spark/SparkLauncherTest.groovy @@ -100,7 +100,7 @@ class SparkLauncherTest extends InstrumentationSpecification { SparkLauncherListener.launcherSpan = null def tracer = AgentTracer.get() SparkLauncherListener.launcherSpan = tracer - .buildSpan("spark.launcher.launch") + .buildSpan("spark-launcher", "spark.launcher.launch") .withSpanType("spark") .withResourceName("SparkLauncher.startApplication") .start() @@ -135,7 +135,7 @@ class SparkLauncherTest extends InstrumentationSpecification { SparkLauncherListener.launcherSpan = null def tracer = AgentTracer.get() SparkLauncherListener.launcherSpan = tracer - .buildSpan("spark.launcher.launch") + .buildSpan("spark-launcher", "spark.launcher.launch") .withSpanType("spark") .withResourceName("SparkLauncher.startApplication") .start() @@ -167,7 +167,7 @@ class SparkLauncherTest extends InstrumentationSpecification { SparkLauncherListener.launcherSpan = null def tracer = AgentTracer.get() SparkLauncherListener.launcherSpan = tracer - .buildSpan("spark.launcher.launch") + .buildSpan("spark-launcher", "spark.launcher.launch") .withSpanType("spark") .withResourceName("SparkLauncher.startApplication") .start() diff --git a/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala b/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala index eff669dc97c..335e2b9bdbb 100644 --- a/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala +++ b/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala @@ -121,7 +121,7 @@ object ZioTestFixtures { ddSpan <- ZIO.succeed( AgentTracer .get() - .buildSpan(opName) + .buildSpan("zio.experimental", opName) .withResourceName("zio-test") .start() ) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/TracerConnectionReliabilityTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/TracerConnectionReliabilityTest.groovy index d744a6fc7cd..6ecc076a10d 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/TracerConnectionReliabilityTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/TracerConnectionReliabilityTest.groovy @@ -126,7 +126,7 @@ class TracerConnectionReliabilityTest extends DDSpecification { def createSpans(int count, int delay) { for (def index: 1..count) { - def span = tracer.buildSpan("operation-${index}").start() + def span = tracer.buildSpan("datadog", "operation-${index}").start() Thread.sleep(delay) span.finish() } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/api/writer/PrintingWriterTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/api/writer/PrintingWriterTest.groovy index ea0245f8f0d..74072a2b24d 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/api/writer/PrintingWriterTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/api/writer/PrintingWriterTest.groovy @@ -20,7 +20,7 @@ class PrintingWriterTest extends DDCoreSpecification { Types.newParameterizedType(List, Map)))) def setup() { - def builder = tracer.buildSpan("fakeOperation") + def builder = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .withSpanType("fakeType") diff --git a/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityApmProtocolInterceptorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityApmProtocolInterceptorTest.groovy index 519bb0c3881..288227560b3 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityApmProtocolInterceptorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityApmProtocolInterceptorTest.groovy @@ -20,9 +20,9 @@ class CiVisibilityApmProtocolInterceptorTest extends DDCoreSpecification { setup: tracer.addTraceInterceptor(CiVisibilityApmProtocolInterceptor.INSTANCE) - tracer.buildSpan("test-module").withSpanType(DDSpanTypes.TEST_MODULE_END).start().finish() - tracer.buildSpan("test-suite").withSpanType(DDSpanTypes.TEST_SUITE_END).start().finish() - tracer.buildSpan("test").withSpanType(DDSpanTypes.TEST).start().finish() + tracer.buildSpan("datadog", "test-module").withSpanType(DDSpanTypes.TEST_MODULE_END).start().finish() + tracer.buildSpan("datadog", "test-suite").withSpanType(DDSpanTypes.TEST_SUITE_END).start().finish() + tracer.buildSpan("datadog", "test").withSpanType(DDSpanTypes.TEST).start().finish() writer.waitForTraces(1) @@ -38,7 +38,7 @@ class CiVisibilityApmProtocolInterceptorTest extends DDCoreSpecification { setup: tracer.addTraceInterceptor(CiVisibilityApmProtocolInterceptor.INSTANCE) - def testSpan = tracer.buildSpan("test").withSpanType(DDSpanTypes.TEST).start() + def testSpan = tracer.buildSpan("datadog", "test").withSpanType(DDSpanTypes.TEST).start() testSpan.setTag(Tags.TEST_SESSION_ID, "session ID") testSpan.setTag(Tags.TEST_MODULE_ID, "module ID") testSpan.setTag(Tags.TEST_SUITE_ID, "suite ID") diff --git a/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityTraceInterceptorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityTraceInterceptorTest.groovy index f9d2f46e1e6..9b50ed9c825 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityTraceInterceptorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/civisibility/interceptor/CiVisibilityTraceInterceptorTest.groovy @@ -20,7 +20,7 @@ class CiVisibilityTraceInterceptorTest extends DDCoreSpecification { def "discard a trace that does not come from ci app"() { tracer.addTraceInterceptor(CiVisibilityTraceInterceptor.INSTANCE) - tracer.buildSpan("sample-span").start().finish() + tracer.buildSpan("datadog", "sample-span").start().finish() expect: writer.size() == 0 @@ -29,7 +29,7 @@ class CiVisibilityTraceInterceptorTest extends DDCoreSpecification { def "do not discard a trace that comes from ci app"() { tracer.addTraceInterceptor(CiVisibilityTraceInterceptor.INSTANCE) - def span = tracer.buildSpan("sample-span").start() + def span = tracer.buildSpan("datadog", "sample-span").start() ((DDSpanContext) span.context()).origin = CIConstants.CIAPP_TEST_ORIGIN span.finish() @@ -42,7 +42,7 @@ class CiVisibilityTraceInterceptorTest extends DDCoreSpecification { tracer.addTraceInterceptor(CiVisibilityTraceInterceptor.INSTANCE) - def span = tracer.buildSpan("sample-span").withSpanType(spanType).start() + def span = tracer.buildSpan("datadog", "sample-span").withSpanType(spanType).start() ((DDSpanContext) span.context()).origin = CIConstants.CIAPP_TEST_ORIGIN span.finish() writer.waitForTraces(1) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy index c97d6f47013..7ec7579f77b 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy @@ -23,7 +23,7 @@ class AsmStandaloneSamplerTest extends DDCoreSpecification{ def tracer = tracerBuilder().writer(writer).sampler(sampler).build() when: - def span1 = tracer.buildSpan("test").start() + def span1 = tracer.buildSpan("datadog", "test").start() sampler.setSamplingPriority(span1) then: @@ -33,7 +33,7 @@ class AsmStandaloneSamplerTest extends DDCoreSpecification{ span1.getSamplingPriority() == PrioritySampling.SAMPLER_KEEP when: - def span2 = tracer.buildSpan("test2").start() + def span2 = tracer.buildSpan("datadog", "test2").start() sampler.setSamplingPriority(span2) then: @@ -43,7 +43,7 @@ class AsmStandaloneSamplerTest extends DDCoreSpecification{ span2.getSamplingPriority() == PrioritySampling.SAMPLER_DROP when: - def span3 = tracer.buildSpan("test3").start() + def span3 = tracer.buildSpan("datadog", "test3").start() sampler.setSamplingPriority(span3) then: "Mock one minute later" diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/ForcePrioritySamplerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/ForcePrioritySamplerTest.groovy index 546714d5cd5..c2111c7d36f 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/ForcePrioritySamplerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/ForcePrioritySamplerTest.groovy @@ -17,7 +17,7 @@ class ForcePrioritySamplerTest extends DDCoreSpecification { def tracer = tracerBuilder().writer(writer).sampler(sampler).build() when: - def span1 = tracer.buildSpan("test").start() + def span1 = tracer.buildSpan("datadog", "test").start() sampler.setSamplingPriority(span1) then: @@ -43,7 +43,7 @@ class ForcePrioritySamplerTest extends DDCoreSpecification { def tracer = tracerBuilder().writer(writer).sampler(sampler).build() when: - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() then: span.getSamplingPriority() == null @@ -69,7 +69,7 @@ class ForcePrioritySamplerTest extends DDCoreSpecification { when: def sampler = new ForcePrioritySampler(SAMPLER_KEEP, DEFAULT) def tracer = tracerBuilder().writer(new LoggingWriter()).sampler(sampler).build() - def span = tracer.buildSpan("root").start() + def span = tracer.buildSpan("datadog", "root").start() if (tagName) { span.setTag(tagName, tagValue) } @@ -91,7 +91,7 @@ class ForcePrioritySamplerTest extends DDCoreSpecification { setup: def sampler = new ForcePrioritySampler(SAMPLER_KEEP, DEFAULT) def tracer = tracerBuilder().writer(new LoggingWriter()).sampler(sampler).build() - def span = tracer.buildSpan("root").start() + def span = tracer.buildSpan("datadog", "root").start() if (tagName) { span.setTag(tagName, tagValue) } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RateByServiceTraceSamplerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RateByServiceTraceSamplerTest.groovy index 123d93adafb..1bfb099670a 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RateByServiceTraceSamplerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RateByServiceTraceSamplerTest.groovy @@ -90,7 +90,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { when: String response = '{"rate_by_service": {"service:spock,env:test":0.0}}' serviceSampler.onResponse("traces", serializer.fromJson(response)) - DDSpan span1 = tracer.buildSpan("fakeOperation") + DDSpan span1 = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("foo") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -106,7 +106,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { response = '{"rate_by_service": {"service:spock,env:test":1.0, "service:SPOCK,env:Test": 0.0}}' serviceSampler.onResponse("traces", serializer.fromJson(response)) - DDSpan span2 = tracer.buildSpan("fakeOperation") + DDSpan span2 = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("spock") .withTag("env", "test") .ignoreActiveSpan().start() @@ -129,7 +129,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { def response = '{"rate_by_service": {"service:spock,env:test":1.0}}' serviceSampler.onResponse("traces", serializer.fromJson(response)) - DDSpan span = tracer.buildSpan("fakeOperation") + DDSpan span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("SPOCK") .withTag("env", "Test") .ignoreActiveSpan().start() @@ -151,7 +151,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { serviceSampler.onResponse("traces", serializer.fromJson(response)) when: - DDSpan span = tracer.buildSpan("fakeOperation") + DDSpan span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("spock") .withTag("env", "test") .ignoreActiveSpan().start() @@ -176,7 +176,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { .fromJson('{"rate_by_service":{"service:,env:":1.0,"service:spock,env:":0.0}}')) when: - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() then: span.getSamplingPriority() == null @@ -190,7 +190,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { span.getSamplingPriority() == PrioritySampling.SAMPLER_DROP when: - span = tracer.buildSpan("test").withTag(DDTags.SERVICE_NAME, "spock").start() + span = tracer.buildSpan("datadog", "test").withTag(DDTags.SERVICE_NAME, "spock").start() span.finish() writer.waitForTraces(2) @@ -205,7 +205,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { when: def sampler = new RateByServiceTraceSampler() def tracer = tracerBuilder().writer(new LoggingWriter()).sampler(sampler).build() - def span = tracer.buildSpan("root").start() + def span = tracer.buildSpan("datadog", "root").start() if (tagName) { span.setTag(tagName, tagValue) } @@ -392,7 +392,7 @@ class RateByServiceTraceSamplerTest extends DDCoreSpecification { setup: def sampler = new RateByServiceTraceSampler() def tracer = tracerBuilder().writer(new LoggingWriter()).sampler(sampler).build() - def span = tracer.buildSpan("root").start() + def span = tracer.buildSpan("datadog", "root").start() if (tagName) { span.setTag(tagName, tagValue) } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy index 8d82fc14a14..8d4416d6bf7 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy @@ -61,7 +61,7 @@ class RuleBasedSamplingTest extends DDCoreSpecification { sampler instanceof PrioritySampler when: - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -167,7 +167,7 @@ class RuleBasedSamplingTest extends DDCoreSpecification { sampler instanceof PrioritySampler when: - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .withTag("tag", "foo") @@ -305,7 +305,7 @@ class RuleBasedSamplingTest extends DDCoreSpecification { PrioritySampler sampler = (PrioritySampler)Sampler.Builder.forConfig(properties) when: - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withResourceName("resource") .withTag("env", "bar") @@ -370,12 +370,12 @@ class RuleBasedSamplingTest extends DDCoreSpecification { properties.setProperty(TRACE_RATE_LIMIT, "1") Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span1 = tracer.buildSpan("operation") + DDSpan span1 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() - DDSpan span2 = tracer.buildSpan("operation") + DDSpan span2 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -409,12 +409,12 @@ class RuleBasedSamplingTest extends DDCoreSpecification { properties.setProperty(TRACE_RATE_LIMIT, "1") Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span1 = tracer.buildSpan("operation") + DDSpan span1 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() - DDSpan span2 = tracer.buildSpan("operation") + DDSpan span2 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -448,11 +448,11 @@ class RuleBasedSamplingTest extends DDCoreSpecification { properties.setProperty(TRACE_RATE_LIMIT, "1") Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span1 = tracer.buildSpan("operation") + DDSpan span1 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() - DDSpan span2 = tracer.buildSpan("operation") + DDSpan span2 = tracer.buildSpan("datadog", "operation") .withServiceName("foo") .withTag("env", "bar") .ignoreActiveSpan().start() diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SamplerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SamplerTest.groovy index f3804a23124..d5dbbdf6df8 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SamplerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SamplerTest.groovy @@ -161,7 +161,7 @@ class SamplerTest extends DDSpecification{ CoreTracer tracer = CoreTracer.builder().writer(new ListWriter()).sampler(sampler).build() when: - DDSpan span = (DDSpan) tracer.buildSpan("test").start() + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "test").start() ((PrioritySampler) sampler).setSamplingPriority(span) then: diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SingleSpanSamplerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SingleSpanSamplerTest.groovy index 355fc618023..ac33a48cc80 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SingleSpanSamplerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/SingleSpanSamplerTest.groovy @@ -51,7 +51,7 @@ class SingleSpanSamplerTest extends DDCoreSpecification { when: SingleSpanSampler sampler = SingleSpanSampler.Builder.forConfig(Config.get(properties)) - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() as DDSpan @@ -87,11 +87,11 @@ class SingleSpanSamplerTest extends DDCoreSpecification { when: SingleSpanSampler sampler = SingleSpanSampler.Builder.forConfig(Config.get(properties)) - DDSpan rootSpan = tracer.buildSpan("web.request") + DDSpan rootSpan = tracer.buildSpan("datadog", "web.request") .withServiceName("webserver") .ignoreActiveSpan().start() as DDSpan - DDSpan childSpan = tracer.buildSpan("web.handler") + DDSpan childSpan = tracer.buildSpan("datadog", "web.handler") .withServiceName("webserver") .asChildOf(rootSpan) .ignoreActiveSpan().start() as DDSpan @@ -127,12 +127,12 @@ class SingleSpanSamplerTest extends DDCoreSpecification { when: SingleSpanSampler sampler = SingleSpanSampler.Builder.forConfig(Config.get(properties)) - DDSpan span1 = tracer.buildSpan("operation") + DDSpan span1 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() as DDSpan - DDSpan span2 = tracer.buildSpan("operation") + DDSpan span2 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() as DDSpan @@ -167,7 +167,7 @@ class SingleSpanSamplerTest extends DDCoreSpecification { when: SingleSpanSampler sampler = SingleSpanSampler.Builder.forConfig(Config.get(properties)) - DDSpan span1 = tracer.buildSpan("operation") + DDSpan span1 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() as DDSpan @@ -189,7 +189,7 @@ class SingleSpanSamplerTest extends DDCoreSpecification { when: SingleSpanSampler sampler = SingleSpanSampler.Builder.forConfig(Config.get(properties)) - DDSpan span1 = tracer.buildSpan("operation") + DDSpan span1 = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() as DDSpan diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy index faa9b0db3de..1659ab44da3 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterCombinedTest.groovy @@ -101,7 +101,7 @@ class DDAgentWriterCombinedTest extends DDCoreSpecification { .flushIntervalMilliseconds(-1) .build() writer.start() - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: writer.write(trace) @@ -132,7 +132,7 @@ class DDAgentWriterCombinedTest extends DDCoreSpecification { .flushIntervalMilliseconds(-1) .build() writer.start() - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: (1..traceCount).each { @@ -167,7 +167,7 @@ class DDAgentWriterCombinedTest extends DDCoreSpecification { .flushIntervalMilliseconds(1000) .build() writer.start() - def span = dummyTracer.buildSpan("fakeOperation").start() + def span = dummyTracer.buildSpan("datadog", "fakeOperation").start() def trace = (1..10).collect { span } when: diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy index b08e70e3fae..965f3a88d5e 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentWriterTest.groovy @@ -109,7 +109,7 @@ class DDAgentWriterTest extends DDCoreSpecification { def "test writer.write publish succeeds"() { setup: - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: "publish succeeds" writer.write(trace) @@ -122,7 +122,7 @@ class DDAgentWriterTest extends DDCoreSpecification { def "test writer.write publish for single span sampling"() { setup: - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: "publish succeeds" writer.write(trace) @@ -135,7 +135,7 @@ class DDAgentWriterTest extends DDCoreSpecification { def "test writer.write publish fails"() { setup: - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: "publish fails" writer.write(trace) @@ -161,7 +161,7 @@ class DDAgentWriterTest extends DDCoreSpecification { def "test writer.write closed"() { setup: writer.close() - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: writer.write(trace) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy index b3d53917ea5..966d4e91ecb 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy @@ -98,7 +98,7 @@ class DDIntakeWriterCombinedTest extends DDCoreSpecification { .alwaysFlush(false) .build() writer.start() - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: writer.write(trace) @@ -127,7 +127,7 @@ class DDIntakeWriterCombinedTest extends DDCoreSpecification { .alwaysFlush(false) .build() writer.start() - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: (1..traceCount).each { @@ -160,7 +160,7 @@ class DDIntakeWriterCombinedTest extends DDCoreSpecification { .alwaysFlush(false) .build() writer.start() - def span = dummyTracer.buildSpan("fakeOperation").start() + def span = dummyTracer.buildSpan("datadog", "fakeOperation").start() def trace = (1..10).collect { span } when: diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy index da522531dcf..e0a347841a1 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy @@ -99,7 +99,7 @@ class DDIntakeWriterTest extends DDCoreSpecification { def "test writer.write publish succeeds"() { setup: - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: "publish succeeds" writer.write(trace) @@ -113,7 +113,7 @@ class DDIntakeWriterTest extends DDCoreSpecification { def "test writer.write publish for single span sampling"() { setup: - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: "publish succeeds" writer.write(trace) @@ -127,7 +127,7 @@ class DDIntakeWriterTest extends DDCoreSpecification { def "test writer.write publish fails"() { setup: - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: "publish fails" writer.write(trace) @@ -155,7 +155,7 @@ class DDIntakeWriterTest extends DDCoreSpecification { def "test writer.write closed"() { setup: writer.close() - def trace = [dummyTracer.buildSpan("fakeOperation").start()] + def trace = [dummyTracer.buildSpan("datadog", "fakeOperation").start()] when: writer.write(trace) diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceMapperTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceMapperTest.groovy index 7d4d0b709cf..a81cee990c4 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceMapperTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceMapperTest.groovy @@ -17,7 +17,7 @@ class TraceMapperTest extends DDCoreSpecification { def "test trace mapper v0.5"() { setup: def tracer = tracerBuilder().writer(new ListWriter()).build() - DDSpan span = (DDSpan) tracer.buildSpan(null).withTag("service.name", "my-service") + DDSpan span = (DDSpan) tracer.buildSpan("datadog", null).withTag("service.name", "my-service") .withTag("elasticsearch.version", "7.0").start() span.setBaggageItem("baggage", "item") span.context().setDataTop("mydata", "[1,2,3]") diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeTraceInterceptorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeTraceInterceptorTest.groovy index b55c559e57d..31c5c1c68ee 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeTraceInterceptorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeTraceInterceptorTest.groovy @@ -22,7 +22,7 @@ class DDIntakeTraceInterceptorTest extends DDCoreSpecification { def "test normalization for dd intake"() { setup: - tracer.buildSpan("my-operation-name") + tracer.buildSpan("datadog", "my-operation-name") .withResourceName("my-resource-name") .withSpanType("my-span-type") .withServiceName("my-service-name") @@ -58,7 +58,7 @@ class DDIntakeTraceInterceptorTest extends DDCoreSpecification { def "test normalization does not implicitly convert span type"() { setup: def originalSpanType = UTF8BytesString.create("a UTF8 span type") - tracer.buildSpan("my-operation-name") + tracer.buildSpan("datadog", "my-operation-name") .withSpanType(originalSpanType) .start().finish() @@ -75,7 +75,7 @@ class DDIntakeTraceInterceptorTest extends DDCoreSpecification { def "test default env setting"() { setup: - tracer.buildSpan("my-operation-name").start().finish() + tracer.buildSpan("datadog", "my-operation-name").start().finish() writer.waitForTraces(1) expect: diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy index fc7d4ce93a4..99137613ced 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy @@ -37,7 +37,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "null values for tags delete existing tags"() { setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .withSpanType("fakeType") @@ -68,7 +68,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "special tags set certain values"() { setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .withSpanType("fakeType") @@ -94,7 +94,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "tags can be added to the context"() { setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .withSpanType("fakeType") @@ -126,7 +126,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "metrics use the expected types"() { // floats should be converted to doubles. setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .start() @@ -158,7 +158,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "force keep really keeps the trace"() { setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .start() @@ -188,10 +188,10 @@ class DDSpanContextTest extends DDCoreSpecification { def extracted = new ExtractedContext(DDTraceId.from(123), 456, SAMPLER_KEEP, "789", tracer.getPropagationTagsFactory().empty(), DATADOG) .withRequestContextDataAppSec("dummy") - def top = tracer.buildSpan("top").asChildOf((AgentSpanContext) extracted).start() + def top = tracer.buildSpan("datadog", "top").asChildOf((AgentSpanContext) extracted).start() def topC = (DDSpanContext) top.context() def topTS = top.getRequestContext().getTraceSegment() - def current = tracer.buildSpan("current").asChildOf(top).start() + def current = tracer.buildSpan("datadog", "current").asChildOf(top).start() def currentTS = current.getRequestContext().getTraceSegment() def currentC = (DDSpanContext) current.context() @@ -218,7 +218,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "set single span sampling tags"() { setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .start() @@ -248,7 +248,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "setting resource name to null is ignored"() { setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .start() @@ -262,7 +262,7 @@ class DDSpanContextTest extends DDCoreSpecification { def "setting operation name triggers constant encoding"() { when: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .start() @@ -294,13 +294,13 @@ class DDSpanContextTest extends DDCoreSpecification { def "Span IDs printed as unsigned long"() { setup: - def parent = tracer.buildSpan("fakeOperation") + def parent = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .withSpanId(-987654321) .start() - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .withSpanId(-123456789) @@ -317,12 +317,12 @@ class DDSpanContextTest extends DDCoreSpecification { def "service name source is propagated from parent to child span"() { setup: - def parent = tracer.buildSpan("parentOperation") + def parent = tracer.buildSpan("datadog", "parentOperation") .withServiceName("fakeService") .start() when: - def child = tracer.buildSpan("childOperation") + def child = tracer.buildSpan("datadog", "childOperation") .asChildOf(parent.context()) .start() def childContext = child.context() as DDSpanContext diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy index e7882432d9c..ebdf48ed337 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy @@ -39,7 +39,7 @@ class DDSpanTest extends DDCoreSpecification { def "getters and setters"() { setup: - def span = tracer.buildSpan("fakeOperation") + def span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("fakeService") .withResourceName("fakeResource") .withSpanType("fakeType") @@ -88,7 +88,7 @@ class DDSpanTest extends DDCoreSpecification { def span when: - span = tracer.buildSpan(opName).start() + span = tracer.buildSpan("datadog", opName).start() then: span.getResourceName() == opName span.getServiceName() != "" @@ -97,7 +97,7 @@ class DDSpanTest extends DDCoreSpecification { final String resourceName = "fake" final String serviceName = "myService" span = tracer - .buildSpan(opName) + .buildSpan("datadog", opName) .withResourceName(resourceName) .withServiceName(serviceName) .start() @@ -109,7 +109,7 @@ class DDSpanTest extends DDCoreSpecification { def "duration measured in nanoseconds"() { setup: def mod = TimeUnit.MILLISECONDS.toNanos(1) - def builder = tracer.buildSpan("test") + def builder = tracer.buildSpan("datadog", "test") def start = System.nanoTime() def span = builder.start() def between = System.nanoTime() @@ -128,7 +128,7 @@ class DDSpanTest extends DDCoreSpecification { def "phasedFinish captures duration but doesn't publish immediately"() { setup: def mod = TimeUnit.MILLISECONDS.toNanos(1) - def builder = tracer.buildSpan("test") + def builder = tracer.buildSpan("datadog", "test") def start = System.nanoTime() def span = builder.start() def between = System.nanoTime() @@ -192,7 +192,7 @@ class DDSpanTest extends DDCoreSpecification { setup: def mod = TimeUnit.MILLISECONDS.toNanos(1) def start = System.currentTimeMillis() - def builder = tracer.buildSpan("test") + def builder = tracer.buildSpan("datadog", "test") .withStartTimestamp(TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis())) def span = builder.start() def between = System.currentTimeMillis() @@ -211,7 +211,7 @@ class DDSpanTest extends DDCoreSpecification { def "stopping with a timestamp disables nanotime"() { setup: def mod = TimeUnit.MILLISECONDS.toNanos(1) - def builder = tracer.buildSpan("test") + def builder = tracer.buildSpan("datadog", "test") def start = System.currentTimeMillis() def span = builder.start() def between = System.currentTimeMillis() @@ -230,7 +230,7 @@ class DDSpanTest extends DDCoreSpecification { def "stopping with a timestamp before start time yields a min duration of 1"() { setup: - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() // remove tick precision part of our internal time to match previous test condition span.finish(TimeUnit.MILLISECONDS.toMicros(TimeUnit.NANOSECONDS.toMillis(span.startTimeNano)) - 10) @@ -241,14 +241,14 @@ class DDSpanTest extends DDCoreSpecification { def "priority sampling metric set only on root span"() { setup: - def parent = tracer.buildSpan("testParent").start() - def child1 = tracer.buildSpan("testChild1").asChildOf(parent).start() + def parent = tracer.buildSpan("datadog", "testParent").start() + def child1 = tracer.buildSpan("datadog", "testChild1").asChildOf(parent).start() child1.setSamplingPriority(PrioritySampling.SAMPLER_KEEP) child1.context().lockSamplingPriority() parent.setSamplingPriority(PrioritySampling.SAMPLER_DROP) child1.finish() - def child2 = tracer.buildSpan("testChild2").asChildOf(parent).start() + def child2 = tracer.buildSpan("datadog", "testChild2").asChildOf(parent).start() child2.finish() parent.finish() @@ -264,8 +264,8 @@ class DDSpanTest extends DDCoreSpecification { def "origin set only on root span"() { setup: - def parent = tracer.buildSpan("testParent").asChildOf(extractedContext).start().context() - def child = tracer.buildSpan("testChild1").asChildOf(parent).start().context() + def parent = tracer.buildSpan("datadog", "testParent").asChildOf(extractedContext).start().context() + def child = tracer.buildSpan("datadog", "testChild1").asChildOf(parent).start().context() expect: parent.origin == "some-origin" @@ -281,8 +281,8 @@ class DDSpanTest extends DDCoreSpecification { def "isRootSpan() in and not in the context of distributed tracing"() { setup: - def root = tracer.buildSpan("root").asChildOf((AgentSpanContext) extractedContext).start() - def child = tracer.buildSpan("child").asChildOf(root).start() + def root = tracer.buildSpan("datadog", "root").asChildOf((AgentSpanContext) extractedContext).start() + def child = tracer.buildSpan("datadog", "child").asChildOf(root).start() expect: root.isRootSpan() == isTraceRootSpan @@ -300,8 +300,8 @@ class DDSpanTest extends DDCoreSpecification { def "getApplicationRootSpan() in and not in the context of distributed tracing"() { setup: - def root = tracer.buildSpan("root").asChildOf((AgentSpanContext) extractedContext).start() - def child = tracer.buildSpan("child").asChildOf(root).start() + def root = tracer.buildSpan("datadog", "root").asChildOf((AgentSpanContext) extractedContext).start() + def child = tracer.buildSpan("datadog", "child").asChildOf(root).start() expect: root.localRootSpan == root @@ -324,8 +324,8 @@ class DDSpanTest extends DDCoreSpecification { setup: def reqContextData = Mock(Closeable) def context = new TagContext().withRequestContextDataAppSec(reqContextData) - def root = tracer.buildSpan("root").asChildOf(context).start() - def child = tracer.buildSpan("child").asChildOf(root).start() + def root = tracer.buildSpan("datadog", "root").asChildOf(context).start() + def child = tracer.buildSpan("datadog", "child").asChildOf(root).start() expect: root.requestContext.getData(RequestContextSlot.APPSEC).is(reqContextData) @@ -384,7 +384,7 @@ class DDSpanTest extends DDCoreSpecification { def "broken pipe exception does not create error span"() { when: - def span = tracer.buildSpan("root").start() + def span = tracer.buildSpan("datadog", "root").start() span.addThrowable(new IOException("Broken pipe")) then: !span.isError() @@ -394,7 +394,7 @@ class DDSpanTest extends DDCoreSpecification { def "wrapped broken pipe exception does not create error span"() { when: - def span = tracer.buildSpan("root").start() + def span = tracer.buildSpan("datadog", "root").start() span.addThrowable(new RuntimeException(new IOException("Broken pipe"))) then: !span.isError() @@ -404,7 +404,7 @@ class DDSpanTest extends DDCoreSpecification { def "null exception safe to add"() { when: - def span = tracer.buildSpan("root").start() + def span = tracer.buildSpan("datadog", "root").start() span.addThrowable(null) then: !span.isError() @@ -413,7 +413,7 @@ class DDSpanTest extends DDCoreSpecification { def "set single span sampling tags"() { setup: - def span = tracer.buildSpan("testSpan").start() as DDSpan + def span = tracer.buildSpan("datadog", "testSpan").start() as DDSpan expect: span.samplingPriority() == UNSET @@ -437,7 +437,7 @@ class DDSpanTest extends DDCoreSpecification { def "error priorities should be respected"() { setup: - def span = tracer.buildSpan("testSpan").start() as DDSpan + def span = tracer.buildSpan("datadog", "testSpan").start() as DDSpan expect: !span.isError() diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy index 74cad1573f7..c372e70b7c9 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy @@ -73,7 +73,7 @@ class KnuthSamplingRateTest extends DDCoreSpecification { serviceSampler.onResponse("traces", serializer.fromJson(response)) when: - DDSpan span = tracer.buildSpan("fakeOperation") + DDSpan span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("spock") .withTag("env", "test") .ignoreActiveSpan().start() @@ -104,7 +104,7 @@ class KnuthSamplingRateTest extends DDCoreSpecification { when: Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -139,7 +139,7 @@ class KnuthSamplingRateTest extends DDCoreSpecification { when: Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -166,7 +166,7 @@ class KnuthSamplingRateTest extends DDCoreSpecification { when: Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -191,7 +191,7 @@ class KnuthSamplingRateTest extends DDCoreSpecification { when: Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("operation") + DDSpan span = tracer.buildSpan("datadog", "operation") .withServiceName("service") .withTag("env", "bar") .ignoreActiveSpan().start() @@ -215,7 +215,7 @@ class KnuthSamplingRateTest extends DDCoreSpecification { serviceSampler.onResponse("traces", serializer.fromJson(response)) when: - DDSpan span = tracer.buildSpan("fakeOperation") + DDSpan span = tracer.buildSpan("datadog", "fakeOperation") .withServiceName("spock") .withTag("env", "test") .ignoreActiveSpan().start() diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy index d67efee76b8..14926e83919 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy @@ -16,7 +16,7 @@ abstract class PendingTraceTestBase extends DDCoreSpecification { def writer = new ListWriter() def tracer = tracerBuilder().writer(writer).build() - DDSpan rootSpan = tracer.buildSpan("fakeOperation").start() + DDSpan rootSpan = tracer.buildSpan("datadog", "fakeOperation").start() PendingTrace traceCollector = rootSpan.context().traceCollector def setup() { @@ -42,7 +42,7 @@ abstract class PendingTraceTestBase extends DDCoreSpecification { def "child finishes before parent"() { when: - def child = tracer.buildSpan("child").asChildOf(rootSpan).start() + def child = tracer.buildSpan("datadog", "child").asChildOf(rootSpan).start() then: traceCollector.pendingReferenceCount == 2 @@ -68,7 +68,7 @@ abstract class PendingTraceTestBase extends DDCoreSpecification { def "parent finishes before child which holds up trace"() { when: - def child = tracer.buildSpan("child").asChildOf(rootSpan).start() + def child = tracer.buildSpan("datadog", "child").asChildOf(rootSpan).start() then: traceCollector.pendingReferenceCount == 2 @@ -98,7 +98,7 @@ abstract class PendingTraceTestBase extends DDCoreSpecification { // this shouldn't happen, but it's possible users of the api // may incorrectly add spans after the trace is reported. // in those cases we should still decrement the pending trace count - DDSpan childSpan = tracer.buildSpan("child").asChildOf(rootSpan).start() + DDSpan childSpan = tracer.buildSpan("datadog", "child").asChildOf(rootSpan).start() childSpan.finish() writer.waitForTraces(2) @@ -118,10 +118,10 @@ abstract class PendingTraceTestBase extends DDCoreSpecification { when: injectSysConfig(PARTIAL_FLUSH_MIN_SPANS, "2") def quickTracer = tracerBuilder().writer(writer).build() - def rootSpan = quickTracer.buildSpan("root").start() + def rootSpan = quickTracer.buildSpan("datadog", "root").start() def traceCollector = rootSpan.context().traceCollector - def child1 = quickTracer.buildSpan("child1").asChildOf(rootSpan).start() - def child2 = quickTracer.buildSpan("child2").asChildOf(rootSpan).start() + def child1 = quickTracer.buildSpan("datadog", "child1").asChildOf(rootSpan).start() + def child2 = quickTracer.buildSpan("datadog", "child2").asChildOf(rootSpan).start() then: traceCollector.pendingReferenceCount == 3 @@ -163,10 +163,10 @@ abstract class PendingTraceTestBase extends DDCoreSpecification { when: injectSysConfig(PARTIAL_FLUSH_MIN_SPANS, "2") def quickTracer = tracerBuilder().writer(writer).build() - def rootSpan = quickTracer.buildSpan("root").start() + def rootSpan = quickTracer.buildSpan("datadog", "root").start() def trace = rootSpan.context().traceCollector - def child1 = quickTracer.buildSpan("child1").asChildOf(rootSpan).start() - def child2 = quickTracer.buildSpan("child2").asChildOf(rootSpan).start() + def child1 = quickTracer.buildSpan("datadog", "child1").asChildOf(rootSpan).start() + def child2 = quickTracer.buildSpan("datadog", "child2").asChildOf(rootSpan).start() then: trace.pendingReferenceCount == 3 diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy index 723b7cab9f1..04fbccf41d8 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy @@ -101,7 +101,7 @@ class TraceInterceptorTest extends DDCoreSpecification { return priority } }) - tracer.buildSpan("test " + score).start().finish() + tracer.buildSpan("datadog", "test " + score).start().finish() if (score == TestInterceptor.priority) { // the interceptor didn't get added, so latch will never be released. writer.waitForTraces(1) @@ -148,7 +148,7 @@ class TraceInterceptorTest extends DDCoreSpecification { return 1 } }) - tracer.buildSpan("test").start().finish() + tracer.buildSpan("datadog", "test").start().finish() writer.waitForTraces(1) expect: diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/scopemanager/IterationSpansForkedTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/scopemanager/IterationSpansForkedTest.groovy index f9b47b55da9..7002f8efd67 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/scopemanager/IterationSpansForkedTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/scopemanager/IterationSpansForkedTest.groovy @@ -30,7 +30,7 @@ class IterationSpansForkedTest extends DDCoreSpecification { def "root iteration scope lifecycle"() { when: tracer.closePrevious(true) - def span1 = tracer.buildSpan("next1").start() + def span1 = tracer.buildSpan("datadog", "next1").start() def scope1 = tracer.activateNext(span1) then: @@ -43,7 +43,7 @@ class IterationSpansForkedTest extends DDCoreSpecification { when: tracer.closePrevious(true) - def span2 = tracer.buildSpan("next2").start() + def span2 = tracer.buildSpan("datadog", "next2").start() def scope2 = tracer.activateNext(span2) then: @@ -57,7 +57,7 @@ class IterationSpansForkedTest extends DDCoreSpecification { when: tracer.closePrevious(true) - def span3 = tracer.buildSpan("next3").start() + def span3 = tracer.buildSpan("datadog", "next3").start() def scope3 = tracer.activateNext(span3) then: @@ -83,12 +83,12 @@ class IterationSpansForkedTest extends DDCoreSpecification { def "non-root iteration scope lifecycle"() { setup: - def span0 = tracer.buildSpan("parent").start() + def span0 = tracer.buildSpan("datadog", "parent").start() def scope0 = tracer.activateSpan(span0) when: tracer.closePrevious(true) - def span1 = tracer.buildSpan("next1").start() + def span1 = tracer.buildSpan("datadog", "next1").start() def scope1 = tracer.activateNext(span1) then: @@ -101,7 +101,7 @@ class IterationSpansForkedTest extends DDCoreSpecification { when: tracer.closePrevious(true) - def span2 = tracer.buildSpan("next2").start() + def span2 = tracer.buildSpan("datadog", "next2").start() def scope2 = tracer.activateNext(span2) then: @@ -115,7 +115,7 @@ class IterationSpansForkedTest extends DDCoreSpecification { when: tracer.closePrevious(true) - def span3 = tracer.buildSpan("next3").start() + def span3 = tracer.buildSpan("datadog", "next3").start() def scope3 = tracer.activateNext(span3) then: @@ -146,7 +146,7 @@ class IterationSpansForkedTest extends DDCoreSpecification { def "nested iteration scope lifecycle"() { when: tracer.closePrevious(true) - def span1 = tracer.buildSpan("next").start() + def span1 = tracer.buildSpan("datadog", "next").start() def scope1 = tracer.activateNext(span1) then: @@ -158,12 +158,12 @@ class IterationSpansForkedTest extends DDCoreSpecification { !spanFinished(span1) when: - def span1A = tracer.buildSpan("method").start() + def span1A = tracer.buildSpan("datadog", "method").start() def scope1A = tracer.activateSpan(span1A) and: tracer.closePrevious(true) - def span1A1 = tracer.buildSpan("next").start() + def span1A1 = tracer.buildSpan("datadog", "next").start() def scope1A1 = tracer.activateNext(span1A1) then: @@ -177,7 +177,7 @@ class IterationSpansForkedTest extends DDCoreSpecification { when: tracer.closePrevious(true) - def span1A2 = tracer.buildSpan("next").start() + def span1A2 = tracer.buildSpan("datadog", "next").start() def scope1A2 = tracer.activateNext(span1A2) then: diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/taginterceptor/TagInterceptorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/taginterceptor/TagInterceptorTest.groovy index 0bb65ac4919..4c57c668f2c 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/taginterceptor/TagInterceptorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/taginterceptor/TagInterceptorTest.groovy @@ -38,7 +38,7 @@ class TagInterceptorTest extends DDCoreSpecification { .build() when: - def span = tracer.buildSpan("some span").withTag(tag, name).start() + def span = tracer.buildSpan("datadog", "some span").withTag(tag, name).start() span.finish() then: @@ -73,7 +73,7 @@ class TagInterceptorTest extends DDCoreSpecification { .build() when: - def span = tracer.buildSpan("some span").start() + def span = tracer.buildSpan("datadog", "some span").start() span.finish() then: @@ -92,7 +92,7 @@ class TagInterceptorTest extends DDCoreSpecification { def "set service name from servlet.context with context '#context'"() { when: def tracer = tracerBuilder().writer(new ListWriter()).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() span.setTag(DDTags.SERVICE_NAME, serviceName) span.setTag("servlet.context", context) @@ -118,7 +118,7 @@ class TagInterceptorTest extends DDCoreSpecification { when: injectSysConfig("service", serviceName) def tracer = tracerBuilder().writer(new ListWriter()).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() span.setTag("servlet.context", context) then: @@ -153,7 +153,7 @@ class TagInterceptorTest extends DDCoreSpecification { .build() when: - def span = tracer.buildSpan("some span").start() + def span = tracer.buildSpan("datadog", "some span").start() span.setTag("servlet.context", context) span.finish() @@ -192,7 +192,7 @@ class TagInterceptorTest extends DDCoreSpecification { Collections.emptySet(), new RuleFlags(), jeeActive)) .build() when: - def span = tracer.buildSpan("some span").start() + def span = tracer.buildSpan("datadog", "some span").start() span.setTag(InstrumentationTags.SERVLET_CONTEXT, "some-context") span.finish() @@ -213,7 +213,7 @@ class TagInterceptorTest extends DDCoreSpecification { def tracer = createSplittingTracer(Tags.MESSAGE_BUS_DESTINATION) when: - def span = tracer.buildSpan("some span") + def span = tracer.buildSpan("datadog", "some span") .withTag(Tags.PEER_SERVICE, "peer-service") .withTag(Tags.MESSAGE_BUS_DESTINATION, "some-queue") .start() @@ -231,7 +231,7 @@ class TagInterceptorTest extends DDCoreSpecification { def tracer = createSplittingTracer(Tags.MESSAGE_BUS_DESTINATION) when: - def span = tracer.buildSpan("some span").start() + def span = tracer.buildSpan("datadog", "some span").start() span.setTag(Tags.PEER_SERVICE, "peer-service") span.setTag(Tags.MESSAGE_BUS_DESTINATION, "some-queue") span.finish() @@ -249,7 +249,7 @@ class TagInterceptorTest extends DDCoreSpecification { def tracer = createSplittingTracer(Tags.MESSAGE_BUS_DESTINATION) when: - def span = tracer.buildSpan("some span") + def span = tracer.buildSpan("datadog", "some span") .withTag(Tags.MESSAGE_BUS_DESTINATION, "some-queue") .withTag(Tags.PEER_SERVICE, "peer-service") .start() @@ -271,7 +271,7 @@ class TagInterceptorTest extends DDCoreSpecification { def tracer = createSplittingTracer(Tags.MESSAGE_BUS_DESTINATION) when: - def span = tracer.buildSpan("some span").start() + def span = tracer.buildSpan("datadog", "some span").start() span.setTag(Tags.MESSAGE_BUS_DESTINATION, "some-queue") span.setTag(Tags.PEER_SERVICE, "peer-service") span.finish() @@ -288,7 +288,7 @@ class TagInterceptorTest extends DDCoreSpecification { def writer = new ListWriter() def tracer = tracerBuilder().writer(writer).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() span.setTag(DDTags.RESOURCE_NAME, name) span.finish() writer.waitForTraces(1) @@ -308,7 +308,7 @@ class TagInterceptorTest extends DDCoreSpecification { def writer = new ListWriter() def tracer = tracerBuilder().writer(writer).build() - def span = tracer.buildSpan("test").withResourceName("keep").start() + def span = tracer.buildSpan("datadog", "test").withResourceName("keep").start() span.setTag(DDTags.RESOURCE_NAME, null) span.finish() writer.waitForTraces(1) @@ -323,7 +323,7 @@ class TagInterceptorTest extends DDCoreSpecification { def "set span type"() { when: def tracer = tracerBuilder().writer(new ListWriter()).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() span.setSpanType(type) span.finish() @@ -341,7 +341,7 @@ class TagInterceptorTest extends DDCoreSpecification { when: def writer = new ListWriter() def tracer = tracerBuilder().writer(writer).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() span.setTag(DDTags.SPAN_TYPE, type) span.finish() writer.waitForTraces(1) @@ -360,7 +360,7 @@ class TagInterceptorTest extends DDCoreSpecification { when: def writer = new ListWriter() def tracer = tracerBuilder().writer(writer).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() then: span.getTag(ANALYTICS_SAMPLE_RATE) == null @@ -399,7 +399,7 @@ class TagInterceptorTest extends DDCoreSpecification { def "set priority sampling via tag"() { when: def tracer = tracerBuilder().writer(new ListWriter()).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() span.setTag(tag, value) then: @@ -443,7 +443,7 @@ class TagInterceptorTest extends DDCoreSpecification { when: def writer = new ListWriter() def tracer = tracerBuilder().writer(writer).build() - def span = tracer.buildSpan("test").start() + def span = tracer.buildSpan("datadog", "test").start() span.setTag(Tags.ERROR, error) span.finish() writer.waitForTraces(1) @@ -466,7 +466,7 @@ class TagInterceptorTest extends DDCoreSpecification { def tracer = tracerBuilder().writer(writer).build() when: - def span = tracer.buildSpan("interceptor.test").withTag(name, value).start() + def span = tracer.buildSpan("datadog", "interceptor.test").withTag(name, value).start() span.finish() writer.waitForTraces(1) @@ -489,7 +489,7 @@ class TagInterceptorTest extends DDCoreSpecification { def tracer = tracerBuilder().writer(writer).build() when: - def span = tracer.buildSpan("decorator.test").withTag("sn.tag1", "some val").start() + def span = tracer.buildSpan("datadog", "decorator.test").withTag("sn.tag1", "some val").start() span.finish() writer.waitForTraces(1) @@ -497,13 +497,13 @@ class TagInterceptorTest extends DDCoreSpecification { span.serviceName == "some val" when: - span = tracer.buildSpan("decorator.test").withTag("servlet.context", "/my-servlet").start() + span = tracer.buildSpan("datadog", "decorator.test").withTag("servlet.context", "/my-servlet").start() then: span.serviceName == "my-servlet" when: - span = tracer.buildSpan("decorator.test").withTag("error", "true").start() + span = tracer.buildSpan("datadog", "decorator.test").withTag("error", "true").start() span.finish() writer.waitForTraces(2) @@ -511,7 +511,7 @@ class TagInterceptorTest extends DDCoreSpecification { span.error when: - span = tracer.buildSpan("decorator.test").withTag(Tags.DB_STATEMENT, "some-statement").start() + span = tracer.buildSpan("datadog", "decorator.test").withTag(Tags.DB_STATEMENT, "some-statement").start() span.finish() writer.waitForTraces(3) @@ -533,7 +533,7 @@ class TagInterceptorTest extends DDCoreSpecification { .build() when: - def span = tracer.buildSpan("some span").withTag(DDTags.SERVICE_NAME, "other-service").start() + def span = tracer.buildSpan("datadog", "some span").withTag(DDTags.SERVICE_NAME, "other-service").start() span.finish() then: @@ -561,7 +561,7 @@ class TagInterceptorTest extends DDCoreSpecification { .build() when: - def span = tracer.buildSpan("some span").withTag(tag, name).start() + def span = tracer.buildSpan("datadog", "some span").withTag(tag, name).start() span.finish() then: @@ -585,11 +585,11 @@ class TagInterceptorTest extends DDCoreSpecification { .sampler(new AllSampler()) .build() - AgentSpan parent = tracer.buildSpan("parent") + AgentSpan parent = tracer.buildSpan("datadog", "parent") .withServiceName("parent").start() when: "the service name doesn't match the parent" - AgentSpan child = tracer.buildSpan("child") + AgentSpan child = tracer.buildSpan("datadog", "child") .withServiceName("child") .asChildOf(parent) .start() @@ -622,7 +622,7 @@ class TagInterceptorTest extends DDCoreSpecification { .build() when: - AgentSpan span = tracer.buildSpan("test").start() + AgentSpan span = tracer.buildSpan("datadog", "test").start() then: span.getSamplingPriority() == null @@ -649,7 +649,7 @@ class TagInterceptorTest extends DDCoreSpecification { setup: def tracer = tracerBuilder().writer(new ListWriter()).build() - def span = tracer.buildSpan("fakeOperation").start() + def span = tracer.buildSpan("datadog", "fakeOperation").start() meta.each { span.setTag(it.key, (String) it.value) } @@ -681,7 +681,7 @@ class TagInterceptorTest extends DDCoreSpecification { setup: def tracer = tracerBuilder().writer(new ListWriter()).build() - def span = tracer.buildSpan("fakeOperation").start() + def span = tracer.buildSpan("datadog", "fakeOperation").start() when: diff --git a/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy index fc254458920..6ab958c3adc 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy @@ -28,7 +28,7 @@ class LLMObsSpanMapperTest extends DDCoreSpecification { // Create a real LLMObs span using the tracer - def llmSpan = tracer.buildSpan("openai.request") + def llmSpan = tracer.buildSpan("datadog", "openai.request") .withResourceName("createCompletion") .withTag("_ml_obs_tag.span.kind", Tags.LLMOBS_LLM_SPAN_KIND) .withTag("_ml_obs_tag.model_name", "gpt-4") @@ -183,14 +183,14 @@ class LLMObsSpanMapperTest extends DDCoreSpecification { def mapper = new LLMObsSpanMapper() def tracer = tracerBuilder().writer(new ListWriter()).build() - def regularSpan1 = tracer.buildSpan("http.request") + def regularSpan1 = tracer.buildSpan("datadog", "http.request") .withResourceName("GET /api/users") .withTag("http.method", "GET") .withTag("http.url", "https://example.com/api/users") .start() regularSpan1.finish() - def regularSpan2 = tracer.buildSpan("database.query") + def regularSpan2 = tracer.buildSpan("datadog", "database.query") .withResourceName("SELECT * FROM users") .withTag("db.type", "postgresql") .start() @@ -215,7 +215,7 @@ class LLMObsSpanMapperTest extends DDCoreSpecification { def tracer = tracerBuilder().writer(new ListWriter()).build() // First trace with 2 LLMObs spans - def llmSpan1 = tracer.buildSpan("chat-completion-1") + def llmSpan1 = tracer.buildSpan("datadog", "chat-completion-1") .withTag("_ml_obs_tag.span.kind", Tags.LLMOBS_LLM_SPAN_KIND) .withTag("_ml_obs_tag.model_name", "gpt-4") .withTag("_ml_obs_tag.model_provider", "openai") @@ -223,7 +223,7 @@ class LLMObsSpanMapperTest extends DDCoreSpecification { llmSpan1.setSpanType(InternalSpanTypes.LLMOBS) llmSpan1.finish() - def llmSpan2 = tracer.buildSpan("chat-completion-2") + def llmSpan2 = tracer.buildSpan("datadog", "chat-completion-2") .withTag("_ml_obs_tag.span.kind", Tags.LLMOBS_LLM_SPAN_KIND) .withTag("_ml_obs_tag.model_name", "gpt-3.5") .withTag("_ml_obs_tag.model_provider", "openai") @@ -232,7 +232,7 @@ class LLMObsSpanMapperTest extends DDCoreSpecification { llmSpan2.finish() // Second trace with 1 LLMObs span - def llmSpan3 = tracer.buildSpan("chat-completion-3") + def llmSpan3 = tracer.buildSpan("datadog", "chat-completion-3") .withTag("_ml_obs_tag.span.kind", Tags.LLMOBS_LLM_SPAN_KIND) .withTag("_ml_obs_tag.model_name", "claude-3") .withTag("_ml_obs_tag.model_provider", "anthropic") diff --git a/dd-trace-core/src/test/java/datadog/trace/common/sampling/ParentBasedAlwaysOnSamplerTest.java b/dd-trace-core/src/test/java/datadog/trace/common/sampling/ParentBasedAlwaysOnSamplerTest.java index e515975edfe..929a604aace 100644 --- a/dd-trace-core/src/test/java/datadog/trace/common/sampling/ParentBasedAlwaysOnSamplerTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/common/sampling/ParentBasedAlwaysOnSamplerTest.java @@ -40,7 +40,7 @@ void alwaysSamplesSpans() { ParentBasedAlwaysOnSampler sampler = new ParentBasedAlwaysOnSampler(); CoreTracer tracer = buildTracer(sampler); - DDSpan span = (DDSpan) tracer.buildSpan("test").start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "test").start(); try { assertTrue(sampler.sample(span)); } finally { @@ -53,7 +53,7 @@ void setsSamplingPriorityToSamplerKeep() { ParentBasedAlwaysOnSampler sampler = new ParentBasedAlwaysOnSampler(); CoreTracer tracer = buildTracer(sampler); - DDSpan span = (DDSpan) tracer.buildSpan("test").start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "test").start(); try { sampler.setSamplingPriority(span); assertEquals(SAMPLER_KEEP, span.getSamplingPriority()); @@ -67,9 +67,10 @@ void childSpanInheritsSamplingPriorityFromLocalParent() { ParentBasedAlwaysOnSampler sampler = new ParentBasedAlwaysOnSampler(); CoreTracer tracer = buildTracer(sampler); - DDSpan rootSpan = (DDSpan) tracer.buildSpan("root").start(); + DDSpan rootSpan = (DDSpan) tracer.buildSpan("datadog", "root").start(); sampler.setSamplingPriority(rootSpan); - DDSpan childSpan = (DDSpan) tracer.buildSpan("child").asChildOf(rootSpan.context()).start(); + DDSpan childSpan = + (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(rootSpan.context()).start(); try { assertEquals(SAMPLER_KEEP, rootSpan.getSamplingPriority()); assertEquals(SAMPLER_KEEP, childSpan.getSamplingPriority()); @@ -95,7 +96,7 @@ void childSpanInheritsSamplingDecisionFromRemoteParent(int parentPriority) { new ExtractedContext( DDTraceId.ONE, 2, parentPriority, null, PropagationTags.factory().empty(), DATADOG); - DDSpan span = (DDSpan) tracer.buildSpan("child").asChildOf(extractedContext).start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(extractedContext).start(); try { assertEquals(parentPriority, span.getSamplingPriority()); } finally { diff --git a/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java b/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java index 05c9cd87222..016b7ceda8f 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/CoreSpanBuilderTest.java @@ -78,7 +78,8 @@ void buildComplexSpan() { tags.put("2", "fakeString"); tags.put("3", 42.0); - AgentTracer.SpanBuilder builder = tracer.buildSpan(expectedName).withServiceName("foo"); + AgentTracer.SpanBuilder builder = + tracer.buildSpan("datadog", expectedName).withServiceName("foo"); for (Map.Entry entry : tags.entrySet()) { builder = builder.withTag(entry.getKey(), entry.getValue()); } diff --git a/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest.java b/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest.java index 3fed68f16eb..897b80dc625 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/CoreTracerTest.java @@ -199,8 +199,8 @@ void rootTagsAppliedOnlyToRootSpans() { Map localRootSpanTags = new LinkedHashMap<>(); localRootSpanTags.put("only_root", "value"); CoreTracer tracer = tracerBuilder().localRootSpanTags(localRootSpanTags).build(); - AgentSpan root = tracer.buildSpan("my_root").start(); - AgentSpan child = tracer.buildSpan("my_child").asChildOf(root.context()).start(); + AgentSpan root = tracer.buildSpan("datadog", "my_root").start(); + AgentSpan child = tracer.buildSpan("datadog", "my_child").asChildOf(root.context()).start(); try { assertTrue(root.getTags().containsKey("only_root")); assertFalse(child.getTags().containsKey("only_root")); @@ -216,7 +216,7 @@ void prioritySamplingWhenSpanFinishes() throws Exception { ListWriter writer = new ListWriter(); CoreTracer tracer = tracerBuilder().writer(writer).build(); try { - DDSpan span = (DDSpan) tracer.buildSpan("operation").start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "operation").start(); span.finish(); writer.waitForTraces(1); assertEquals(PrioritySampling.SAMPLER_KEEP, (int) span.getSamplingPriority()); @@ -230,8 +230,9 @@ void prioritySamplingSetWhenChildSpanComplete() throws Exception { ListWriter writer = new ListWriter(); CoreTracer tracer = tracerBuilder().writer(writer).build(); try { - DDSpan root = (DDSpan) tracer.buildSpan("operation").start(); - DDSpan child = (DDSpan) tracer.buildSpan("my_child").asChildOf(root.context()).start(); + DDSpan root = (DDSpan) tracer.buildSpan("datadog", "operation").start(); + DDSpan child = + (DDSpan) tracer.buildSpan("datadog", "my_child").asChildOf(root.context()).start(); root.finish(); assertNull(root.getSamplingPriority()); @@ -476,12 +477,13 @@ void testDdVersionExistsOnlyIfServiceEqDdService() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); try { DDSpan span = - (DDSpan) tracer.buildSpan("def").withTag(GeneralConfig.SERVICE_NAME, "foo").start(); + (DDSpan) + tracer.buildSpan("datadog", "def").withTag(GeneralConfig.SERVICE_NAME, "foo").start(); span.finish(); assertEquals("foo", span.getServiceName()); assertFalse(span.getTags().containsKey("version")); - DDSpan span2 = (DDSpan) tracer.buildSpan("abc").start(); + DDSpan span2 = (DDSpan) tracer.buildSpan("datadog", "abc").start(); span2.finish(); assertEquals("dd_service_name", span2.getServiceName()); assertEquals("1.0.0", String.valueOf(span2.getTags().get("version"))); @@ -494,7 +496,7 @@ void testDdVersionExistsOnlyIfServiceEqDdService() { void flushesOnTracerCloseIfConfiguredToDoSo() { WriterWithExplicitFlush writer = new WriterWithExplicitFlush(); CoreTracer tracer = tracerBuilder().writer(writer).flushOnClose(true).build(); - tracer.buildSpan("my_span").start().finish(); + tracer.buildSpan("datadog", "my_span").start().finish(); tracer.close(); assertFalse(writer.flushedTraces.isEmpty()); } @@ -553,9 +555,9 @@ void verifyNoFilteringOfServiceEnvWhenMismatchedWithDdServiceDdEnv( void serviceNameSourceIsRecordedWhenUsingTwoParameterSetServiceName() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); try { - DDSpan span = (DDSpan) tracer.buildSpan("operation").start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "operation").start(); span.setServiceName("custom-service", "my-integration"); - DDSpan child = (DDSpan) tracer.buildSpan("child").start(); + DDSpan child = (DDSpan) tracer.buildSpan("datadog", "child").start(); child.finish(); span.finish(); @@ -570,7 +572,7 @@ void serviceNameSourceIsRecordedWhenUsingTwoParameterSetServiceName() { void serviceNameSourceIsMarkedAsManualWhenUsingOneParameterSetServiceName() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); try { - DDSpan span = (DDSpan) tracer.buildSpan("operation").start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "operation").start(); span.setServiceName("custom-service", "my-integration"); span.setServiceName("another"); span.finish(); @@ -586,7 +588,7 @@ void serviceNameSourceIsMarkedAsManualWhenUsingOneParameterSetServiceName() { void serviceNameSourceIsMissingWhenNotExplicitlySettingServiceName() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); try { - DDSpan span = (DDSpan) tracer.buildSpan("operation").start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "operation").start(); span.finish(); assertEquals(tracer.serviceName, span.getServiceName()); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextPropagationTagsTest.java b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextPropagationTagsTest.java index 12cc53e8abb..e56b8a92cbe 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextPropagationTagsTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextPropagationTagsTest.java @@ -57,7 +57,7 @@ void updateSpanPropagationTags( AgentSpanContext extracted = new ExtractedContext(DDTraceId.from(123), 456, priority, "789", propagationTags, DATADOG) .withRequestContextDataAppSec("dummy"); - DDSpan span = (DDSpan) tracer.buildSpan("top").asChildOf(extracted).start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "top").asChildOf(extracted).start(); PropagationTags dd = span.context().getPropagationTags(); span.setSamplingPriority(newPriority, newMechanism); @@ -89,9 +89,10 @@ void updateTracePropagationTags( AgentSpanContext extracted = new ExtractedContext(DDTraceId.from(123), 456, priority, "789", propagationTags, DATADOG) .withRequestContextDataAppSec("dummy"); - DDSpan rootSpan = (DDSpan) tracer.buildSpan("top").asChildOf(extracted).start(); + DDSpan rootSpan = (DDSpan) tracer.buildSpan("datadog", "top").asChildOf(extracted).start(); PropagationTags ddRoot = rootSpan.context().getPropagationTags(); - DDSpan span = (DDSpan) tracer.buildSpan("current").asChildOf(rootSpan.context()).start(); + DDSpan span = + (DDSpan) tracer.buildSpan("datadog", "current").asChildOf(rootSpan.context()).start(); span.setSamplingPriority(newPriority, newMechanism); @@ -114,7 +115,7 @@ void forceKeepSpanPropagationTags( AgentSpanContext extracted = new ExtractedContext(DDTraceId.from(123), 456, priority, "789", propagationTags, DATADOG) .withRequestContextDataAppSec("dummy"); - DDSpan span = (DDSpan) tracer.buildSpan("top").asChildOf(extracted).start(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "top").asChildOf(extracted).start(); PropagationTags dd = span.context().getPropagationTags(); span.context().forceKeep(); @@ -142,9 +143,10 @@ void forceKeepTracePropagationTags( AgentSpanContext extracted = new ExtractedContext(DDTraceId.from(123), 456, priority, "789", propagationTags, DATADOG) .withRequestContextDataAppSec("dummy"); - DDSpan rootSpan = (DDSpan) tracer.buildSpan("top").asChildOf(extracted).start(); + DDSpan rootSpan = (DDSpan) tracer.buildSpan("datadog", "top").asChildOf(extracted).start(); PropagationTags ddRoot = rootSpan.context().getPropagationTags(); - DDSpan span = (DDSpan) tracer.buildSpan("current").asChildOf(rootSpan.context()).start(); + DDSpan span = + (DDSpan) tracer.buildSpan("datadog", "current").asChildOf(rootSpan.context()).start(); span.context().forceKeep(); diff --git a/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java b/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java index b4edeed98de..49ae21e40a1 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/TraceCorrelationTest.java @@ -24,7 +24,7 @@ void getTraceIdWithoutTrace(boolean log128bTraceId) { TRACE_128_BIT_TRACEID_LOGGING_ENABLED, String.valueOf(log128bTraceId)); CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); - AgentSpan span = tracer.buildSpan("test").start(); + AgentSpan span = tracer.buildSpan("datadog", "test").start(); AgentScope scope = tracer.activateSpan(span); scope.close(); @@ -43,7 +43,7 @@ void getTraceIdWithTrace(boolean log128bTraceId) { TRACE_128_BIT_TRACEID_LOGGING_ENABLED, String.valueOf(log128bTraceId)); CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); - AgentSpan span = tracer.buildSpan("test").start(); + AgentSpan span = tracer.buildSpan("datadog", "test").start(); AgentScope scope = tracer.activateSpan(span); DDTraceId traceId = ((DDSpan) scope.span()).getTraceId(); @@ -58,7 +58,7 @@ void getTraceIdWithTrace(boolean log128bTraceId) { @Test void getSpanIdWithoutSpan() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); - AgentSpan span = tracer.buildSpan("test").start(); + AgentSpan span = tracer.buildSpan("datadog", "test").start(); AgentScope scope = tracer.activateSpan(span); scope.close(); @@ -71,7 +71,7 @@ void getSpanIdWithoutSpan() { @Test void getSpanIdWithTrace() { CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); - AgentSpan span = tracer.buildSpan("test").start(); + AgentSpan span = tracer.buildSpan("datadog", "test").start(); AgentScope scope = tracer.activateSpan(span); assertEquals(Long.toString(((DDSpan) scope.span()).getSpanId()), tracer.getSpanId()); diff --git a/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy b/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy index 37a9a7dd289..b2d538a26b4 100644 --- a/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy +++ b/dd-trace-core/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy @@ -67,7 +67,7 @@ class DDApiIntegrationTest extends AbstractTraceAgentTest { def setup() { tracer = CoreTracer.builder().writer(new ListWriter()).build() - span = tracer.buildSpan("fakeOperation").start() + span = tracer.buildSpan("datadog", "fakeOperation").start() Thread.sleep(1) span.finish() } diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DefaultLogHandlerTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DefaultLogHandlerTest.groovy index a26db4d7ee9..a4617c77da9 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DefaultLogHandlerTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DefaultLogHandlerTest.groovy @@ -19,7 +19,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the error passed in the fields"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final String differentMessage = "differentMessage" final Throwable error = new Throwable(errorMessage) @@ -38,7 +38,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the error passed in the fields when called with timestamp"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final String differentMessage = "differentMessage" final Throwable error = new Throwable(errorMessage) @@ -57,7 +57,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the message passed in the fields but the span is not an error"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final Map fields = new HashMap<>() fields.put(Fields.MESSAGE, errorMessage) @@ -72,7 +72,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the message passed in the fields when called with timestamp but the span is not an error"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final Map fields = new HashMap<>() fields.put(Fields.MESSAGE, errorMessage) @@ -87,7 +87,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the message passed in the fields when the span is error"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final Map fields = new HashMap<>() span.setError(true) @@ -103,7 +103,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the message passed in the fields when called with timestamp when the span is error"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final Map fields = new HashMap<>() span.setError(true) @@ -119,7 +119,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the message passed in the fields when the event is error"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final Map fields = new HashMap<>() fields.put(Fields.EVENT, "error") @@ -135,7 +135,7 @@ class DefaultLogHandlerTest extends DDSpecification { def "handles correctly the message passed in the fields when called with timestampwhen the event is error"() { setup: final LogHandler underTest = new DefaultLogHandler() - final DDSpan span = tracer.buildSpan("op name").withServiceName("foo").start() + final DDSpan span = tracer.buildSpan("datadog", "op name").withServiceName("foo").start() final String errorMessage = "errorMessage" final Map fields = new HashMap<>() fields.put(Fields.EVENT, "error") diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/IterationSpansForkedTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/IterationSpansForkedTest.groovy index cf61c263206..80471a67231 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/IterationSpansForkedTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/IterationSpansForkedTest.groovy @@ -32,7 +32,7 @@ class IterationSpansForkedTest extends DDSpecification { def "root iteration scope lifecycle"() { when: coreTracer.closePrevious(true) - def span1 = coreTracer.buildSpan("next1").start() + def span1 = coreTracer.buildSpan("datadog", "next1").start() def scope1 = coreTracer.activateNext(span1) then: @@ -45,7 +45,7 @@ class IterationSpansForkedTest extends DDSpecification { when: coreTracer.closePrevious(true) - def span2 = coreTracer.buildSpan("next2").start() + def span2 = coreTracer.buildSpan("datadog", "next2").start() def scope2 = coreTracer.activateNext(span2) then: @@ -59,7 +59,7 @@ class IterationSpansForkedTest extends DDSpecification { when: coreTracer.closePrevious(true) - def span3 = coreTracer.buildSpan("next3").start() + def span3 = coreTracer.buildSpan("datadog", "next3").start() def scope3 = coreTracer.activateNext(span3) writer.waitForTraces(2) @@ -83,12 +83,12 @@ class IterationSpansForkedTest extends DDSpecification { def "non-root iteration scope lifecycle"() { setup: - def span0 = coreTracer.buildSpan("parent").start() + def span0 = coreTracer.buildSpan("datadog", "parent").start() def scope0 = coreTracer.activateSpan(span0) when: coreTracer.closePrevious(true) - def span1 = coreTracer.buildSpan("next1").start() + def span1 = coreTracer.buildSpan("datadog", "next1").start() def scope1 = coreTracer.activateNext(span1) then: @@ -101,7 +101,7 @@ class IterationSpansForkedTest extends DDSpecification { when: coreTracer.closePrevious(true) - def span2 = coreTracer.buildSpan("next2").start() + def span2 = coreTracer.buildSpan("datadog", "next2").start() def scope2 = coreTracer.activateNext(span2) then: @@ -115,7 +115,7 @@ class IterationSpansForkedTest extends DDSpecification { when: coreTracer.closePrevious(true) - def span3 = coreTracer.buildSpan("next3").start() + def span3 = coreTracer.buildSpan("datadog", "next3").start() def scope3 = coreTracer.activateNext(span3) then: @@ -142,7 +142,7 @@ class IterationSpansForkedTest extends DDSpecification { def "nested iteration scope lifecycle"() { when: coreTracer.closePrevious(true) - def span1 = coreTracer.buildSpan("next1").start() + def span1 = coreTracer.buildSpan("datadog", "next1").start() def scope1 = coreTracer.activateNext(span1) then: @@ -154,12 +154,12 @@ class IterationSpansForkedTest extends DDSpecification { !spanFinished(span1) when: - def span1A = coreTracer.buildSpan("methodA").start() + def span1A = coreTracer.buildSpan("datadog", "methodA").start() def scope1A = coreTracer.activateSpan(span1A) and: coreTracer.closePrevious(true) - def span1A1 = coreTracer.buildSpan("next1A1").start() + def span1A1 = coreTracer.buildSpan("datadog", "next1A1").start() def scope1A1 = coreTracer.activateNext(span1A1) then: @@ -173,7 +173,7 @@ class IterationSpansForkedTest extends DDSpecification { when: coreTracer.closePrevious(true) - def span1A2 = coreTracer.buildSpan("next1A2").start() + def span1A2 = coreTracer.buildSpan("datadog", "next1A2").start() def scope1A2 = coreTracer.activateNext(span1A2) then: diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java index edf781eb092..14a5b5d6d21 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java @@ -346,17 +346,6 @@ default AgentSpan blackholeSpan() { return new BlackHoleSpan(active != null ? active.getTraceId() : DDTraceId.ZERO); } - /** Deprecated. Use {@link #buildSpan(String, CharSequence)} instead. */ - @Deprecated - default SpanBuilder buildSpan(CharSequence spanName) { - return buildSpan("datadog", spanName); - } - - @Deprecated - default SpanBuilder singleSpanBuilder(CharSequence spanName) { - return singleSpanBuilder("datadog", spanName); - } - /** * Returns a SpanBuilder that can be used to produce multiple spans. To minimize overhead, use * of {@link #singleSpanBuilder(String, CharSequence)} is preferred when only a single span is From a7c5921a222b5c276799e97890ddc03d6f07fab3 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Mon, 11 May 2026 18:42:56 +0200 Subject: [PATCH 003/478] build(gradle): Bump bnd plugin (osgi) to 7.2.3 (#11341) build(gradle): Bump bnd plugin (osgi) to 7.2.3 Version 6.x used the deprecated and then removed `Convention` API, (Jar.getConvention()), bnd now uses the task extension API. Also, bnd 7.x needs Java 17, which is now enforced to run Gradle. Merge branch 'master' into bdu/osgi-plugin-bump Co-authored-by: devflow.devflow-routing-intake --- dd-smoke-tests/osgi/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-smoke-tests/osgi/build.gradle b/dd-smoke-tests/osgi/build.gradle index 30eff243064..ab5752613ce 100644 --- a/dd-smoke-tests/osgi/build.gradle +++ b/dd-smoke-tests/osgi/build.gradle @@ -1,7 +1,7 @@ import aQute.bnd.gradle.Bundle plugins { - id 'biz.aQute.bnd.builder' version '6.4.0' apply true + id 'biz.aQute.bnd.builder' version '7.2.3' apply true } repositories { From 594ddf1d3e69f82de82e701aa8117e76b3427433 Mon Sep 17 00:00:00 2001 From: mhlidd Date: Mon, 11 May 2026 10:12:29 -0700 Subject: [PATCH 004/478] Send Aliases for `update_central_configurations_version_range_v2` job (#11331) Send Aliases for `update_central_configurations_version_range_v2` job Merge branch 'master' into mhlidd-patch-1 Co-authored-by: devflow.devflow-routing-intake --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 369aa9b69c7..c8c469c39bb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1129,3 +1129,4 @@ update_central_configurations_version_range_v2: LOCAL_JSON_PATH: "metadata/supported-configurations.json" LANGUAGE_NAME: "java" MULTIPLE_RELEASE_LINES: "false" + SEND_ALIASES: "true" From cd95f5335d386b017ac3deaa39ef581cb10ff456 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Mon, 11 May 2026 20:02:49 +0200 Subject: [PATCH 005/478] Remove redundant manual proto `srcDir` from protobuf-3.0 instrumentation (#11343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit build(gradle): remove redundant sourceSets block in protobuf-3.0 Plugin 0.10.0 automatically registers generated proto sources into the corresponding source sets. The manual srcDir addition was required for plugin 0.8.18 but is now redundant — keeping it on top of the plugin's own wiring actively breaks source set registration (review comment on #11310). Co-Authored-By: Claude Sonnet 4.6 type: EOF Co-authored-by: brice.dutheil --- dd-java-agent/instrumentation/protobuf-3.0/build.gradle | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dd-java-agent/instrumentation/protobuf-3.0/build.gradle b/dd-java-agent/instrumentation/protobuf-3.0/build.gradle index c20b9434017..d411c3b12d3 100644 --- a/dd-java-agent/instrumentation/protobuf-3.0/build.gradle +++ b/dd-java-agent/instrumentation/protobuf-3.0/build.gradle @@ -33,11 +33,3 @@ dependencies { compileOnly group: 'com.google.protobuf', name: 'protobuf-java', version: '3.0.0' testImplementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.0.0' } - -sourceSets { - test { - java { - srcDir layout.buildDirectory.dir("generated/sources/proto/test/java") - } - } -} From f53e5c2ddaa8610591fccfad4ddbb4b6b67d9967 Mon Sep 17 00:00:00 2001 From: "gh-worker-campaigns-3e9aa4[bot]" <244854796+gh-worker-campaigns-3e9aa4[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 18:07:38 +0000 Subject: [PATCH 006/478] chore(ci) update one-pipeline (#11346) chore(ci) update one-pipeline Co-authored-by: devflow.devflow-routing-intake --- .gitlab/one-pipeline.locked.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/one-pipeline.locked.yml b/.gitlab/one-pipeline.locked.yml index ec12afd12e8..c863cb6b6b7 100644 --- a/.gitlab/one-pipeline.locked.yml +++ b/.gitlab/one-pipeline.locked.yml @@ -1,4 +1,4 @@ # DO NOT EDIT THIS FILE MANUALLY # This file is auto-generated by automation. include: - - remote: https://gitlab-templates.ddbuild.io/libdatadog/one-pipeline/ca/ca5cee1b4e12e6f5a3d789807b9063eec3995d24d0dd4e644b232ed4e5cc01eb/one-pipeline.yml + - remote: https://gitlab-templates.ddbuild.io/libdatadog/one-pipeline/ca/08b1c626970e6f9f6d0c1084b5f9ce92921646c3b349ee1a4af9bd3fc505f7b3/one-pipeline.yml From 1da0748d4bbdf6c636819f2a697b0d6f3758110a Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Mon, 11 May 2026 20:16:09 +0200 Subject: [PATCH 007/478] build(gradle): replace SelfResolvingDependency by ExternalModuleDependency (#11340) build(gradle): replace SelfResolvingDependency by ExternalModuleDependency `SelfResolvingDependency` was removed in Gradle 9. The original POM filter in `publish.gradle` excluded file-based dependencies by negating instanceof `SelfResolvingDependency`, which `FileCollectionDependency` implemented in Gradle 8. This change replaces it with a positive check for `ProjectDependency` and `ExternalModuleDependency`, which are the two types that actually have Maven coordinates and belong in a published POM. Merge branch 'master' into bdu/SelfResolvingDependency-is-gone-in-gradle9 Co-authored-by: devflow.devflow-routing-intake --- gradle/publish.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/publish.gradle b/gradle/publish.gradle index 699e130ed22..a975be8a06b 100644 --- a/gradle/publish.gradle +++ b/gradle/publish.gradle @@ -38,7 +38,7 @@ publishing { def dependenciesNode = xml.asNode().appendNode('dependencies') project.configurations.api.allDependencies.each { - if ((it instanceof ProjectDependency) || !(it instanceof SelfResolvingDependency)) { + if (it instanceof ProjectDependency || it instanceof ExternalModuleDependency) { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) From 9605482ad91087509e502e668806214c4e1b2e5e Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Mon, 11 May 2026 15:31:04 -0400 Subject: [PATCH 008/478] Deprecate local macrobenchmarks (#11344) Deprecate local macrobenchmarks Co-authored-by: sarah.chen --- .gitlab-ci.yml | 2 - .../benchmarks/bp-runner.fail-on-breach.yml | 61 -------- .gitlab/macrobenchmarks.yml | 146 ------------------ 3 files changed, 209 deletions(-) delete mode 100644 .gitlab/benchmarks/bp-runner.fail-on-breach.yml delete mode 100644 .gitlab/macrobenchmarks.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c8c469c39bb..5290d93abd0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,6 @@ include: - local: ".gitlab/one-pipeline.locked.yml" - local: ".gitlab/benchmarks.yml" - - local: ".gitlab/macrobenchmarks.yml" - local: ".gitlab/exploration-tests.yml" - local: ".gitlab/ci-visibility-tests.yml" - project: 'DataDog/apm-reliability/apm-sdks-benchmarks' @@ -36,7 +35,6 @@ stages: - java-post-pr-comment - shared-pipeline - benchmarks - - macrobenchmarks - tests - test-summary - exploration-tests diff --git a/.gitlab/benchmarks/bp-runner.fail-on-breach.yml b/.gitlab/benchmarks/bp-runner.fail-on-breach.yml deleted file mode 100644 index cef01aad922..00000000000 --- a/.gitlab/benchmarks/bp-runner.fail-on-breach.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Auto-generated SLO Thresholds -# Generated: 2026-03-31 -# -# Generation Strategy: tight -# Formula: CI_bound / (1 ± T) (T = 10.0%) -# -# SLO Checking: -# - BREACH: 90% CI boundary crosses threshold -# - WARNING: 90% CI boundary crosses warning_threshold (constant) -# -# DO NOT EDIT MANUALLY - Regenerate using: -# benchmark_analyzer generate slos --help -# -# link to documentation on autogenerated thresholds https://github.com/DataDog/relenv-benchmark-analyzer/blob/main/README.md#generate-slo-thresholds - -experiments: - - name: Run SLO breach check - steps: - - name: SLO breach check - run: fail_on_breach - # https://datadoghq.atlassian.net/wiki/x/LgI1LgE#How-to-choose-a-warning-range-for-pre-release-gates%3F - warning_range: 10 - # File spec - # https://datadoghq.atlassian.net/wiki/x/LgI1LgE#Specification - # Measurements - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario - scenarios: - # Note that thresholds there are choosen based the confidence interval with a 10% adjustment. - - # Standard macrobenchmarks - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=normal_operation%2Fonly-tracing&trendsType=scenario - - name: normal_operation/only-tracing - thresholds: - - agg_http_req_duration_p50 < 2.526 ms - - agg_http_req_duration_p99 < 8.5 ms - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=normal_operation%2Fotel-latest&trendsType=scenario - - name: normal_operation/otel-latest - thresholds: - - agg_http_req_duration_p50 < 2.5 ms - - agg_http_req_duration_p99 < 10 ms - - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=high_load%2Fonly-tracing&trendsType=scenario - - name: high_load/only-tracing - thresholds: - - throughput > 1100.0 op/s - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=high_load%2Fotel-latest&trendsType=scenario - - name: high_load/otel-latest - thresholds: - - throughput > 1100.0 op/s - - # Startup macrobenchmarks - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=startup%3Apetclinic%3Atracing%3AAgent.start&trendsType=scenario - - name: "startup:petclinic:tracing:Agent.start" - thresholds: - - execution_time < 1255.96 ms # generated with --significant-impact-threshold 0.15 - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=startup%3Apetclinic%3Aprofiling%3AAgent.start&trendsType=scenario - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=startup%3Apetclinic%3Aappsec%3AAgent.start&trendsType=scenario - # https://benchmarking.us1.prod.dog/trends?projectId=4&branch=master&trendsTab=per_scenario&scenario=startup%3Apetclinic%3Aiast%3AAgent.start&trendsType=scenario - - name: "startup:petclinic:(profiling|appsec|iast):Agent.start" - thresholds: - - execution_time < 1483.46 ms # generated with --significant-impact-threshold 0.15 diff --git a/.gitlab/macrobenchmarks.yml b/.gitlab/macrobenchmarks.yml deleted file mode 100644 index b1c5681fb5b..00000000000 --- a/.gitlab/macrobenchmarks.yml +++ /dev/null @@ -1,146 +0,0 @@ -include: - - project: 'DataDog/benchmarking-platform-tools' - file: 'images/templates/gitlab/notify-slo-breaches.template.yml' - - project: 'DataDog/benchmarking-platform-tools' - file: 'images/templates/gitlab/check-slo-breaches.template.yml' - -.macrobenchmarks: - stage: macrobenchmarks - rules: - - if: $POPULATE_CACHE - when: never - - if: ($NIGHTLY_BENCHMARKS || $CI_PIPELINE_SOURCE != "schedule") && $CI_COMMIT_REF_NAME == "master" - when: always - interruptible: false - - when: manual - interruptible: true - allow_failure: true - tags: ["runner:apm-k8s-same-cpu"] - needs: ["build"] - timeout: 1h - image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/benchmarking-platform:dd-trace-java-petclinic - script: - - git clone --branch java/petclinic https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/benchmarking-platform platform && cd platform - - ./steps/run-benchmarks.sh - artifacts: - name: "artifacts" - when: always - paths: - - platform/artifacts/ - expire_in: 3 months - variables: - K6_OPTIONS_WARMUP_RATE: 2000 - K6_OPTIONS_WARMUP_DURATION: 5m - K6_OPTIONS_WARMUP_GRACEFUL_STOP: 10s - K6_OPTIONS_WARMUP_PRE_ALLOCATED_VUS: 4 - K6_OPTIONS_WARMUP_MAX_VUS: 4 - - K6_OPTIONS_NORMAL_OPERATION_RATE: 1500 - K6_OPTIONS_NORMAL_OPERATION_DURATION: 10m - K6_OPTIONS_NORMAL_OPERATION_GRACEFUL_STOP: 10s - K6_OPTIONS_NORMAL_OPERATION_PRE_ALLOCATED_VUS: 4 - K6_OPTIONS_NORMAL_OPERATION_MAX_VUS: 4 - - K6_OPTIONS_HIGH_LOAD_RATE: 4000 - K6_OPTIONS_HIGH_LOAD_DURATION: 5m - K6_OPTIONS_HIGH_LOAD_GRACEFUL_STOP: 10s - K6_OPTIONS_HIGH_LOAD_PRE_ALLOCATED_VUS: 4 - K6_OPTIONS_HIGH_LOAD_MAX_VUS: 4 - retry: - max: 2 - when: - - unknown_failure - - data_integrity_failure - - runner_system_failure - - scheduler_failure - - api_failure - -baseline: - extends: .macrobenchmarks - variables: - BP_BENCHMARKS_CONFIGURATION: baseline - TRACER_OPTS: -Ddd.service=bp-java-petclinic - JAVA_OPTS: -javaagent:/app/memcheck/stability-testing-memwatch.jar -Xmx128M - -only-tracing: - extends: .macrobenchmarks - variables: - BP_BENCHMARKS_CONFIGURATION: only-tracing - TRACER_OPTS: -javaagent:/app/dd-java-agent.jar -Ddd.env=${BP_BENCHMARKS_CONFIGURATION} -Ddd.service=bp-java-petclinic - JAVA_OPTS: -javaagent:/app/memcheck/stability-testing-memwatch.jar -Xmx128M - -otel-latest: - extends: .macrobenchmarks - variables: - BP_BENCHMARKS_CONFIGURATION: otel-latest - TRACER_OPTS: -javaagent:/app/otel-java-agent.jar -Ddd.env=otel-latest -Ddd.service=bp-java-petclinic - JAVA_OPTS: -javaagent:/app/memcheck/stability-testing-memwatch.jar -Xmx128M - - -check-slo-breaches: - extends: .check-slo-breaches - stage: macrobenchmarks - interruptible: true - rules: - - if: $POPULATE_CACHE - when: never - - when: on_success - needs: - - job: baseline - artifacts: true - - job: only-tracing - artifacts: true - - job: otel-latest - artifacts: true - - job: benchmarks-startup - artifacts: true - - job: benchmarks-load - artifacts: true - - job: benchmarks-dacapo - artifacts: true - script: - # macrobenchmarks are located here, files are already in "converted" format - - export ARTIFACTS_DIR="$(pwd)/platform/artifacts/" && mkdir -p "${ARTIFACTS_DIR}" - - # Need to move the artifacts the benchmarks-* job - - | - export BENCHMARKS_ARTIFACTS_DIR="$(pwd)/reports" && mkdir -p "${BENCHMARKS_ARTIFACTS_DIR}" - for benchmarkType in startup load dacapo; do - find "$BENCHMARKS_ARTIFACTS_DIR/$benchmarkType" -name "benchmark-baseline.json" -o -name "benchmark-candidate.json" | while read file; do - relpath="${file#$BENCHMARKS_ARTIFACTS_DIR/$benchmarkType/}" - prefix="${relpath%/benchmark-*}" # Remove the trailing /benchmark-(baseline|candidate).json - prefix="${prefix#./}" # Remove any leading ./ - prefix="${prefix//\//-}" # Replace / with - - case "$file" in - *benchmark-baseline.json) type="baseline" ;; - *benchmark-candidate.json) type="candidate" ;; - esac - echo "Moving $file to $ARTIFACTS_DIR/${type}-${benchmarkType}-${prefix}.converted.json" - cp "$file" "$ARTIFACTS_DIR/${type}-${benchmarkType}-${prefix}.converted.json" - done - done - - ls -lah "$ARTIFACTS_DIR" - - bp-runner .gitlab/benchmarks/bp-runner.fail-on-breach.yml - artifacts: - name: "artifacts" - when: always - paths: - - platform/artifacts/ - expire_in: 1 week - variables: - DDOCTOSTS_POLICY: "self.gitlab.github-access.read" - UPSTREAM_PROJECT_ID: $CI_PROJECT_ID # The ID of the current project. This ID is unique across all projects on the GitLab instance. - UPSTREAM_PROJECT_NAME: $CI_PROJECT_NAME # "dd-trace-java" - UPSTREAM_BRANCH: $CI_COMMIT_REF_NAME # The branch or tag name for which project is built. - UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA # The commit revision the project is built for. - -notify-slo-breaches: - extends: .notify-slo-breaches - stage: macrobenchmarks - needs: ["check-slo-breaches"] - rules: - - if: $POPULATE_CACHE - when: never - - when: always - variables: - CHANNEL: "apm-java-ops-bot" From 25bb679745a51111e5db641b8ff0e47793b2093b Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 11 May 2026 21:57:26 +0200 Subject: [PATCH 009/478] Improve DBM commenter (#11339) Improve DBM commenter update tests Co-authored-by: andrea.marziali --- .../dbm/SharedDBCommenter.java | 39 ++++++-- .../dbm/SharedDBCommenterForkedTest.groovy | 2 + .../src/test/groovy/SQLCommenterTest.groovy | 96 ++++++++++--------- 3 files changed, 84 insertions(+), 53 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenter.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenter.java index 83604a017bd..161e2f8ad11 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenter.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenter.java @@ -32,7 +32,15 @@ public class SharedDBCommenter { private static final String TRACEPARENT = encode("traceparent"); private static final String DD_SERVICE_HASH = encode("ddsh"); + // Pre-encoded "key='encoded_value'" fragments for the invariant fields (the values + // come from Config are effectively immutable post-init in production). + // Note about the visibility: needs to be visible but can tolerate races (reason why it's not + // atomic) + private static volatile boolean staticPrefixComputed = false; + private static volatile String staticPrefix; + // Used by SQLCommenter and MongoCommentInjector to avoid duplicate comment injection + // Note: this should be "better" done and avoid this bunch of string contains/concatenation public static boolean containsTraceComment(String commentContent) { return commentContent.contains(PARENT_SERVICE + "=") || commentContent.contains(DATABASE_SERVICE + "=") @@ -48,20 +56,17 @@ public static boolean containsTraceComment(String commentContent) { // Build database comment content without comment delimiters such as /* */ public static String buildComment( String dbService, String dbType, String hostname, String dbName, String traceParent) { + ensureStaticPrefixComputed(); - Config config = Config.get(); - StringBuilder sb = new StringBuilder(); - + // we can calculate the precise size - having a rough estimation is perhaps faster + StringBuilder sb = new StringBuilder(1024).append(staticPrefix); int initSize = 0; // No initial content for pure comment - append(sb, PARENT_SERVICE, config.getServiceName(), initSize); append(sb, DATABASE_SERVICE, dbService, initSize); append(sb, DD_HOSTNAME, hostname, initSize); append(sb, DD_DB_NAME, dbName, initSize); append(sb, DD_PEER_SERVICE, getPeerService(), initSize); - append(sb, DD_ENV, config.getEnv(), initSize); - append(sb, DD_VERSION, config.getVersion(), initSize); append(sb, TRACEPARENT, traceParent, initSize); - + final Config config = Config.get(); if (config.isDbmInjectSqlBaseHash() && config.isExperimentalPropagateProcessTagsEnabled()) { append(sb, DD_SERVICE_HASH, BaseHash.getBaseHashStr(), initSize); } @@ -69,10 +74,30 @@ public static String buildComment( return sb.length() > 0 ? sb.toString() : null; } + private static void ensureStaticPrefixComputed() { + if (staticPrefixComputed) { + return; + } + Config config = Config.get(); + final StringBuilder sb = new StringBuilder(512); // big enough not to be resized + + append(sb, PARENT_SERVICE, config.getServiceName(), 0); + append(sb, DD_ENV, config.getEnv(), 0); + append(sb, DD_VERSION, config.getVersion(), 0); + staticPrefix = sb.toString(); + staticPrefixComputed = true; + } + + // @VisibleForTesting + public static void resetStaticPrefixForTesting() { + staticPrefixComputed = false; + } + private static String getPeerService() { AgentSpan span = activeSpan(); Object peerService = null; if (span != null) { + // FIXME: this will never work since peer service is computed later if enabled peerService = span.getTag(Tags.PEER_SERVICE); } return peerService != null ? peerService.toString() : null; diff --git a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenterForkedTest.groovy b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenterForkedTest.groovy index c655b5c1f97..5af48a0f5a0 100644 --- a/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenterForkedTest.groovy +++ b/dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/dbm/SharedDBCommenterForkedTest.groovy @@ -7,12 +7,14 @@ class SharedDBCommenterForkedTest extends Specification { System.setProperty("dd.service.name", "test-service") System.setProperty("dd.env", "test-env") System.setProperty("dd.version", "1.0.0") + SharedDBCommenter.resetStaticPrefixForTesting() } def cleanup() { System.clearProperty("dd.service.name") System.clearProperty("dd.env") System.clearProperty("dd.version") + SharedDBCommenter.resetStaticPrefixForTesting() } def "buildComment generates expected format for MongoDB"() { diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy index 9d843ad8bf5..eb250f761f2 100644 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy +++ b/dd-java-agent/instrumentation/jdbc/src/test/groovy/SQLCommenterTest.groovy @@ -5,6 +5,7 @@ import datadog.trace.api.ProcessTags import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentTracer import datadog.trace.bootstrap.instrumentation.api.Tags +import datadog.trace.bootstrap.instrumentation.dbm.SharedDBCommenter import datadog.trace.instrumentation.jdbc.SQLCommenter import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace @@ -37,6 +38,7 @@ class SQLCommenterTest extends InstrumentationSpecification { injectSysConfig("dd.service", ddService) injectSysConfig("dd.env", ddEnv) injectSysConfig("dd.version", ddVersion) + SharedDBCommenter.resetStaticPrefixForTesting() when: String sqlWithComment = SQLCommenter.inject(query, dbService, dbType, host, dbName, traceParent, append) @@ -46,70 +48,70 @@ class SQLCommenterTest extends InstrumentationSpecification { where: query | ddService | ddEnv | dbService | dbType | host | dbName | ddVersion | append | traceParent | expected - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo;" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" - "SELECT * FROM foo; \t\n\r" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" - "SELECT * FROM foo; SELECT * FROM bar" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo; SELECT * FROM bar; " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "SELECT * FROM foo;" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" + "SELECT * FROM foo; \t\n\r" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" + "SELECT * FROM foo; SELECT * FROM bar" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "SELECT * FROM foo; SELECT * FROM bar; " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo; SELECT * FROM bar /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/;" + "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)} /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" "{call dogshelterProc(?, ?)}" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "{call dogshelterProc(?, ?)}" - "CALL dogshelterProc(?, ?)" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "CALL dogshelterProc(?, ?)" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "Test" | "" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "" | "" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * FROM foo" | "" | "Test" | "" | "" | "h" | "n" | "" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "CALL dogshelterProc(?, ?)" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "CALL dogshelterProc(?, ?)" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "SELECT * FROM foo" | "" | "Test" | "" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*dde='Test',ddpv='TestVersion',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "SELECT * FROM foo" | "" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "" | "" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "SELECT * FROM foo" | "" | "Test" | "" | "" | "h" | "n" | "" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*dde='Test',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" "SELECT * FROM foo" | "" | "" | "" | "" | "h" | "n" | "" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" "SELECT * FROM foo" | "" | "" | "" | "" | "" | "" | "" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "SELECT * from FOO -- test query /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" - "SELECT * FROM DUAL" | "SqlCommenter" | "Test" | "my-service" | "oracle" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM DUAL /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" - "SELECT * FROM sys.tables" | "SqlCommenter" | "Test" | "my-service" | "sqlserver"| "h" | "n" | "TestVersion" | true | null | "SELECT * FROM sys.tables /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * from FOO -- test query /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" + "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "SELECT * from FOO -- test query /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" + "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" + "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" + "SELECT * FROM DUAL" | "SqlCommenter" | "Test" | "my-service" | "oracle" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM DUAL /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" + "SELECT * FROM sys.tables" | "SqlCommenter" | "Test" | "my-service" | "sqlserver"| "h" | "n" | "TestVersion" | true | null | "SELECT * FROM sys.tables /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" + "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT /* customer-comment */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" + "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * from FOO -- test query /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" "" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "" - " " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | " /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" + " " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | " /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" "" | "SqlCommenter" | "Test" | "postgres" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "" - " " | "SqlCommenter" | "Test" | "postgres" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | " /*ddps='SqlCommenter',dddbs='postgres',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" + " " | "SqlCommenter" | "Test" | "postgres" | "mysql" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | " /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='postgres',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" "SELECT * FROM foo /*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" "SELECT * FROM foo /*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" "SELECT * FROM foo /*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/" "SELECT * FROM foo /*ddps='SqlCommenter',ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddps='SqlCommenter',ddpv='TestVersion'*/" "SELECT * FROM foo /*ddpv='TestVersion'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*ddpv='TestVersion'*/" - "/*ddjk its a customer */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*ddjk its a customer */ SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" + "/*ddjk its a customer */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*ddjk its a customer */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "SELECT * FROM foo /*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/" - "/*customer-comment*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*customer-comment*/ SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" - "/*traceparent" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*traceparent /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * FROM foo" | "" | "Test" | "" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * FROM foo" | "" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * FROM foo" | "" | "Test" | "" | "" | "h" | "n" | "" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*ddh='h',dddb='n',dde='Test',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" + "/*customer-comment*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*customer-comment*/ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" + "/*traceparent" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | true | null | "/*traceparent /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/" + "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" + "SELECT * FROM foo" | "" | "Test" | "" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*dde='Test',ddpv='TestVersion',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" + "SELECT * FROM foo" | "" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" + "SELECT * FROM foo" | "" | "Test" | "" | "" | "h" | "n" | "" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*dde='Test',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" "SELECT * FROM foo" | "" | "" | "" | "" | "" | "" | "" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/ SELECT * FROM foo" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * from FOO -- test query" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT /* customer-comment */ * FROM foo" - "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/ SELECT * FROM foo" - "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/ SELECT /* customer-comment */ * FROM foo" - "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/ SELECT * from FOO -- test query" + "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * from FOO -- test query" + "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT /* customer-comment */ * FROM foo" + "SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT * FROM foo" + "SELECT /* customer-comment */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT /* customer-comment */ * FROM foo" + "SELECT * from FOO -- test query" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ SELECT * from FOO -- test query" "" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "" - " " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ " + " " | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-01" | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ " "/*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*dddbs='my-service',ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" "/*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddh='h',dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" "/*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*dddb='n',dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" "/*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*dde='Test',ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" "/*ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',ddpv='TestVersion'*/ SELECT * FROM foo" "/*ddpv='TestVersion'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddpv='TestVersion'*/ SELECT * FROM foo" - "/*ddjk its a customer */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/ /*ddjk its a customer */ SELECT * FROM foo" + "/*ddjk its a customer */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*ddjk its a customer */ SELECT * FROM foo" "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-01'*/ SELECT * FROM foo" - "/*customer-comment*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/ /*customer-comment*/ SELECT * FROM foo" - "/*traceparent" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion'*/ /*traceparent" - "SELECT /*+ SeqScan(foo) */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT /*+ SeqScan(foo) */ * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "/*customer-comment*/ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*customer-comment*/ SELECT * FROM foo" + "/*traceparent" | "SqlCommenter" | "Test" | "my-service" | "mysql" | "h" | "n" | "TestVersion" | false | null | "/*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n'*/ /*traceparent" + "SELECT /*+ SeqScan(foo) */ * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "SELECT /*+ SeqScan(foo) */ * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "/*+ SeqScan(foo) */ SELECT * FROM foo" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | true | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "/*+ SeqScan(foo) */ SELECT * FROM foo /*ddps=''*/" "CALL dogshelterProc(?, ?) /*ddps=''*/" | "SqlCommenter" | "Test" | "my-service" | "postgres" | "h" | "n" | "TestVersion" | false | "00-00000000000000007fffffffffffffff-000000024cb016ea-00" | "CALL dogshelterProc(?, ?) /*ddps=''*/" @@ -124,6 +126,7 @@ class SQLCommenterTest extends InstrumentationSpecification { injectSysConfig("dd.experimental.propagate.process.tags.enabled", Boolean.toString(processTagsEnabled)) ProcessTags.reset() BaseHash.updateBaseHash(baseHash) + SharedDBCommenter.resetStaticPrefixForTesting() expect: Config.get().isExperimentalPropagateProcessTagsEnabled() == processTagsEnabled @@ -151,6 +154,7 @@ class SQLCommenterTest extends InstrumentationSpecification { injectSysConfig("dd.service", "SqlCommenter") injectSysConfig("dd.env", "Test") injectSysConfig("dd.version", "TestVersion") + SharedDBCommenter.resetStaticPrefixForTesting() when: String sqlWithComment = runUnderTrace("testTrace") { @@ -164,8 +168,8 @@ class SQLCommenterTest extends InstrumentationSpecification { where: dbType | peerService | expected - "mysql" | null | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "postgres" | "" | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" - "postgres" | "testPeer" | "SELECT * FROM foo /*ddps='SqlCommenter',dddbs='my-service',ddh='h',dddb='n',ddprs='testPeer',dde='Test',ddpv='TestVersion',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "mysql" | null | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "postgres" | "" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" + "postgres" | "testPeer" | "SELECT * FROM foo /*ddps='SqlCommenter',dde='Test',ddpv='TestVersion',dddbs='my-service',ddh='h',dddb='n',ddprs='testPeer',traceparent='00-00000000000000007fffffffffffffff-000000024cb016ea-00'*/" } } From 710ca8758317ee5c09c15bb2e0f5808b75fc1b5f Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Tue, 12 May 2026 13:02:13 +0200 Subject: [PATCH 010/478] Update JUnit4 instrumentation to fire test suite events for Bazel (#11322) fix: proper handling of bazel test runner suite events fix: only fire suite event on tracing listener Merge branch 'master' into daniel.mohedano/bazel-run-notifier-instrumentation Merge branch 'master' into daniel.mohedano/bazel-run-notifier-instrumentation Co-authored-by: daniel.mohedano --- .../junit4/JUnit4TracingListener.java | 75 ------------ .../instrumentation/junit4/JUnit4Utils.java | 21 ++-- ...azelRunNotifierWrapperInstrumentation.java | 114 ++++++++++++++++++ 3 files changed, 121 insertions(+), 89 deletions(-) create mode 100644 dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/BazelRunNotifierWrapperInstrumentation.java diff --git a/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4TracingListener.java b/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4TracingListener.java index fd6954d007b..afa43e45493 100644 --- a/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4TracingListener.java +++ b/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4TracingListener.java @@ -8,11 +8,8 @@ import datadog.trace.bootstrap.ContextStore; import java.lang.reflect.Method; import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import org.junit.Ignore; import org.junit.runner.Description; -import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class JUnit4TracingListener extends TracingListener { @@ -22,26 +19,6 @@ public class JUnit4TracingListener extends TracingListener { private final ContextStore executionTrackers; - /** - * Suites for which {@code onTestSuiteStart} has been fired (from either the normal - * ParentRunner-based flow or via lazy-registration in {@link #testStarted}). Used to keep - * lifecycle events idempotent and to know which auto-started suite still needs closing. - */ - private final Set startedSuites = ConcurrentHashMap.newKeySet(); - - /** - * Last suite lazy-started from {@link #testStarted} because no {@link #testSuiteStarted} event - * was observed for it first. This has been seen under {@code - * com.google.testing.junit.runner.BazelTestRunner}, where the suite-start advice in {@code - * JUnit4SuiteEventsInstrumentation} does not fire for reasons still to be pinpointed (likely a - * classloader or runner-wrapping quirk specific to the Bazel test launcher). Closed when the next - * test belongs to a different suite, or when the whole test run finishes. - * - *

TODO: investigate the exact cause under {@code BazelTestRunner} and add a dedicated - * instrumentation that emits proper suite-lifecycle events instead of relying on this fallback. - */ - private volatile TestSuiteDescriptor autoStartedSuite; - public JUnit4TracingListener(ContextStore executionTrackers) { this.executionTrackers = executionTrackers; } @@ -55,9 +32,6 @@ public void testSuiteStarted(final Description description) { } TestSuiteDescriptor suiteDescriptor = JUnit4Utils.toSuiteDescriptor(description); - if (!startedSuites.add(suiteDescriptor)) { - return; // already started (idempotent vs. lazy-registration or duplicate events) - } Class testClass = description.getTestClass(); String testSuiteName = JUnit4Utils.getSuiteName(testClass, description); List categories = JUnit4Utils.getCategories(testClass, null); @@ -84,9 +58,6 @@ public void testSuiteFinished(final Description description) { } TestSuiteDescriptor suiteDescriptor = JUnit4Utils.toSuiteDescriptor(description); - if (!startedSuites.remove(suiteDescriptor)) { - return; // never started - } TestEventsHandlerHolder.HANDLERS .get(TestFrameworkInstrumentation.JUNIT4) .onTestSuiteFinish(suiteDescriptor, null); @@ -102,8 +73,6 @@ public void testStarted(final Description description) { TestDescriptor testDescriptor = JUnit4Utils.toTestDescriptor(description); TestSourceData testSourceData = JUnit4Utils.toTestSourceData(description); - lazyStartSuiteIfNeeded(suiteDescriptor, description, testSourceData); - String testName = JUnit4Utils.getTestName(description, testSourceData.getTestMethod()); String testParameters = JUnit4Utils.getParameters(description); List categories = @@ -124,50 +93,6 @@ public void testStarted(final Description description) { executionTrackers.get(description)); } - @Override - public void testRunFinished(Result result) { - closeAutoStartedSuite(); - } - - private void lazyStartSuiteIfNeeded( - TestSuiteDescriptor newSuite, Description description, TestSourceData testSourceData) { - if (startedSuites.contains(newSuite)) { - return; - } - closeAutoStartedSuite(); - - Class testClass = testSourceData.getTestClass(); - String testSuiteName = JUnit4Utils.getSuiteName(testClass, description); - List categories = JUnit4Utils.getCategories(testClass, null); - TestEventsHandlerHolder.HANDLERS - .get(TestFrameworkInstrumentation.JUNIT4) - .onTestSuiteStart( - newSuite, - testSuiteName, - FRAMEWORK_NAME, - FRAMEWORK_VERSION, - testClass, - categories, - false, - TestFrameworkInstrumentation.JUNIT4, - null); - startedSuites.add(newSuite); - autoStartedSuite = newSuite; - } - - private void closeAutoStartedSuite() { - TestSuiteDescriptor suite = autoStartedSuite; - if (suite == null) { - return; - } - autoStartedSuite = null; - if (startedSuites.remove(suite)) { - TestEventsHandlerHolder.HANDLERS - .get(TestFrameworkInstrumentation.JUNIT4) - .onTestSuiteFinish(suite, null); - } - } - @Override public void testFinished(final Description description) { if (JUnit4Utils.isJUnitPlatformRunnerTest(description)) { diff --git a/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4Utils.java b/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4Utils.java index 697c38d56e2..ca6f383c2cf 100644 --- a/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4Utils.java +++ b/dd-java-agent/instrumentation/junit/junit-4/junit-4.10/src/main/java/datadog/trace/instrumentation/junit4/JUnit4Utils.java @@ -41,15 +41,6 @@ public abstract class JUnit4Utils { private static final String SYNCHRONIZED_LISTENER = "org.junit.runner.notification.SynchronizedRunListener"; - - /** - * Bazel's test launcher wraps the {@link RunNotifier} that our instrumentation advice receives. - * {@link RunNotifier#addListener} on the wrapper forwards to its inner delegate, but {@link - * org.junit.runner.notification.RunNotifier#listeners} on the wrapper is a separate (empty) - * field. Without unwrapping, our idempotency check fails to see a listener installed via a prior - * advice call on the inner notifier, and we end up adding a second tracing listener that the - * wrapper also forwards to the delegate. - */ private static final String BAZEL_RUN_NOTIFIER_WRAPPER = "com.google.testing.junit.junit4.runner.RunNotifierWrapper"; @@ -117,13 +108,14 @@ public static List runListenersFromRunNotifier(final RunNotifier ru } /** - * Walks through {@link RunNotifier} wrappers (e.g. Bazel's {@code RunNotifierWrapper}) so the - * effective {@code listeners} field is read, not the wrapper's own (forwarded) one. + * Walks through {@link RunNotifier} wrappers (e.g. Bazel's {@code RunNotifierWrapper}) and + * returns the inner notifier whose {@code listeners} field actually receives {@code addListener} + * calls. Returns the input untouched when it is not a known wrapper. */ - private static RunNotifier unwrapRunNotifier(RunNotifier notifier) { + public static RunNotifier unwrapRunNotifier(RunNotifier notifier) { RunNotifier current = notifier; for (int i = 0; i < 8 && current != null; i++) { - if (!isBazelRunNotifierWrapper(current.getClass())) { + if (!isBazelRunNotifierWrapper(current)) { return current; } RunNotifier delegate = METHOD_HANDLES.invoke(BAZEL_RUN_NOTIFIER_WRAPPER_DELEGATE, current); @@ -135,7 +127,8 @@ private static RunNotifier unwrapRunNotifier(RunNotifier notifier) { return current; } - private static boolean isBazelRunNotifierWrapper(Class cls) { + private static boolean isBazelRunNotifierWrapper(RunNotifier notifier) { + Class cls = notifier.getClass(); while (cls != null && cls != Object.class) { if (BAZEL_RUN_NOTIFIER_WRAPPER.equals(cls.getName())) { return true; diff --git a/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/BazelRunNotifierWrapperInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/BazelRunNotifierWrapperInstrumentation.java new file mode 100644 index 00000000000..782e6e1ebf8 --- /dev/null +++ b/dd-java-agent/instrumentation/junit/junit-4/junit-4.13/src/main/java/datadog/trace/instrumentation/junit4/BazelRunNotifierWrapperInstrumentation.java @@ -0,0 +1,114 @@ +package datadog.trace.instrumentation.junit4; + +import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; +import java.util.List; +import net.bytebuddy.asm.Advice; +import org.junit.runner.Description; +import org.junit.runner.notification.RunListener; +import org.junit.runner.notification.RunNotifier; + +/** + * Restores suite lifecycle events when JUnit 4.13+ tests run under Bazel's {@code + * com.google.testing.junit.runner.BazelTestRunner}. + * + *

Bazel's {@code com.google.testing.junit.junit4.runner.RunNotifierWrapper} explicitly delegates + * {@code addListener}, {@code fireTestStarted}, etc. to the inner notifier, but does not override + * {@link RunNotifier#fireTestSuiteStarted(Description)} and {@link + * RunNotifier#fireTestSuiteFinished(Description)}. The runner therefore fires the suite-lifecycle + * events on the wrapper's own (always empty) listener list, and our tracing listener — installed on + * the inner notifier via the wrapper's delegating {@code addListener} — never sees them. + * + *

This advice intercepts {@link RunNotifier#fireTestSuiteStarted(Description)} and {@link + * RunNotifier#fireTestSuiteFinished(Description)} on the wrapper instance, looks up our tracing + * listener inside the inner notifier's listener list, and invokes it directly. Other listeners + * installed on the inner notifier are intentionally skipped so Bazel's default dispatch behavior is + * unchanged. Calls on a non-wrapper notifier are a no-op. + */ +@AutoService(InstrumenterModule.class) +public class BazelRunNotifierWrapperInstrumentation extends InstrumenterModule.CiVisibility + implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { + + public BazelRunNotifierWrapperInstrumentation() { + super("ci-visibility", "junit-4"); + } + + @Override + public String instrumentedType() { + return "org.junit.runner.notification.RunNotifier"; + } + + @Override + public String[] helperClassNames() { + return new String[] { + packageName + ".JUnit4Utils", + packageName + ".TracingListener", + packageName + ".SkippedByDatadog", + }; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice( + named("fireTestSuiteStarted").and(takesArgument(0, named("org.junit.runner.Description"))), + BazelRunNotifierWrapperInstrumentation.class.getName() + "$FireSuiteStartedAdvice"); + transformer.applyAdvice( + named("fireTestSuiteFinished").and(takesArgument(0, named("org.junit.runner.Description"))), + BazelRunNotifierWrapperInstrumentation.class.getName() + "$FireSuiteFinishedAdvice"); + } + + public static class FireSuiteStartedAdvice { + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void fireOnTracingListener( + @Advice.This final RunNotifier self, @Advice.Argument(0) final Description description) { + RunNotifier inner = JUnit4Utils.unwrapRunNotifier(self); + if (inner == null || inner == self) { + return; + } + List listeners = JUnit4Utils.runListenersFromRunNotifier(inner); + if (listeners == null) { + return; + } + for (RunListener listener : listeners) { + TracingListener tracingListener = JUnit4Utils.toTracingListener(listener); + if (tracingListener != null) { + tracingListener.testSuiteStarted(description); + } + } + } + + // JUnit 4.13 muzzle marker: fireTestSuiteStarted exists from 4.13. + public static void muzzleCheck(final RunNotifier notifier) { + notifier.fireTestSuiteStarted(null); + } + } + + public static class FireSuiteFinishedAdvice { + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void fireOnTracingListener( + @Advice.This final RunNotifier self, @Advice.Argument(0) final Description description) { + RunNotifier inner = JUnit4Utils.unwrapRunNotifier(self); + if (inner == null || inner == self) { + return; + } + List listeners = JUnit4Utils.runListenersFromRunNotifier(inner); + if (listeners == null) { + return; + } + for (RunListener listener : listeners) { + TracingListener tracingListener = JUnit4Utils.toTracingListener(listener); + if (tracingListener != null) { + tracingListener.testSuiteFinished(description); + } + } + } + + public static void muzzleCheck(final RunNotifier notifier) { + notifier.fireTestSuiteFinished(null); + } + } +} From fc399605522984b93c81dd9676ac2d08c13f1c4b Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 12 May 2026 18:25:57 +0200 Subject: [PATCH 011/478] Migrate `version.gradle` script plugin to Kotlin convention plugin (#11345) build: Refactor `version.gradle` to `dd-trace-java.version-file` plugin * `Project.exec {}` is removed in Gradle 9. It is also incompatible with the configuration cache. * `gradle/version.gradle` is a Groovy script plugin, migrating to a convention plugin is the way to go. build: Add new plugin tests build: Refactor the tests with a better fixture for version plugins Merge branch 'master' into bdu/gradle9-write-version-convention-plugin fix: task need to be experessed as task path, in the build result Co-authored-by: brice.dutheil --- buildSrc/build.gradle.kts | 5 + .../plugin/version/TracerVersionPlugin.kt | 4 +- .../gradle/plugin/version/WriteVersionFile.kt | 46 +++ .../plugin/version/WriteVersionFilePlugin.kt | 19 + .../datadog/gradle/plugin/GradleFixture.kt | 6 +- .../version/TracerVersionIntegrationTest.kt | 330 ++++++------------ .../plugin/version/VersionPluginsFixture.kt | 40 +++ .../version/WriteVersionFilePluginTest.kt | 156 +++++++++ dd-java-agent/agent-aiguard/build.gradle | 2 +- .../agent-ci-visibility/build.gradle | 2 +- .../build.gradle | 5 +- .../civisibility-test-fixtures/build.gradle | 5 +- dd-java-agent/agent-debugger/build.gradle | 3 +- .../debugger-bootstrap/build.gradle | 6 +- .../agent-debugger/debugger-el/build.gradle | 6 +- dd-java-agent/agent-iast/build.gradle | 2 +- .../iast-test-fixtures/build.gradle | 5 +- dd-java-agent/agent-llmobs/build.gradle | 2 +- dd-java-agent/agent-logs-intake/build.gradle | 2 +- .../appsec/appsec-test-fixtures/build.gradle | 5 +- dd-java-agent/appsec/build.gradle | 2 +- dd-java-agent/cws-tls/build.gradle | 3 +- dd-trace-core/build.gradle | 2 +- gradle/publish.gradle | 2 +- gradle/version.gradle | 34 -- .../feature-flagging-agent/build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../feature-flagging-lib/build.gradle.kts | 2 +- utils/version-utils/build.gradle.kts | 3 +- 29 files changed, 414 insertions(+), 289 deletions(-) create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFile.kt create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFilePlugin.kt create mode 100644 buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt create mode 100644 buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt delete mode 100644 gradle/version.gradle diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 8083b423297..b1be2144929 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -39,6 +39,11 @@ gradlePlugin { implementationClass = "datadog.gradle.plugin.version.TracerVersionPlugin" } + create("version-file-plugin") { + id = "dd-trace-java.version-file" + implementationClass = "datadog.gradle.plugin.version.WriteVersionFilePlugin" + } + create("dump-hanged-test-plugin") { id = "dd-trace-java.dump-hanged-test" implementationClass = "datadog.gradle.plugin.dump.DumpHangedTestPlugin" diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt index 1250e96d907..5255cbf5328 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt @@ -32,9 +32,9 @@ class TracerVersionPlugin @Inject constructor( providerFactory.gradleProperty("tracerVersion.qualifier") ) - val versionProvider = versionProvider(targetProject, extension) + val theVersion = versionProvider(targetProject, extension) targetProject.allprojects { - version = versionProvider + version = theVersion } } diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFile.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFile.kt new file mode 100644 index 00000000000..b581ba7dd14 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFile.kt @@ -0,0 +1,46 @@ +package datadog.gradle.plugin.version + +import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.ProjectLayout +import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.Property +import org.gradle.api.provider.ProviderFactory +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.property +import javax.inject.Inject + +abstract class WriteVersionFile @Inject constructor( + providerFactory: ProviderFactory, + layout: ProjectLayout, + objects: ObjectFactory, +) : DefaultTask() { + + @get:Input + val version: Property = objects.property() + .convention(providerFactory.provider { project.version.toString() }) + + @get:Input + val gitHash: Property = objects.property() + .convention( + providerFactory.of(GitCommandValueSource::class.java) { + parameters { + gitCommand.addAll("git", "rev-parse", "--short", "HEAD") + workingDirectory.set(layout.projectDirectory) + } + } + ) + + @get:OutputDirectory + val outputDirectory: DirectoryProperty = objects.directoryProperty() + .convention(layout.buildDirectory.dir("generated/version")) + + @TaskAction + fun writeVersionFile() { + val versionFile = outputDirectory.file("${project.name}.version").get().asFile + versionFile.parentFile.mkdirs() + versionFile.writeText("${version.get()}~${gitHash.get()}") + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFilePlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFilePlugin.kt new file mode 100644 index 00000000000..84b7b9a3ade --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/WriteVersionFilePlugin.kt @@ -0,0 +1,19 @@ +package datadog.gradle.plugin.version + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.the + +class WriteVersionFilePlugin : Plugin { + override fun apply(target: Project) { + target.pluginManager.apply("java") + + val writeVersionFile = target.tasks.register("writeVersionNumberFile") + + target.the().sourceSets.named("main") { + resources.srcDir(writeVersionFile) + } + } +} diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt index 5d6ca45b6fd..c0fd6077ded 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt @@ -151,8 +151,10 @@ internal open class GradleFixture(protected val projectDir: File) { /** * Creates or gets a file in the project directory, ensuring parent directories exist. */ - protected fun file(path: String): File = + protected fun file(path: String, mkdirs: Boolean = true): File = File(projectDir, path).also { file -> - file.parentFile?.mkdirs() + if (mkdirs) { + file.parentFile?.mkdirs() + } } } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt index ac65bdf0910..4f253b41633 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt @@ -1,287 +1,174 @@ package datadog.gradle.plugin.version +import org.assertj.core.api.Assertions.assertThat import org.gradle.testkit.runner.GradleRunner -import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir import java.io.File -import java.io.IOException class TracerVersionIntegrationTest { @Test fun `should use default version when not under a git clone`(@TempDir projectDir: File) { - assertTracerVersion(projectDir, "0.1.0-SNAPSHOT") + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion(expectedVersion = "0.1.0-SNAPSHOT") } @Test fun `should use default version when no git tags`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "0.1.0-SNAPSHOT", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "0.1.0-SNAPSHOT", beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - } + fixture.initGitRepo() + }, ) } @Test fun `should ignore dirtiness when no git tags`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "0.1.0-SNAPSHOT", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "0.1.0-SNAPSHOT", beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - - File(projectDir, "settings.gradle.kts").appendText( - """ - - // uncommitted change this file, - """.trimIndent() - ) - } + fixture.initGitRepo() + settingsFile.appendText("\n// uncommitted change this file, ") + }, ) } @Test fun `should use default version when unmatching git tags`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "0.1.0-SNAPSHOT", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "0.1.0-SNAPSHOT", beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "something1.40.1", "-m", "Not our tag") - } + fixture.initGitRepo() + fixture.exec("git", "tag", "something1.40.1", "-m", "Not our tag") + }, ) } @Test fun `should use exact version when on tag`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "1.52.0", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "1.52.0", beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "v1.52.0", "-m", "") - } + fixture.initGitRepo() + fixture.exec("git", "tag", "v1.52.0", "-m", "") + }, ) } @Test fun `should increment minor and mark dirtiness`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "1.53.0-SNAPSHOT-DIRTY", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "1.53.0-SNAPSHOT-DIRTY", beforeGradle = { - println("Setting up git repository in $projectDir") - File(projectDir, "gradle.properties").writeText( - """ - tracerVersion.dirtiness=true - """.trimIndent() - ) - - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "v1.52.0", "-m", "") - - File(projectDir, "settings.gradle.kts").appendText( - """ - - // uncommitted change this file, - """.trimIndent() - ) - } + gradlePropertiesFile.writeText("tracerVersion.dirtiness=true") + fixture.initGitRepo() + fixture.exec("git", "tag", "v1.52.0", "-m", "") + settingsFile.appendText("\n// uncommitted change this file, ") + }, ) } @Test fun `should increment minor with added commits after version tag`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "1.53.0-SNAPSHOT", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "1.53.0-SNAPSHOT", beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "v1.52.0", "-m", "") - - File(projectDir, "settings.gradle.kts").appendText( - """ - - // Committed change this file, - """.trimIndent() - ) - exec(projectDir, "git", "commit", "-am", "Another commit") - } + fixture.initGitRepo() + fixture.exec("git", "tag", "v1.52.0", "-m", "") + settingsFile.appendText("\n// Committed change this file, ") + fixture.exec("git", "commit", "-am", "Another commit") + }, ) } @Test fun `should increment minor with snapshot and dirtiness with added commits after version tag and dirty`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "1.53.0-SNAPSHOT-DIRTY", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "1.53.0-SNAPSHOT-DIRTY", beforeGradle = { - File(projectDir, "gradle.properties").writeText( - """ - tracerVersion.dirtiness=true - """.trimIndent() - ) - - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "v1.52.0", "-m", "") - - val settingsFile = File(projectDir, "settings.gradle.kts") - settingsFile.appendText( - """ - - // uncommitted change - """.trimIndent() - ) - - exec(projectDir, "git", "commit", "-am", "Another commit") - - settingsFile.appendText( - """ - // An uncommitted modification - """.trimIndent() - ) - } + gradlePropertiesFile.writeText("tracerVersion.dirtiness=true") + fixture.initGitRepo() + fixture.exec("git", "tag", "v1.52.0", "-m", "") + val settings = settingsFile + settings.appendText("\n// uncommitted change ") + fixture.exec("git", "commit", "-am", "Another commit") + settings.appendText("\n// An uncommitted modification") + }, ) } @Test fun `should increment patch on release branch and no patch release tag`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "1.52.1-SNAPSHOT", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "1.52.1-SNAPSHOT", beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "v1.52.0", "-m", "") - - val settingsFile = File(projectDir, "settings.gradle.kts") - settingsFile.appendText( - """ - - // Committed change - """.trimIndent() - ) - - exec(projectDir, "git", "commit", "-am", "Another commit") - exec(projectDir, "git", "switch", "-c", "release/v1.52.x") - } + fixture.initGitRepo() + fixture.exec("git", "tag", "v1.52.0", "-m", "") + settingsFile.appendText("\n// Committed change ") + fixture.exec("git", "commit", "-am", "Another commit") + fixture.exec("git", "switch", "-c", "release/v1.52.x") + }, ) } @Test fun `should increment patch on release branch and with previous patch release tag`(@TempDir projectDir: File) { - assertTracerVersion( - projectDir, - "1.52.2-SNAPSHOT", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "1.52.2-SNAPSHOT", beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "v1.52.0", "-m", "") - exec(projectDir, "git", "switch", "-c", "release/v1.52.x") - - val settingsFile = File(projectDir, "settings.gradle.kts") - settingsFile.appendText( - """ - - // Committed change - """.trimIndent() - ) - exec(projectDir, "git", "commit", "-am", "Another commit") - exec(projectDir, "git", "tag", "v1.52.1", "-m", "") - - settingsFile.appendText( - """ - - // Another committed change - """.trimIndent() - ) - exec(projectDir, "git", "commit", "-am", "Another commit") - } + fixture.initGitRepo() + fixture.exec("git", "tag", "v1.52.0", "-m", "") + fixture.exec("git", "switch", "-c", "release/v1.52.x") + val settings = settingsFile + settings.appendText("\n// Committed change ") + fixture.exec("git", "commit", "-am", "Another commit") + fixture.exec("git", "tag", "v1.52.1", "-m", "") + settings.appendText("\n// Another committed change ") + fixture.exec("git", "commit", "-am", "Another commit") + }, ) } @Test fun `should compute version on worktrees`(@TempDir projectDir: File, @TempDir workTreeDir: File) { - assertTracerVersion( - projectDir, - "1.53.0-SNAPSHOT", + val fixture = VersionPluginsFixture(projectDir) + fixture.assertTracerVersion( + expectedVersion = "1.53.0-SNAPSHOT", + workingDirectory = workTreeDir, beforeGradle = { - exec(projectDir, "git", "init", "--initial-branch", "main") - exec(projectDir, "git", "config", "user.email", "test@datadoghq.com") - exec(projectDir, "git", "config", "user.name", "Test") - exec(projectDir, "git", "add", "-A") - exec(projectDir, "git", "commit", "-m", "A commit") - exec(projectDir, "git", "tag", "v1.52.0", "-m", "") - - exec(projectDir, "git", "commit", "-m", "Initial commit", "--allow-empty") - exec(projectDir, "git", "worktree", "add", workTreeDir.absolutePath) - // happening on the worktree - File(workTreeDir, "settings.gradle.kts").appendText( - """ - - // Committed change this file, - """.trimIndent() - ) - exec(workTreeDir, "git", "commit", "-am", "Another commit") + fixture.initGitRepo() + fixture.exec("git", "tag", "v1.52.0", "-m", "") + fixture.exec("git", "commit", "-m", "Initial commit", "--allow-empty") + fixture.exec("git", "worktree", "add", workTreeDir.absolutePath) + File(workTreeDir, "settings.gradle.kts").appendText("\n// Committed change this file, ") + fixture.exec(workTreeDir, "git", "commit", "-am", "Another commit") }, - workingDirectory = workTreeDir ) } - private fun assertTracerVersion( - projectDir: File, + private fun VersionPluginsFixture.assertTracerVersion( expectedVersion: String, - beforeGradle: () -> Unit = {}, - workingDirectory: File = projectDir, + workingDirectory: File? = null, + beforeGradle: VersionPluginsFixture.() -> Unit = {}, ) { - File(projectDir, "settings.gradle.kts").writeText( - """ - rootProject.name = "test-project" - """.trimIndent() - ) - File(projectDir, "build.gradle.kts").writeText( + settingsFile.writeText("""rootProject.name = "test-project"""") + projectBuildFile.writeText( """ plugins { id("dd-trace-java.tracer-version") } - + tasks.register("printVersion") { logger.quiet(project.version.toString()) } @@ -292,28 +179,19 @@ class TracerVersionIntegrationTest { beforeGradle() - val buildResult = GradleRunner.create() - .forwardOutput() - // .withGradleVersion(gradleVersion) // Use current gradle version - .withPluginClasspath() - .withArguments("printVersion", "--quiet") - .withProjectDir(workingDirectory) - // .withDebug(true) - .build() - - assertEquals(expectedVersion, buildResult.output.lines().first()) - } - - private fun exec(workingDirectory: File, vararg args: String) { - val exitCode = ProcessBuilder() - .command(*args) - .directory(workingDirectory) - .inheritIO() - .start() - .waitFor() - - if (exitCode != 0) { - throw IOException(String.format("Process failed: %s Exit code %d", args.joinToString(" "), exitCode)) + val buildResult = if (workingDirectory == null) { + run("printVersion", "--quiet") + } else { + // Worktree: Gradle must run from a directory other than projectDir, + // so use GradleRunner directly instead of GradleFixture.run(). + GradleRunner.create() + .forwardOutput() + .withPluginClasspath() + .withArguments("printVersion", "--quiet") + .withProjectDir(workingDirectory) + .build() } + + assertThat(buildResult.output.lines().first()).isEqualTo(expectedVersion) } } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt new file mode 100644 index 00000000000..aba9e9fb35b --- /dev/null +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt @@ -0,0 +1,40 @@ +package datadog.gradle.plugin.version + +import datadog.gradle.plugin.GradleFixture +import java.io.File +import java.io.IOException + +internal class VersionPluginsFixture(projectDir: File) : GradleFixture(projectDir) { + + fun exec(workingDirectory: File, vararg args: String) { + val exitCode = ProcessBuilder() + .command(*args) + .directory(workingDirectory) + .inheritIO() + .start() + .waitFor() + if (exitCode != 0) { + throw IOException("Process failed: ${args.joinToString(" ")} (exit code $exitCode)") + } + } + + fun exec(vararg args: String) = exec(projectDir, *args) + + fun initGitRepo(workingDirectory: File = projectDir) { + exec(workingDirectory, "git", "init", "--initial-branch", "main") + exec(workingDirectory, "git", "config", "user.email", "test@datadoghq.com") + exec(workingDirectory, "git", "config", "user.name", "Test") + exec(workingDirectory, "git", "add", "-A") + exec(workingDirectory, "git", "commit", "-m", "A commit") + } + + val projectBuildFile = file("build.gradle.kts") + + val gradlePropertiesFile = file("gradle.properties") + + val settingsFile = file("settings.gradle.kts") + + val generatedVersionFile = file("build/generated/version/my-lib.version", false) + + val builtResourceVersionFile = file("build/resources/main/my-lib.version", false) +} diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt new file mode 100644 index 00000000000..8aa49a86ae8 --- /dev/null +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt @@ -0,0 +1,156 @@ +package datadog.gradle.plugin.version + +import org.assertj.core.api.Assertions.assertThat +import org.gradle.testkit.runner.BuildResult +import org.gradle.testkit.runner.TaskOutcome +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir +import java.io.File + +class WriteVersionFilePluginTest { + + @Test + fun `writes version file in version~hash format`(@TempDir projectDir: File) { + val fixture = VersionPluginsFixture(projectDir) + fixture.assertVersionFile( + expectedContentRegex = "1\\.2\\.3~[0-9a-f]+", + beforeGradle = { + initGitRepo() + }, + ) + } + + @Test + fun `version and gitHash properties can be overridden`(@TempDir projectDir: File) { + val fixture = VersionPluginsFixture(projectDir) + fixture.assertVersionFile( + expectedContentRegex = "9.9.9~deadbeef", + beforeGradle = { + projectBuildFile.appendText( + """ + + tasks.named("writeVersionNumberFile").configure { + version.set("9.9.9") + gitHash.set("deadbeef") + } + """.trimIndent() + ) + }, + ) + } + + @Test + fun `task overwrites existing version file`(@TempDir projectDir: File) { + val fixture = VersionPluginsFixture(projectDir) + fixture.assertVersionFile( + expectedContentRegex = "1.2.3~abc12345", + beforeGradle = { + projectBuildFile.appendText( + """ + + tasks.named("writeVersionNumberFile").configure { + gitHash.set("abc12345") + } + """.trimIndent() + ) + generatedVersionFile.run { + parentFile.mkdirs() + writeText("stale-version") + } + }, + ) + } + + @Test + fun `version file generation is wired into main resources`(@TempDir projectDir: File) { + val fixture = VersionPluginsFixture(projectDir) + fixture.assertVersionFile( + expectedContentRegex = "1.2.3~abc12345", + task = "processResources", + beforeGradle = { + projectBuildFile.appendText( + """ + + tasks.named("writeVersionNumberFile").configure { + gitHash.set("abc12345") + } + """.trimIndent() + ) + }, + ) + + assertThat(fixture.builtResourceVersionFile).exists() + } + + @Test + fun `task is up-to-date on second run`(@TempDir projectDir: File) { + val fixture = VersionPluginsFixture(projectDir) + fixture.assertVersionFile( + expectedContentRegex = "1.2.3~abc12345", + beforeGradle = { + projectBuildFile.appendText( + """ + + tasks.named("writeVersionNumberFile").configure { + gitHash.set("abc12345") + } + """.trimIndent() + ) + }, + ) + + val result = fixture.run("writeVersionNumberFile") + + assertThat(result.task(":writeVersionNumberFile")?.outcome).isEqualTo(TaskOutcome.UP_TO_DATE) + } + + @Test + fun `clean deletes version file`(@TempDir projectDir: File) { + val fixture = VersionPluginsFixture(projectDir) + fixture.assertVersionFile( + expectedContentRegex = "1.2.3~abc12345", + beforeGradle = { + projectBuildFile.appendText( + """ + + tasks.named("writeVersionNumberFile").configure { + gitHash.set("abc12345") + } + """.trimIndent() + ) + }, + ) + val versionFile = fixture.generatedVersionFile + + val result = fixture.run("clean") + + assertThat(result.task(":clean")?.outcome).isEqualTo(TaskOutcome.SUCCESS) + assertThat(versionFile).doesNotExist() + } + + private fun VersionPluginsFixture.assertVersionFile( + expectedContentRegex: String, + task: String = ":writeVersionNumberFile", + beforeGradle: VersionPluginsFixture.() -> Unit = {}, + ): BuildResult { + settingsFile.writeText("""rootProject.name = "my-lib"""") + projectBuildFile.writeText( + """ + plugins { + id("dd-trace-java.version-file") + } + + version = "1.2.3" + """.trimIndent() + ) + beforeGradle() + + val buildResult = run(task) + val taskPath = if (task.startsWith(":")) task else ":$task" + + assertThat(buildResult.task(taskPath)?.outcome).isEqualTo(TaskOutcome.SUCCESS) + assertThat(generatedVersionFile).exists().isFile() + assertThat(generatedVersionFile.readText()).matches(expectedContentRegex) + return buildResult + } +} diff --git a/dd-java-agent/agent-aiguard/build.gradle b/dd-java-agent/agent-aiguard/build.gradle index 5e4841dbf3c..70aab194be4 100644 --- a/dd-java-agent/agent-aiguard/build.gradle +++ b/dd-java-agent/agent-aiguard/build.gradle @@ -2,10 +2,10 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id 'com.gradleup.shadow' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" java { sourceCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/agent-ci-visibility/build.gradle b/dd-java-agent/agent-ci-visibility/build.gradle index 323553b8c03..7dc7b558df3 100644 --- a/dd-java-agent/agent-ci-visibility/build.gradle +++ b/dd-java-agent/agent-ci-visibility/build.gradle @@ -5,10 +5,10 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { id 'com.gradleup.shadow' id 'org.jetbrains.kotlin.jvm' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" apply from: "$rootDir/gradle/test-with-kotlin.gradle" apply from: "$rootDir/gradle/test-with-scala.gradle" diff --git a/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/build.gradle b/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/build.gradle index 01f83345bfe..51b7b0ecfdc 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/build.gradle +++ b/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/build.gradle @@ -1,5 +1,8 @@ +plugins { + id 'dd-trace-java.version-file' +} + apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" dependencies { api project(':dd-java-agent:instrumentation-testing') diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/build.gradle b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/build.gradle index 2e2d7a6c16a..641a93a44bc 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/build.gradle +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/build.gradle @@ -1,5 +1,8 @@ +plugins { + id 'dd-trace-java.version-file' +} + apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" dependencies { api project(':dd-java-agent:agent-ci-visibility') diff --git a/dd-java-agent/agent-debugger/build.gradle b/dd-java-agent/agent-debugger/build.gradle index 3d26d031024..9eac038bfd8 100644 --- a/dd-java-agent/agent-debugger/build.gradle +++ b/dd-java-agent/agent-debugger/build.gradle @@ -2,11 +2,10 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id 'com.gradleup.shadow' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -// We do not publish separate jar, but having version file is useful -apply from: "$rootDir/gradle/version.gradle" minimumInstructionCoverage = 0.1 minimumBranchCoverage = 0.6 diff --git a/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle b/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle index 265b35de54c..3968a161e35 100644 --- a/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle +++ b/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle @@ -1,6 +1,8 @@ +plugins { + id 'dd-trace-java.version-file' +} + apply from: "$rootDir/gradle/java.gradle" -// We do not publish separate jar, but having version file is useful -apply from: "$rootDir/gradle/version.gradle" // Most of the classes are just object model // Those which needs test coverage, test classes are in agent-debugger project diff --git a/dd-java-agent/agent-debugger/debugger-el/build.gradle b/dd-java-agent/agent-debugger/debugger-el/build.gradle index ff9d5d44187..e1b92a20af9 100644 --- a/dd-java-agent/agent-debugger/debugger-el/build.gradle +++ b/dd-java-agent/agent-debugger/debugger-el/build.gradle @@ -1,6 +1,8 @@ +plugins { + id 'dd-trace-java.version-file' +} + apply from: "$rootDir/gradle/java.gradle" -// We do not publish separate jar, but having version file is useful -apply from: "$rootDir/gradle/version.gradle" minimumInstructionCoverage = 0.1 minimumBranchCoverage = 0.6 diff --git a/dd-java-agent/agent-iast/build.gradle b/dd-java-agent/agent-iast/build.gradle index 70eabe4b74d..55d0fbbe9e8 100644 --- a/dd-java-agent/agent-iast/build.gradle +++ b/dd-java-agent/agent-iast/build.gradle @@ -6,10 +6,10 @@ plugins { id 'me.champeau.jmh' id 'com.google.protobuf' version '0.10.0' id 'net.ltgt.errorprone' version '3.1.0' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" tasks.withType(AbstractCompile).configureEach { configureCompiler(it, 11, JavaVersion.VERSION_1_8, "Ensure no APIs beyond JDK8 are used") diff --git a/dd-java-agent/agent-iast/iast-test-fixtures/build.gradle b/dd-java-agent/agent-iast/iast-test-fixtures/build.gradle index 248d7a9e008..bf1a59d1b83 100644 --- a/dd-java-agent/agent-iast/iast-test-fixtures/build.gradle +++ b/dd-java-agent/agent-iast/iast-test-fixtures/build.gradle @@ -1,5 +1,8 @@ +plugins { + id 'dd-trace-java.version-file' +} + apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" dependencies { api project(':dd-java-agent:agent-iast') diff --git a/dd-java-agent/agent-llmobs/build.gradle b/dd-java-agent/agent-llmobs/build.gradle index faea293da33..55d3258fa0c 100644 --- a/dd-java-agent/agent-llmobs/build.gradle +++ b/dd-java-agent/agent-llmobs/build.gradle @@ -2,10 +2,10 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id 'com.gradleup.shadow' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" minimumBranchCoverage = 0.0 minimumInstructionCoverage = 0.0 diff --git a/dd-java-agent/agent-logs-intake/build.gradle b/dd-java-agent/agent-logs-intake/build.gradle index 6d3fd48da68..20d4f3d3ee1 100644 --- a/dd-java-agent/agent-logs-intake/build.gradle +++ b/dd-java-agent/agent-logs-intake/build.gradle @@ -2,10 +2,10 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id 'com.gradleup.shadow' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" excludedClassesCoverage += [ "datadog.trace.logging.intake.LogsWriterImpl", diff --git a/dd-java-agent/appsec/appsec-test-fixtures/build.gradle b/dd-java-agent/appsec/appsec-test-fixtures/build.gradle index a7f64623b36..f053f31b066 100644 --- a/dd-java-agent/appsec/appsec-test-fixtures/build.gradle +++ b/dd-java-agent/appsec/appsec-test-fixtures/build.gradle @@ -1,5 +1,8 @@ +plugins { + id 'dd-trace-java.version-file' +} + apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" dependencies { api project(':dd-java-agent:appsec') diff --git a/dd-java-agent/appsec/build.gradle b/dd-java-agent/appsec/build.gradle index 2d1fb0abffc..b98f2422897 100644 --- a/dd-java-agent/appsec/build.gradle +++ b/dd-java-agent/appsec/build.gradle @@ -5,10 +5,10 @@ import groovy.json.JsonSlurper plugins { id 'com.gradleup.shadow' id 'me.champeau.jmh' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" apply from: "$rootDir/gradle/tries.gradle" dependencies { diff --git a/dd-java-agent/cws-tls/build.gradle b/dd-java-agent/cws-tls/build.gradle index df9efdd2608..199340693e6 100644 --- a/dd-java-agent/cws-tls/build.gradle +++ b/dd-java-agent/cws-tls/build.gradle @@ -3,11 +3,10 @@ import org.apache.maven.model.License plugins { id 'com.gradleup.shadow' + id 'dd-trace-java.version-file' } apply from: "$rootDir/gradle/java.gradle" -// We do not publish a separate jar, but having a version file is useful for checking if cws is included -apply from: "$rootDir/gradle/version.gradle" excludedClassesCoverage += ['datadog.cws.erpc.*', 'datadog.cws.tls.*',] diff --git a/dd-trace-core/build.gradle b/dd-trace-core/build.gradle index 48544e2984f..47199dab774 100644 --- a/dd-trace-core/build.gradle +++ b/dd-trace-core/build.gradle @@ -1,11 +1,11 @@ plugins { id 'me.champeau.jmh' + id 'dd-trace-java.version-file' } description = 'dd-trace-core' apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/version.gradle" minimumBranchCoverage = 0.5 minimumInstructionCoverage = 0.6 diff --git a/gradle/publish.gradle b/gradle/publish.gradle index a975be8a06b..86d06ae9a85 100644 --- a/gradle/publish.gradle +++ b/gradle/publish.gradle @@ -1,5 +1,6 @@ apply plugin: 'maven-publish' apply plugin: 'signing' +apply plugin: 'dd-trace-java.version-file' /** * Proper publishing requires the following environment variables: @@ -9,7 +10,6 @@ apply plugin: 'signing' * GPG_PASSWORD */ -apply from: "$rootDir/gradle/version.gradle" apply from: "$rootDir/gradle/maven-pom.gradle" def isGitlabCI = providers.environmentVariable("GITLAB_CI").isPresent() diff --git a/gradle/version.gradle b/gradle/version.gradle deleted file mode 100644 index 977f0ae3716..00000000000 --- a/gradle/version.gradle +++ /dev/null @@ -1,34 +0,0 @@ -abstract class WriteVersionNumberFile extends DefaultTask { - @Input - abstract Property getVersion() - - @Input - abstract Property getGitHash() - - @OutputDirectory - abstract DirectoryProperty getOutputDirectory() - - WriteVersionNumberFile() { - // Set conventions (defaults) - this.version.convention(project.provider { project.version.toString() }) - this.gitHash.convention(project.provider { - def stdout = new ByteArrayOutputStream() - project.exec { - commandLine 'git', 'rev-parse', '--short', 'HEAD' - standardOutput = stdout - } - return stdout.toString().trim() - }) - this.outputDirectory.convention(project.layout.buildDirectory.dir("generated/version")) - } - - @TaskAction - void writeVersionFile() { - def versionFile = outputDirectory.file("${project.name}.version").get().asFile - versionFile.parentFile.mkdirs() - versionFile.text = "${version.get()}~${gitHash.get()}" - } -} - -def versionTask = tasks.register("writeVersionNumberFile", WriteVersionNumberFile) -sourceSets.main.resources.srcDir(versionTask) diff --git a/products/feature-flagging/feature-flagging-agent/build.gradle.kts b/products/feature-flagging/feature-flagging-agent/build.gradle.kts index bdf439bd9e4..902ae5a6023 100644 --- a/products/feature-flagging/feature-flagging-agent/build.gradle.kts +++ b/products/feature-flagging/feature-flagging-agent/build.gradle.kts @@ -4,10 +4,10 @@ import org.gradle.kotlin.dsl.project plugins { `java-library` id("com.gradleup.shadow") + id("dd-trace-java.version-file") } apply(from = "$rootDir/gradle/java.gradle") -apply(from = "$rootDir/gradle/version.gradle") description = "Feature flagging agent system" diff --git a/products/feature-flagging/feature-flagging-bootstrap/build.gradle.kts b/products/feature-flagging/feature-flagging-bootstrap/build.gradle.kts index d3edc149637..7d3266eb01f 100644 --- a/products/feature-flagging/feature-flagging-bootstrap/build.gradle.kts +++ b/products/feature-flagging/feature-flagging-bootstrap/build.gradle.kts @@ -1,9 +1,9 @@ plugins { `java-library` + id("dd-trace-java.version-file") } apply(from = "$rootDir/gradle/java.gradle") -apply(from = "$rootDir/gradle/version.gradle") description = "Feature flagging remote common module (bootstrap classloader)" diff --git a/products/feature-flagging/feature-flagging-lib/build.gradle.kts b/products/feature-flagging/feature-flagging-lib/build.gradle.kts index 4bb9a77a9a7..5381a9708ac 100644 --- a/products/feature-flagging/feature-flagging-lib/build.gradle.kts +++ b/products/feature-flagging/feature-flagging-lib/build.gradle.kts @@ -1,9 +1,9 @@ plugins { `java-library` + id("dd-trace-java.version-file") } apply(from = "$rootDir/gradle/java.gradle") -apply(from = "$rootDir/gradle/version.gradle") description = "Feature flagging remote config and exposure handling" diff --git a/utils/version-utils/build.gradle.kts b/utils/version-utils/build.gradle.kts index 6eb07efff46..ff6517cc687 100644 --- a/utils/version-utils/build.gradle.kts +++ b/utils/version-utils/build.gradle.kts @@ -1,10 +1,9 @@ plugins { `java-library` + id("dd-trace-java.version-file") } apply(from = "$rootDir/gradle/java.gradle") -// We do not publish separate jar, but having version file is useful -apply(from = "$rootDir/gradle/version.gradle") dependencies { implementation(libs.slf4j) From dab8a45973f70d494367d5a711ba04f39cefdb30 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Tue, 12 May 2026 19:03:25 +0200 Subject: [PATCH 012/478] Add dd-octo-sts chainguard policy files (#11353) Add dd-octo-sts chainguard policy files Add 5 policy files under .github/chainguard/ declaring the issuer, subject, event, and permission constraints for every workflow that will be migrated from secrets.GITHUB_TOKEN to DataDog/dd-octo-sts-action. These policies must be on the default branch before the corresponding workflow changes can use them. Co-authored-by: sarah.chen --- .../self.check-pull-request-labels.sts.yaml | 11 +++++++++++ .github/chainguard/self.check-pull-requests.sts.yaml | 11 +++++++++++ .../self.comment-on-submodule-update.sts.yaml | 11 +++++++++++ .../self.enforce-groovy-migration.sts.yaml | 12 ++++++++++++ .../self.update-issues-on-release.sts.yaml | 10 ++++++++++ 5 files changed, 55 insertions(+) create mode 100644 .github/chainguard/self.check-pull-request-labels.sts.yaml create mode 100644 .github/chainguard/self.check-pull-requests.sts.yaml create mode 100644 .github/chainguard/self.comment-on-submodule-update.sts.yaml create mode 100644 .github/chainguard/self.enforce-groovy-migration.sts.yaml create mode 100644 .github/chainguard/self.update-issues-on-release.sts.yaml diff --git a/.github/chainguard/self.check-pull-request-labels.sts.yaml b/.github/chainguard/self.check-pull-request-labels.sts.yaml new file mode 100644 index 00000000000..03edc6a9a7d --- /dev/null +++ b/.github/chainguard/self.check-pull-request-labels.sts.yaml @@ -0,0 +1,11 @@ +issuer: https://token.actions.githubusercontent.com + +subject: repo:DataDog/dd-trace-java:pull_request + +claim_pattern: + event_name: pull_request + job_workflow_ref: DataDog/dd-trace-java/\.github/workflows/check-pull-request-labels\.yaml@refs/(pull/[0-9]+/merge|heads/.+) + +permissions: + issues: write + pull_requests: write diff --git a/.github/chainguard/self.check-pull-requests.sts.yaml b/.github/chainguard/self.check-pull-requests.sts.yaml new file mode 100644 index 00000000000..4a3a695040f --- /dev/null +++ b/.github/chainguard/self.check-pull-requests.sts.yaml @@ -0,0 +1,11 @@ +issuer: https://token.actions.githubusercontent.com + +subject: repo:DataDog/dd-trace-java:pull_request + +claim_pattern: + event_name: pull_request + job_workflow_ref: DataDog/dd-trace-java/\.github/workflows/check-pull-requests\.yaml@refs/(pull/[0-9]+/merge|heads/.+) + +permissions: + issues: write + pull_requests: write diff --git a/.github/chainguard/self.comment-on-submodule-update.sts.yaml b/.github/chainguard/self.comment-on-submodule-update.sts.yaml new file mode 100644 index 00000000000..0834b81b012 --- /dev/null +++ b/.github/chainguard/self.comment-on-submodule-update.sts.yaml @@ -0,0 +1,11 @@ +issuer: https://token.actions.githubusercontent.com + +subject: repo:DataDog/dd-trace-java:pull_request + +claim_pattern: + event_name: pull_request + job_workflow_ref: DataDog/dd-trace-java/\.github/workflows/comment-on-submodule-update\.yaml@refs/(pull/[0-9]+/merge|heads/.+) + +permissions: + issues: write + pull_requests: write diff --git a/.github/chainguard/self.enforce-groovy-migration.sts.yaml b/.github/chainguard/self.enforce-groovy-migration.sts.yaml new file mode 100644 index 00000000000..2eb01b85b91 --- /dev/null +++ b/.github/chainguard/self.enforce-groovy-migration.sts.yaml @@ -0,0 +1,12 @@ +issuer: https://token.actions.githubusercontent.com + +subject: repo:DataDog/dd-trace-java:pull_request + +claim_pattern: + event_name: pull_request + job_workflow_ref: DataDog/dd-trace-java/\.github/workflows/enforce-groovy-migration\.yaml@refs/(pull/[0-9]+/merge|heads/.+) + +permissions: + contents: read + issues: write + pull_requests: write diff --git a/.github/chainguard/self.update-issues-on-release.sts.yaml b/.github/chainguard/self.update-issues-on-release.sts.yaml new file mode 100644 index 00000000000..b35039044d8 --- /dev/null +++ b/.github/chainguard/self.update-issues-on-release.sts.yaml @@ -0,0 +1,10 @@ +issuer: https://token.actions.githubusercontent.com + +subject_pattern: "repo:DataDog/dd-trace-java:ref:refs/(heads|tags)/.*" + +claim_pattern: + event_name: (release|workflow_dispatch) + job_workflow_ref: DataDog/dd-trace-java/\.github/workflows/update-issues-on-release\.yaml@refs/(heads/.*|tags/.*) + +permissions: + issues: write From 39c42b2fa1b39b1533ce83ef2d6944eee9d0471a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Antonio=20Fern=C3=A1ndez=20de=20Alba?= Date: Tue, 12 May 2026 19:32:10 +0200 Subject: [PATCH 013/478] Propagate Jenkins custom parent ID (#11348) Propagate Jenkins custom parent ID Merge branch 'master' into juan-fernandez-custom-parent-id-jenkins Co-authored-by: devflow.devflow-routing-intake --- .../trace/civisibility/ci/JenkinsInfo.java | 3 +- .../src/test/resources/ci/jenkins.json | 108 ++++++++++++------ metadata/supported-configurations.json | 8 ++ 3 files changed, 82 insertions(+), 37 deletions(-) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java index b187170c7ef..eb6e859ac81 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/JenkinsInfo.java @@ -34,6 +34,7 @@ class JenkinsInfo implements CIProviderInfo { public static final String JENKINS_GIT_COMMIT = "GIT_COMMIT"; public static final String JENKINS_GIT_BRANCH = "GIT_BRANCH"; public static final String JENKINS_DD_CUSTOM_TRACE_ID = "DD_CUSTOM_TRACE_ID"; + public static final String JENKINS_DD_CUSTOM_PARENT_ID = "DD_CUSTOM_PARENT_ID"; public static final String JENKINS_NODE_NAME = "NODE_NAME"; public static final String JENKINS_NODE_LABELS = "NODE_LABELS"; public static final String JENKINS_PR_NUMBER = "CHANGE_ID"; @@ -67,7 +68,7 @@ public CIInfo buildCIInfo() { .ciWorkspace(expandTilde(environment.get(JENKINS_WORKSPACE_PATH))) .ciNodeName(environment.get(JENKINS_NODE_NAME)) .ciNodeLabels(buildCiNodeLabels()) - .ciEnvVars(JENKINS_DD_CUSTOM_TRACE_ID) + .ciEnvVars(JENKINS_DD_CUSTOM_TRACE_ID, JENKINS_DD_CUSTOM_PARENT_ID) .build(); } diff --git a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json index 722a1a90d0d..7a771c311e0 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json +++ b/dd-java-agent/agent-ci-visibility/src/test/resources/ci/jenkins.json @@ -5,6 +5,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://jenkins.com/repo/sample.git", @@ -14,7 +15,7 @@ "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -31,6 +32,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -39,7 +41,7 @@ "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -56,6 +58,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -64,7 +67,7 @@ "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -81,6 +84,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -90,7 +94,7 @@ "WORKSPACE": "foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -108,6 +112,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -117,7 +122,7 @@ "WORKSPACE": "/foo/bar~" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -135,6 +140,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -144,7 +150,7 @@ "WORKSPACE": "/foo/~/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -162,6 +168,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -173,7 +180,7 @@ "WORKSPACE": "~/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -191,6 +198,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -202,7 +210,7 @@ "WORKSPACE": "~foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -220,6 +228,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -231,7 +240,7 @@ "WORKSPACE": "~" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -249,6 +258,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -258,7 +268,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -276,6 +286,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "refs/heads/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -285,7 +296,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -303,6 +314,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "refs/heads/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -312,7 +324,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName/another", "ci.pipeline.number": "jenkins-pipeline-number", @@ -330,6 +342,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "refs/heads/feature/one", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -339,7 +352,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -357,6 +370,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "refs/heads/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -366,7 +380,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -384,6 +398,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "refs/heads/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -393,7 +408,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -411,6 +426,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/tags/0.1.0", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -419,7 +435,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -436,6 +452,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "refs/heads/tags/0.1.0", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "https://jenkins.com/repo/sample.git", @@ -444,7 +461,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -461,6 +478,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "http://hostname.com/repo.git", @@ -470,7 +488,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -488,6 +506,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "http://user@hostname.com/repo.git", @@ -497,7 +516,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -515,6 +534,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "http://user%E2%82%AC@hostname.com/repo.git", @@ -524,7 +544,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -542,6 +562,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "http://user:pwd@hostname.com/repo.git", @@ -551,7 +572,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -569,6 +590,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_BRANCH": "origin/master", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL": "git@hostname.com:org/repo.git", @@ -578,7 +600,7 @@ "WORKSPACE": "/foo/bar" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.name": "jobName", "ci.pipeline.number": "jenkins-pipeline-number", @@ -596,6 +618,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "DD_GIT_BRANCH": "user-supplied-branch", "DD_GIT_COMMIT_AUTHOR_DATE": "usersupplied-authordate", "DD_GIT_COMMIT_AUTHOR_EMAIL": "usersupplied-authoremail", @@ -611,7 +634,7 @@ "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -634,6 +657,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "DD_GIT_COMMIT_AUTHOR_DATE": "usersupplied-authordate", "DD_GIT_COMMIT_AUTHOR_EMAIL": "usersupplied-authoremail", "DD_GIT_COMMIT_AUTHOR_NAME": "usersupplied-authorname", @@ -649,7 +673,7 @@ "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -672,6 +696,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "DD_TEST_CASE_NAME": "http-repository-url-no-git-suffix", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://github.com/DataDog/dogweb", @@ -679,7 +704,7 @@ "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -694,6 +719,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "DD_TEST_CASE_NAME": "ssh-repository-url-no-git-suffix", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "ssh://host.xz:54321/path/to/repo/", @@ -701,7 +727,7 @@ "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -716,13 +742,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://user:password@github.com/DataDog/dogweb.git", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -737,13 +764,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://user@github.com/DataDog/dogweb.git", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -758,13 +786,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://user:password@github.com:1234/DataDog/dogweb.git", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -779,13 +808,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://user:password@1.1.1.1/DataDog/dogweb.git", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -800,13 +830,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://user:password@1.1.1.1:1234/DataDog/dogweb.git", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -821,13 +852,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "https://user:password@1.1.1.1:1234/DataDog/dogweb_with_@_yeah.git", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -842,13 +874,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "ssh://user@host.xz:54321/path/to/repo.git/", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -863,13 +896,14 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "GIT_URL_1": "ssh://user:password@host.xz:54321/path/to/repo.git/", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", @@ -884,6 +918,7 @@ "BUILD_TAG": "jenkins-pipeline-id", "BUILD_URL": "https://jenkins.com/pipeline", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job", @@ -891,7 +926,7 @@ "NODE_NAME": "my-node" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.node.labels": "[\"built-in\",\"linux\"]", "ci.node.name": "my-node", "ci.pipeline.id": "jenkins-pipeline-id", @@ -909,12 +944,13 @@ "CHANGE_ID": 42, "CHANGE_TARGET": "target-branch", "DD_CUSTOM_TRACE_ID": "jenkins-custom-trace-id", + "DD_CUSTOM_PARENT_ID": "jenkins-custom-parent-id", "GIT_COMMIT": "b9f0fb3fdbb94c9d24b2c75b49663122a529e123", "JENKINS_URL": "jenkins", "JOB_URL": "https://jenkins.com/job" }, { - "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\"}", + "_dd.ci.env_vars": "{\"DD_CUSTOM_TRACE_ID\":\"jenkins-custom-trace-id\",\"DD_CUSTOM_PARENT_ID\":\"jenkins-custom-parent-id\"}", "ci.pipeline.id": "jenkins-pipeline-id", "ci.pipeline.number": "jenkins-pipeline-number", "ci.pipeline.url": "https://jenkins.com/pipeline", diff --git a/metadata/supported-configurations.json b/metadata/supported-configurations.json index 8db93e05399..827230f46ae 100644 --- a/metadata/supported-configurations.json +++ b/metadata/supported-configurations.json @@ -1033,6 +1033,14 @@ "aliases": [] } ], + "DD_CUSTOM_PARENT_ID": [ + { + "version": "A", + "type": "string", + "default": null, + "aliases": [] + } + ], "DD_CUSTOM_TRACE_ID": [ { "version": "A", From 1d216ba5e237215523a3a92afe9bb047f3347679 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bempel Date: Tue, 12 May 2026 21:53:54 +0200 Subject: [PATCH 014/478] Migrate dd-trace-core groovy files to java part 5 (#11217) Migrate dd-trace-core groovy files to java part 5 we migrate 4 tests: - DDSpanContextTest - DDSpanSerializationTest - DDSpanTest - KnuthSamplingRateTest # Conflicts: # dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy # dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy # dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy address comments address comments resolve conflicts Co-authored-by: devflow.devflow-routing-intake --- .../skills/migrate-groovy-to-java/SKILL.md | 2 + .../writer/ddagent/TraceMapperV0_5.java | 10 + .../java/datadog/trace/core/PendingTrace.java | 5 + .../trace/core/DDSpanContextTest.groovy | 469 --------------- .../trace/core/DDSpanSerializationTest.groovy | 496 --------------- .../datadog/trace/core/DDSpanTest.groovy | 470 --------------- .../trace/core/KnuthSamplingRateTest.groovy | 234 -------- .../writer/ddagent/TraceMapperTestBridge.java | 17 + .../datadog/trace/core/DDSpanContextTest.java | 563 ++++++++++++++++++ .../trace/core/DDSpanSerializationTest.java | 500 ++++++++++++++++ .../java/datadog/trace/core/DDSpanTest.java | 501 ++++++++++++++++ .../trace/core/KnuthSamplingRateTest.java | 230 +++++++ .../trace/core/PendingTraceTestBridge.java | 10 + .../tabletest/TableTestTypeConverters.java | 49 ++ 14 files changed, 1887 insertions(+), 1669 deletions(-) delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy create mode 100644 dd-trace-core/src/test/java/datadog/trace/common/writer/ddagent/TraceMapperTestBridge.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/DDSpanSerializationTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/DDSpanTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/KnuthSamplingRateTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBridge.java diff --git a/.claude/skills/migrate-groovy-to-java/SKILL.md b/.claude/skills/migrate-groovy-to-java/SKILL.md index 71a197a5413..eb82ba00704 100644 --- a/.claude/skills/migrate-groovy-to-java/SKILL.md +++ b/.claude/skills/migrate-groovy-to-java/SKILL.md @@ -30,6 +30,8 @@ When converting Groovy code to Java code, make sure that: - Do not mark local variables `final` - Ensure variables are human-readable; avoid single-letter names and pre-define variables that are referenced multiple times - When translating Spock `Mock(...)` usage, use `libs.bundles.mockito` instead of writing manual recording/stub implementations +- Keep inline comments +- Migrate the named Spock clauses if they exist as inline comments in the Java unit test TableTest usage Import: `import org.tabletest.junit.TableTest;` diff --git a/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/TraceMapperV0_5.java b/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/TraceMapperV0_5.java index 288b08fc542..b8d1c77afdc 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/TraceMapperV0_5.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/TraceMapperV0_5.java @@ -125,6 +125,16 @@ public String endpoint() { return "v0.5"; } + // Visible for tests + Map getEncoding() { + return encoding; + } + + // Visible for tests + GrowableBuffer getDictionary() { + return dictionary; + } + private static class DictionaryMapper implements Mapper { @Override diff --git a/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java b/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java index 47e60f6310a..776c30870dc 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java @@ -233,6 +233,11 @@ void setLongRunningTrackedState(int state) { LONG_RUNNING_STATE.set(this, state); } + // @VisibleForTesting + int getPendingReferenceCount() { + return pendingReferenceCount; + } + boolean empty() { return 0 >= COMPLETED_SPAN_COUNT.get(this) + PENDING_REFERENCE_COUNT.get(this); } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy deleted file mode 100644 index 99137613ced..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy +++ /dev/null @@ -1,469 +0,0 @@ -package datadog.trace.core - -import datadog.trace.api.DDTags -import datadog.trace.api.DDTraceId -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext -import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities -import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration -import datadog.trace.bootstrap.instrumentation.api.ServiceNameSources -import datadog.trace.bootstrap.instrumentation.api.Tags -import datadog.trace.common.writer.ListWriter -import datadog.trace.core.propagation.ExtractedContext -import datadog.trace.core.test.DDCoreSpecification - -import static datadog.trace.api.TracePropagationStyle.DATADOG -import static datadog.trace.api.sampling.PrioritySampling.* -import static datadog.trace.api.sampling.SamplingMechanism.* -import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MECHANISM_TAG -import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_RULE_RATE_TAG -import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MAX_PER_SECOND_TAG - -class DDSpanContextTest extends DDCoreSpecification { - - def writer - CoreTracer tracer - def profilingContextIntegration - - def setup() { - writer = new ListWriter() - profilingContextIntegration = Mock(ProfilingContextIntegration) - tracer = tracerBuilder().writer(writer) - .profilingContextIntegration(profilingContextIntegration).build() - } - - def cleanup() { - tracer.close() - } - - def "null values for tags delete existing tags"() { - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .withSpanType("fakeType") - .start() - def context = span.context() - - when: - context.setTag("some.tag", "asdf") - context.setTag(name, null) - context.setErrorFlag(true, ErrorPriorities.DEFAULT) - span.finish() - - writer.waitForTraces(1) - - then: - assertTagmap(context.getTags(), tags) - context.serviceName == "fakeService" - context.resourceName.toString() == "fakeResource" - context.spanType == "fakeType" - - where: - name | tags - DDTags.SERVICE_NAME | ["some.tag": "asdf", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id, (DDTags.DD_SVC_SRC): ServiceNameSources.MANUAL] - DDTags.RESOURCE_NAME | ["some.tag": "asdf", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id, (DDTags.DD_SVC_SRC): ServiceNameSources.MANUAL] - DDTags.SPAN_TYPE | ["some.tag": "asdf", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id, (DDTags.DD_SVC_SRC): ServiceNameSources.MANUAL] - "some.tag" | [(DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id, (DDTags.DD_SVC_SRC): ServiceNameSources.MANUAL] - } - - def "special tags set certain values"() { - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .withSpanType("fakeType") - .start() - def context = span.context() - - when: - context.setTag(name, value) - span.finish() - writer.waitForTraces(1) - - then: - def thread = Thread.currentThread() - assertTagmap(context.getTags(), [(DDTags.THREAD_NAME): thread.name, (DDTags.THREAD_ID): thread.id, (DDTags.DD_SVC_SRC): ServiceNameSources.MANUAL]) - context."$method" == value - - where: - name | value | method | details - DDTags.SERVICE_NAME | "different service" | "serviceName" | "different service/fakeOperation/fakeResource" - DDTags.RESOURCE_NAME | "different resource" | "resourceName" | "fakeService/fakeOperation/different resource" - DDTags.SPAN_TYPE | "different type" | "spanType" | "fakeService/fakeOperation/fakeResource" - } - - def "tags can be added to the context"() { - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .withSpanType("fakeType") - .start() - def context = span.context() - - when: - context.setTag(name, value) - span.finish() - writer.waitForTraces(1) - def thread = Thread.currentThread() - - then: - assertTagmap(context.getTags(), [ - (name) : value, - (DDTags.THREAD_NAME) : thread.name, - (DDTags.THREAD_ID) : thread.id, - (DDTags.DD_SVC_SRC): ServiceNameSources.MANUAL - ]) - - where: - name | value - "tag.name" | "some value" - "tag with int" | 1234 - "tag-with-bool" | false - "tag_with_float" | 0.321 - } - - def "metrics use the expected types"() { - // floats should be converted to doubles. - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .start() - def context = span.context() - - when: - context.setMetric("test", (Number)value) - - then: - type.isInstance(context.getTag("test")) - - where: - type | value - Integer | 0 - Integer | Integer.MAX_VALUE - Integer | Integer.MIN_VALUE - Short | Short.MAX_VALUE - Short | Short.MIN_VALUE - Float | Float.MAX_VALUE - Float | Float.MIN_VALUE - Double | Double.MAX_VALUE - Double | Double.MIN_VALUE - Float | 1f - Double | 1d - Float | 0.5f - Double | 0.5d - Integer | 0x55 - } - - def "force keep really keeps the trace"() { - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .start() - def context = span.context() - when: - context.setSamplingPriority(SAMPLER_DROP, DEFAULT) - then: "priority should be set" - context.getSamplingPriority() == SAMPLER_DROP - - when: "sampling priority locked" - context.lockSamplingPriority() - then: "override ignored" - !context.setSamplingPriority(USER_DROP, MANUAL) - context.getSamplingPriority() == SAMPLER_DROP - - when: - context.forceKeep() - then: "lock is bypassed and priority set to USER_KEEP" - context.getSamplingPriority() == USER_KEEP - - cleanup: - span.finish() - } - - def "set TraceSegment tags and data on correct span"() { - setup: - def extracted = new ExtractedContext(DDTraceId.from(123), 456, SAMPLER_KEEP, "789", tracer.getPropagationTagsFactory().empty(), DATADOG) - .withRequestContextDataAppSec("dummy") - - def top = tracer.buildSpan("datadog", "top").asChildOf((AgentSpanContext) extracted).start() - def topC = (DDSpanContext) top.context() - def topTS = top.getRequestContext().getTraceSegment() - def current = tracer.buildSpan("datadog", "current").asChildOf(top).start() - def currentTS = current.getRequestContext().getTraceSegment() - def currentC = (DDSpanContext) current.context() - - when: - currentTS.setDataTop("ctd", "[1]") - currentTS.setTagTop("ctt", "t1") - currentTS.setDataCurrent("ccd", "[2]") - currentTS.setTagCurrent("cct", "t2") - topTS.setDataTop("ttd", "[3]") - topTS.setTagTop("ttt", "t3") - topTS.setDataCurrent("tcd", "[4]") - topTS.setTagCurrent("tct", "t4") - - then: - assertTagmap(topC.getTags(), [(dataTag("ctd")): "[1]", "ctt": "t1", - (dataTag("ttd")): "[3]", "ttt": "t3", - (dataTag("tcd")): "[4]", "tct": "t4"], true) - assertTagmap(currentC.getTags(), [(dataTag("ccd")): "[2]", "cct": "t2"], true) - - cleanup: - current.finish() - top.finish() - } - - def "set single span sampling tags"() { - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .start() - def context = span.context() as DDSpanContext - - expect: - context.getSamplingPriority() == UNSET - - when: - context.setSpanSamplingPriority(rate, limit) - - then: - context.getTag(SPAN_SAMPLING_MECHANISM_TAG) == SPAN_SAMPLING_RATE - context.getTag(SPAN_SAMPLING_RULE_RATE_TAG) == rate - context.getTag(SPAN_SAMPLING_MAX_PER_SECOND_TAG) == (limit == Integer.MAX_VALUE ? null : limit) - // single span sampling should not change the trace sampling priority - context.getSamplingPriority() == UNSET - // make sure the `_dd.p.dm` tag has not been set by single span sampling - !context.getPropagationTags().createTagMap().containsKey("_dd.p.dm") - - where: - rate | limit - 1.0 | 10 - 0.5 | 100 - 0.25 | Integer.MAX_VALUE - } - - def "setting resource name to null is ignored"() { - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .start() - - when: - span.setResourceName(null) - - then: - span.resourceName == "fakeResource" - } - - def "setting operation name triggers constant encoding"() { - when: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .start() - - then: "encoded operation name matches operation name" - 1 * profilingContextIntegration.encodeOperationName("fakeOperation") >> 1 - 1 * profilingContextIntegration.encodeResourceName("fakeResource") >> -1 - span.context.encodedOperationName == 1 - span.context.encodedResourceName == -1 - - when: - span.setOperationName("newOperationName") - - then: - 1 * profilingContextIntegration.encodeOperationName("newOperationName") >> 2 - span.context.encodedOperationName == 2 - - when: - span.setResourceName("newResourceName") - - then: - 1 * profilingContextIntegration.encodeResourceName("newResourceName") >> -2 - span.context.encodedResourceName == -2 - } - - private static String dataTag(String tag) { - "_dd.${tag}.json" - } - - def "Span IDs printed as unsigned long"() { - setup: - def parent = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .withSpanId(-987654321) - .start() - - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .withSpanId(-123456789) - .asChildOf(parent.context()) - .start() - - def context = span.context() as DDSpanContext - - expect: - // even though span ID and parent ID are setup as negative numbers, they should be printed as their unsigned value - // asserting there is no negative sign after ids is the best I can do. - context.toString().contains("id=-") == false - } - - def "service name source is propagated from parent to child span"() { - setup: - def parent = tracer.buildSpan("datadog", "parentOperation") - .withServiceName("fakeService") - .start() - - when: - def child = tracer.buildSpan("datadog", "childOperation") - .asChildOf(parent.context()) - .start() - def childContext = child.context() as DDSpanContext - - then: - childContext.getServiceNameSource() == ServiceNameSources.MANUAL - - cleanup: - child.finish() - parent.finish() - } - - static void assertTagmap(Map source, Map comparison, boolean removeThread = false) { - def sourceWithoutCommonTags = new HashMap(source) - sourceWithoutCommonTags.remove("runtime-id") - sourceWithoutCommonTags.remove("language") - sourceWithoutCommonTags.remove("_dd.agent_psr") - sourceWithoutCommonTags.remove("_sample_rate") - sourceWithoutCommonTags.remove("process_id") - sourceWithoutCommonTags.remove("_dd.trace_span_attribute_schema") - sourceWithoutCommonTags.remove(DDTags.PROFILING_ENABLED) - sourceWithoutCommonTags.remove(DDTags.PROFILING_CONTEXT_ENGINE) - sourceWithoutCommonTags.remove(DDTags.DSM_ENABLED) - sourceWithoutCommonTags.remove(DDTags.DJM_ENABLED) - if (removeThread) { - sourceWithoutCommonTags.remove(DDTags.THREAD_ID) - sourceWithoutCommonTags.remove(DDTags.THREAD_NAME) - } - assert sourceWithoutCommonTags == comparison - } - - def "span kind ordinal constants and SPAN_KIND_VALUES array stay in sync"() { - expect: "SPAN_KIND_VALUES array covers all ordinals" - DDSpanContext.SPAN_KIND_VALUES.length == DDSpanContext.SPAN_KIND_CUSTOM + 1 - - and: "each known ordinal maps to the correct Tags constant" - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_SERVER] == Tags.SPAN_KIND_SERVER - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CLIENT] == Tags.SPAN_KIND_CLIENT - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_PRODUCER] == Tags.SPAN_KIND_PRODUCER - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CONSUMER] == Tags.SPAN_KIND_CONSUMER - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_INTERNAL] == Tags.SPAN_KIND_INTERNAL - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_BROKER] == Tags.SPAN_KIND_BROKER - - and: "UNSET and CUSTOM map to null" - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_UNSET] == null - DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CUSTOM] == null - } - - def "setSpanKindOrdinal round-trips with SPAN_KIND_VALUES for all known kinds"() { - when: - def span = tracer.buildSpan("test", "test").start() - def context = (DDSpanContext) span.context() - context.setSpanKindOrdinal(kindString) - - then: - context.getSpanKindOrdinal() == expectedOrdinal - DDSpanContext.SPAN_KIND_VALUES[expectedOrdinal] == kindString - - cleanup: - span.finish() - - where: - kindString | expectedOrdinal - Tags.SPAN_KIND_SERVER | DDSpanContext.SPAN_KIND_SERVER - Tags.SPAN_KIND_CLIENT | DDSpanContext.SPAN_KIND_CLIENT - Tags.SPAN_KIND_PRODUCER | DDSpanContext.SPAN_KIND_PRODUCER - Tags.SPAN_KIND_CONSUMER | DDSpanContext.SPAN_KIND_CONSUMER - Tags.SPAN_KIND_INTERNAL | DDSpanContext.SPAN_KIND_INTERNAL - Tags.SPAN_KIND_BROKER | DDSpanContext.SPAN_KIND_BROKER - } - - def "setTag and getTag round-trip for span.kind"() { - when: - def span = tracer.buildSpan("test", "test").start() - span.setTag(Tags.SPAN_KIND, kindString) - - then: - span.getTag(Tags.SPAN_KIND) == kindString - - cleanup: - span.finish() - - where: - kindString << [ - Tags.SPAN_KIND_SERVER, - Tags.SPAN_KIND_CLIENT, - Tags.SPAN_KIND_PRODUCER, - Tags.SPAN_KIND_CONSUMER, - Tags.SPAN_KIND_INTERNAL, - Tags.SPAN_KIND_BROKER, - ] - } - - def "getTag returns null when span.kind is not set"() { - when: - def span = tracer.buildSpan("test", "test").start() - - then: - span.getTag(Tags.SPAN_KIND) == null - - cleanup: - span.finish() - } - - def "setTag then removeTag clears span.kind"() { - when: - def span = tracer.buildSpan("test", "test").start() - span.setTag(Tags.SPAN_KIND, kindString) - - then: - span.getTag(Tags.SPAN_KIND) == kindString - - when: - ((DDSpan) span).context().removeTag(Tags.SPAN_KIND) - - then: - span.getTag(Tags.SPAN_KIND) == null - - cleanup: - span.finish() - - where: - kindString << [ - Tags.SPAN_KIND_SERVER, - Tags.SPAN_KIND_CLIENT, - Tags.SPAN_KIND_PRODUCER, - Tags.SPAN_KIND_CONSUMER, - Tags.SPAN_KIND_INTERNAL, - Tags.SPAN_KIND_BROKER, - ] - } - - def "setTag with custom span.kind falls back to tag map"() { - when: - def span = tracer.buildSpan("test", "test").start() - span.setTag(Tags.SPAN_KIND, "custom-kind") - - then: - span.getTag(Tags.SPAN_KIND) == "custom-kind" - - cleanup: - span.finish() - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy deleted file mode 100644 index 3613743e9ff..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy +++ /dev/null @@ -1,496 +0,0 @@ -package datadog.trace.core - -import static datadog.trace.api.config.GeneralConfig.EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED - -import datadog.communication.serialization.ByteBufferConsumer -import datadog.communication.serialization.FlushingBuffer -import datadog.communication.serialization.msgpack.MsgPackWriter -import datadog.trace.api.DDSpanId -import datadog.trace.api.DDTraceId -import datadog.trace.api.ProcessTags -import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.api.datastreams.NoopPathwayContext -import datadog.trace.common.writer.ListWriter -import datadog.trace.common.writer.ddagent.TraceMapperV0_4 -import datadog.trace.common.writer.ddagent.TraceMapperV0_5 -import datadog.trace.core.test.DDCoreSpecification -import org.msgpack.core.MessageFormat -import org.msgpack.core.MessagePack -import org.msgpack.core.buffer.ArrayBufferInput -import org.msgpack.value.ValueType - -import java.nio.ByteBuffer - -class DDSpanSerializationTest extends DDCoreSpecification { - - def setupSpec() { - //disable process tags since will generate noise on the meta - injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "false") - ProcessTags.reset() - } - - def cleanupSpec() { - //disable process tags since will generate noise on the meta - injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "true") - ProcessTags.reset() - } - - def "serialize trace with id #value as int"() { - setup: - def writer = new ListWriter() - def tracer = tracerBuilder().writer(writer).build() - def traceId = DDTraceId.from(value) - def spanId = DDSpanId.from(value) - def context = createContext(spanType, tracer, traceId, spanId) - def span = DDSpan.create("test", 0, context, null) - CaptureBuffer capture = new CaptureBuffer() - def packer = new MsgPackWriter(new FlushingBuffer(1024, capture)) - packer.format(Collections.singletonList(span), new TraceMapperV0_4()) - packer.flush() - def unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)) - int traceCount = capture.messageCount - int spanCount = unpacker.unpackArrayHeader() - int size = unpacker.unpackMapHeader() - - expect: - traceCount == 1 - spanCount == 1 - size == 12 - for (int i = 0; i < size; i++) { - String key = unpacker.unpackString() - - switch (key) { - case "trace_id": - MessageFormat next = unpacker.nextFormat - assert next.valueType == ValueType.INTEGER - if (next == MessageFormat.UINT64) { - assert traceId == DDTraceId.from("${unpacker.unpackBigInteger()}") - } else { - assert traceId == DDTraceId.from(unpacker.unpackLong()) - } - break - case "span_id": - MessageFormat next = unpacker.nextFormat - assert next.valueType == ValueType.INTEGER - if (next == MessageFormat.UINT64) { - assert spanId == DDSpanId.from("${unpacker.unpackBigInteger()}") - } else { - assert spanId == unpacker.unpackLong() - } - break - default: - unpacker.unpackValue() - } - } - - cleanup: - tracer.close() - - where: - value | spanType - "0" | null - "1" | "some-type" - "8223372036854775807" | null - "${BigInteger.valueOf(Long.MAX_VALUE).subtract(1G)}" | "some-type" - "${BigInteger.valueOf(Long.MAX_VALUE).add(1G)}" | null - "${2G.pow(64).subtract(1G)}" | "some-type" - } - - def "serialize trace with id #value as int v0.5"() { - setup: - def writer = new ListWriter() - def tracer = tracerBuilder().writer(writer).build() - def traceId = DDTraceId.from(value) - def spanId = DDSpanId.from(value) - def context = createContext(spanType, tracer, traceId, spanId) - def span = DDSpan.create("test", 0, context, null) - CaptureBuffer capture = new CaptureBuffer() - def packer = new MsgPackWriter(new FlushingBuffer(1024, capture)) - def traceMapper = new TraceMapperV0_5() - packer.format(Collections.singletonList(span), traceMapper) - packer.flush() - def dictionaryUnpacker = MessagePack.newDefaultUnpacker(traceMapper.dictionary.slice()) - String[] dictionary = new String[traceMapper.encoding.size()] - for (int i = 0; i < dictionary.length; ++i) { - dictionary[i] = dictionaryUnpacker.unpackString() - } - def unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)) - int traceCount = capture.messageCount - - int spanCount = unpacker.unpackArrayHeader() - int size = unpacker.unpackArrayHeader() - - expect: - traceCount == 1 - spanCount == 1 - size == 12 - for (int i = 0; i < size; i++) { - switch (i) { - case 3: - MessageFormat next = unpacker.nextFormat - assert next.valueType == ValueType.INTEGER - if (next == MessageFormat.UINT64) { - assert traceId == DDTraceId.from("${unpacker.unpackBigInteger()}") - } else { - assert traceId == DDTraceId.from(unpacker.unpackLong()) - } - break - case 4: - MessageFormat next = unpacker.nextFormat - assert next.valueType == ValueType.INTEGER - if (next == MessageFormat.UINT64) { - assert spanId == DDSpanId.from("${unpacker.unpackBigInteger()}") - } else { - assert spanId == unpacker.unpackLong() - } - break - default: - unpacker.unpackValue() - } - } - - cleanup: - tracer.close() - - where: - value | spanType - "0" | null - "1" | "some-type" - "8223372036854775807" | null - "${BigInteger.valueOf(Long.MAX_VALUE).subtract(1G)}" | "some-type" - "${BigInteger.valueOf(Long.MAX_VALUE).add(1G)}" | null - "${2G.pow(64).subtract(1G)}" | "some-type" - } - - def "serialize trace with baggage and tags correctly v0.4"() { - setup: - def writer = new ListWriter() - def tracer = tracerBuilder().writer(writer).build() - def context = new DDSpanContext( - DDTraceId.ONE, - 1, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - PrioritySampling.UNSET, - null, - baggage, - false, - null, - tags.size(), - tracer.traceCollectorFactory.create(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - null, - injectBaggage, - true) - context.setAllTags(tags) - def span = DDSpan.create("test", 0, context, null) - CaptureBuffer capture = new CaptureBuffer() - def packer = new MsgPackWriter(new FlushingBuffer(1024, capture)) - packer.format(Collections.singletonList(span), new TraceMapperV0_4()) - packer.flush() - def unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)) - int traceCount = capture.messageCount - int spanCount = unpacker.unpackArrayHeader() - int size = unpacker.unpackMapHeader() - - expect: - traceCount == 1 - spanCount == 1 - size == 12 - for (int i = 0; i < size; i++) { - String key = unpacker.unpackString() - - switch (key) { - case "meta": - int packedSize = unpacker.unpackMapHeader() - Map unpackedMeta = [:] - for (int j = 0; j < packedSize; j++) { - def k = unpacker.unpackString() - def v = unpacker.unpackString() - if (k != "thread.name" && k != "thread.id") { - unpackedMeta.put(k, v) - } - } - assert unpackedMeta == expected - break - default: - unpacker.unpackValue() - } - } - - cleanup: - tracer.close() - - where: - baggage | tags | expected | injectBaggage - [:] | [:] | [:] | true - [foo: "bbar"] | [:] | [foo: "bbar"] | true - [foo: "bbar"] | [bar: "tfoo"] | [foo: "bbar", bar: "tfoo"] | true - [foo: "bbar"] | [foo: "tbar"] | [foo: "tbar"] | true - [:] | [:] | [:] | false - [foo: "bbar"] | [:] | [:] | false - [foo: "bbar"] | [bar: "tfoo"] | [bar: "tfoo"] | false - [foo: "bbar"] | [foo: "tbar"] | [foo: "tbar"] | false - } - - def "serialize trace with baggage and tags correctly v0.5"() { - setup: - def writer = new ListWriter() - def tracer = tracerBuilder().writer(writer).build() - def context = new DDSpanContext( - DDTraceId.ONE, - 1, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - PrioritySampling.UNSET, - null, - baggage, - false, - null, - tags.size(), - tracer.traceCollectorFactory.create(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - null, - injectBaggage, - true) - context.setAllTags(tags) - def span = DDSpan.create("test", 0, context, null) - CaptureBuffer capture = new CaptureBuffer() - def packer = new MsgPackWriter(new FlushingBuffer(1024, capture)) - def mapper = new TraceMapperV0_5() - packer.format(Collections.singletonList(span), mapper) - packer.flush() - def unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)) - int traceCount = capture.messageCount - int spanCount = unpacker.unpackArrayHeader() - int size = unpacker.unpackArrayHeader() - def dictionaryUnpacker = MessagePack.newDefaultUnpacker(mapper.dictionary.slice()) - String[] dictionary = new String[mapper.encoding.size()] - for (int i = 0; i < dictionary.length; ++i) { - dictionary[i] = dictionaryUnpacker.unpackString() - } - - expect: - traceCount == 1 - spanCount == 1 - size == 12 - for (int i = 0; i < 9; ++i) { - unpacker.skipValue() - } - - int packedSize = unpacker.unpackMapHeader() - Map unpackedMeta = [:] - for (int j = 0; j < packedSize; j++) { - def k = dictionary[unpacker.unpackInt()] - def v = dictionary[unpacker.unpackInt()] - if (k != "thread.name" && k != "thread.id") { - unpackedMeta.put(k, v) - } - } - assert unpackedMeta == expected - - cleanup: - tracer.close() - - where: - baggage | tags | expected | injectBaggage - [:] | [:] | [:] | true - [foo: "bbar"] | [:] | [foo: "bbar"] | true - [foo: "bbar"] | [bar: "tfoo"] | [foo: "bbar", bar: "tfoo"] | true - [foo: "bbar"] | [foo: "tbar"] | [foo: "tbar"] | true - [:] | [:] | [:] | false - [foo: "bbar"] | [:] | [:] | false - [foo: "bbar"] | [bar: "tfoo"] | [bar: "tfoo"] | false - [foo: "bbar"] | [foo: "tbar"] | [foo: "tbar"] | false - } - - def "serialize trace with flat map tag v0.4"() { - setup: - def tracer = tracerBuilder().writer(new ListWriter()).build() - def context = new DDSpanContext( - DDTraceId.ONE, - 1, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - PrioritySampling.UNSET, - null, - null, - false, - null, - 0, - tracer.traceCollectorFactory.create(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - null) - context.setTag('key1', 'value1') - context.setTag('key2', [ - 'sub1': 'v1', - 'sub2': 'v2' - ]) - def span = DDSpan.create("test", 0, context, null) - - CaptureBuffer capture = new CaptureBuffer() - def packer = new MsgPackWriter(new FlushingBuffer(1024, capture)) - packer.format(Collections.singletonList(span), new TraceMapperV0_4()) - packer.flush() - def unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)) - int traceCount = capture.messageCount - int spanCount = unpacker.unpackArrayHeader() - int size = unpacker.unpackMapHeader() - - def expectedMeta = ['key1': 'value1', 'key2.sub1': 'v1', 'key2.sub2': 'v2'] - - expect: - traceCount == 1 - spanCount == 1 - - for (int i = 0; i < size; i++) { - String key = unpacker.unpackString() - - switch (key) { - case "meta": - int packedSize = unpacker.unpackMapHeader() - Map unpackedMeta = [:] - for (int j = 0; j < packedSize; j++) { - def k = unpacker.unpackString() - def v = unpacker.unpackString() - if (k != "thread.name" && k != "thread.id") { - unpackedMeta.put(k, v) - } - } - assert unpackedMeta == expectedMeta - break - default: - unpacker.unpackValue() - } - } - - cleanup: - tracer.close() - } - - def "serialize trace with flat map tag v0.5"() { - setup: - def tracer = tracerBuilder().writer(new ListWriter()).build() - def context = new DDSpanContext( - DDTraceId.ONE, - 1, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - PrioritySampling.UNSET, - null, - null, - false, - null, - 0, - tracer.traceCollectorFactory.create(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - null) - context.setTag('key1', 'value1') - context.setTag('key2', [ - 'sub1': 'v1', - 'sub2': 'v2' - ]) - def span = DDSpan.create("test", 0, context, null) - - CaptureBuffer capture = new CaptureBuffer() - def packer = new MsgPackWriter(new FlushingBuffer(1024, capture)) - def mapper = new TraceMapperV0_5() - packer.format(Collections.singletonList(span), mapper) - packer.flush() - def unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)) - int traceCount = capture.messageCount - int spanCount = unpacker.unpackArrayHeader() - int size = unpacker.unpackArrayHeader() - def dictionaryUnpacker = MessagePack.newDefaultUnpacker(mapper.dictionary.slice()) - String[] dictionary = new String[mapper.encoding.size()] - for (int i = 0; i < dictionary.length; ++i) { - dictionary[i] = dictionaryUnpacker.unpackString() - } - - def expectedMeta = ['key1': 'value1', 'key2.sub1': 'v1', 'key2.sub2': 'v2'] - - expect: - traceCount == 1 - spanCount == 1 - size == 12 - for (int i = 0; i < 9; ++i) { - unpacker.skipValue() - } - - int packedSize = unpacker.unpackMapHeader() - Map unpackedMeta = [:] - for (int j = 0; j < packedSize; j++) { - def k = dictionary[unpacker.unpackInt()] - def v = dictionary[unpacker.unpackInt()] - if (k != "thread.name" && k != "thread.id") { - unpackedMeta.put(k, v) - } - } - assert unpackedMeta == expectedMeta - - cleanup: - tracer.close() - } - - private class CaptureBuffer implements ByteBufferConsumer { - - private byte[] bytes - int messageCount - - @Override - void accept(int messageCount, ByteBuffer buffer) { - this.messageCount = messageCount - this.bytes = new byte[buffer.limit() - buffer.position()] - buffer.get(bytes) - } - } - - def createContext(String spanType, CoreTracer tracer, DDTraceId traceId, long spanId) { - DDSpanContext ctx = new DDSpanContext( - traceId, - spanId, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - PrioritySampling.UNSET, - null, - ["a-baggage": "value"], - false, - spanType, - 1, - tracer.traceCollectorFactory.create(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - null) - ctx.setAllTags(["k1": "v1"]) - return ctx - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy deleted file mode 100644 index ebdf48ed337..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanTest.groovy +++ /dev/null @@ -1,470 +0,0 @@ -package datadog.trace.core - -import datadog.trace.api.DDSpanId -import datadog.trace.api.DDTags -import datadog.trace.api.DDTraceId -import datadog.trace.api.TagMap -import datadog.trace.api.gateway.RequestContextSlot -import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext -import datadog.trace.api.datastreams.NoopPathwayContext -import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities -import datadog.trace.bootstrap.instrumentation.api.TagContext -import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString -import datadog.trace.common.sampling.RateByServiceTraceSampler -import datadog.trace.common.writer.ListWriter -import datadog.trace.core.propagation.ExtractedContext -import datadog.trace.core.test.DDCoreSpecification -import spock.lang.Shared - -import java.util.concurrent.TimeUnit - -import static datadog.trace.api.TracePropagationStyle.DATADOG -import static datadog.trace.api.sampling.PrioritySampling.UNSET -import static datadog.trace.api.sampling.SamplingMechanism.SPAN_SAMPLING_RATE -import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MAX_PER_SECOND_TAG -import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MECHANISM_TAG -import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_RULE_RATE_TAG - -class DDSpanTest extends DDCoreSpecification { - - @Shared def writer = new ListWriter() - @Shared def sampler = new RateByServiceTraceSampler() - @Shared def tracer = tracerBuilder().writer(writer).sampler(sampler).build() - @Shared def propagationTagsFactory = tracer.getPropagationTagsFactory() - - def cleanup() { - tracer?.close() - } - - def "getters and setters"() { - setup: - def span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("fakeService") - .withResourceName("fakeResource") - .withSpanType("fakeType") - .start() - - when: - span.setServiceName("service") - then: - span.getServiceName() == "service" - - when: - span.setOperationName("operation") - then: - span.getOperationName() == "operation" - - when: - span.setResourceName("resource") - then: - span.getResourceName() == "resource" - - when: - span.setSpanType("type") - then: - span.getType() == "type" - - when: - span.setSamplingPriority(PrioritySampling.UNSET) - then: - span.getSamplingPriority() == null - - when: - span.setSamplingPriority(PrioritySampling.SAMPLER_KEEP) - then: - span.getSamplingPriority() == PrioritySampling.SAMPLER_KEEP - - when: - span.context().lockSamplingPriority() - span.setSamplingPriority(PrioritySampling.USER_KEEP) - then: - span.getSamplingPriority() == PrioritySampling.SAMPLER_KEEP - } - - def "resource name equals operation name if null"() { - setup: - final String opName = "operationName" - def span - - when: - span = tracer.buildSpan("datadog", opName).start() - then: - span.getResourceName() == opName - span.getServiceName() != "" - - when: - final String resourceName = "fake" - final String serviceName = "myService" - span = tracer - .buildSpan("datadog", opName) - .withResourceName(resourceName) - .withServiceName(serviceName) - .start() - then: - span.getResourceName() == resourceName - span.getServiceName() == serviceName - } - - def "duration measured in nanoseconds"() { - setup: - def mod = TimeUnit.MILLISECONDS.toNanos(1) - def builder = tracer.buildSpan("datadog", "test") - def start = System.nanoTime() - def span = builder.start() - def between = System.nanoTime() - def betweenDur = System.nanoTime() - between - span.finish() - def total = System.nanoTime() - start - - expect: - // Generous 5 seconds to execute this test - Math.abs(TimeUnit.NANOSECONDS.toSeconds(span.startTime) - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) < 5 - span.durationNano > betweenDur - span.durationNano < total - span.durationNano % mod > 0 // Very slim chance of a false negative. - } - - def "phasedFinish captures duration but doesn't publish immediately"() { - setup: - def mod = TimeUnit.MILLISECONDS.toNanos(1) - def builder = tracer.buildSpan("datadog", "test") - def start = System.nanoTime() - def span = builder.start() - def between = System.nanoTime() - def betweenDur = System.nanoTime() - between - - when: "calling publish before phasedFinish" - span.publish() - - then: "has no effect" - span.durationNano == 0 - span.context().traceCollector.pendingReferenceCount == 1 - writer.size() == 0 - - when: - def finish = span.phasedFinish() - def total = System.nanoTime() - start - - then: - finish - span.context().traceCollector.pendingReferenceCount == 1 - span.context().traceCollector.spans.isEmpty() - writer.isEmpty() - - and: "duration is recorded as negative to allow publishing" - span.durationNano < 0 - def actualDurationNano = span.durationNano & Long.MAX_VALUE - // Generous 5 seconds to execute this test - Math.abs(TimeUnit.NANOSECONDS.toSeconds(span.startTime) - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) < 5 - actualDurationNano > betweenDur - actualDurationNano < total - actualDurationNano % mod > 0 // Very slim chance of a false negative. - - when: "extra finishes" - finish = span.phasedFinish() - span.finish() // verify conflicting finishes are ignored - - then: "have no effect" - !finish - span.context().traceCollector.pendingReferenceCount == 1 - span.context().traceCollector.spans.isEmpty() - writer.isEmpty() - - when: - span.publish() - - then: "duration is flipped to positive" - span.durationNano > 0 - span.durationNano == actualDurationNano - span.context().traceCollector.pendingReferenceCount == 0 - writer.size() == 1 - - when: "duplicate call to publish" - span.publish() - - then: "has no effect" - span.context().traceCollector.pendingReferenceCount == 0 - writer.size() == 1 - } - - def "starting with a timestamp disables nanotime"() { - setup: - def mod = TimeUnit.MILLISECONDS.toNanos(1) - def start = System.currentTimeMillis() - def builder = tracer.buildSpan("datadog", "test") - .withStartTimestamp(TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis())) - def span = builder.start() - def between = System.currentTimeMillis() - def betweenDur = System.currentTimeMillis() - between - span.finish() - def total = Math.max(1, System.currentTimeMillis() - start) - - expect: - // Generous 5 seconds to execute this test - Math.abs(TimeUnit.NANOSECONDS.toSeconds(span.startTime) - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) < 5 - span.durationNano >= TimeUnit.MILLISECONDS.toNanos(betweenDur) - span.durationNano <= TimeUnit.MILLISECONDS.toNanos(total) - span.durationNano % mod == 0 || span.durationNano == 1 - } - - def "stopping with a timestamp disables nanotime"() { - setup: - def mod = TimeUnit.MILLISECONDS.toNanos(1) - def builder = tracer.buildSpan("datadog", "test") - def start = System.currentTimeMillis() - def span = builder.start() - def between = System.currentTimeMillis() - def betweenDur = System.currentTimeMillis() - between - span.finish(TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis() + 1)) - def total = System.currentTimeMillis() - start + 1 - - expect: - // Generous 5 seconds to execute this test - Math.abs(TimeUnit.NANOSECONDS.toSeconds(span.startTime) - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) < 5 - span.durationNano >= TimeUnit.MILLISECONDS.toNanos(betweenDur) - span.durationNano <= TimeUnit.MILLISECONDS.toNanos(total) - // true span duration can be <1ms if clock was about to tick over, so allow for that - (span.durationNano % mod == 0) || (span.durationNano == 1) - } - - def "stopping with a timestamp before start time yields a min duration of 1"() { - setup: - def span = tracer.buildSpan("datadog", "test").start() - - // remove tick precision part of our internal time to match previous test condition - span.finish(TimeUnit.MILLISECONDS.toMicros(TimeUnit.NANOSECONDS.toMillis(span.startTimeNano)) - 10) - - expect: - span.durationNano == 1 - } - - def "priority sampling metric set only on root span"() { - setup: - def parent = tracer.buildSpan("datadog", "testParent").start() - def child1 = tracer.buildSpan("datadog", "testChild1").asChildOf(parent).start() - - child1.setSamplingPriority(PrioritySampling.SAMPLER_KEEP) - child1.context().lockSamplingPriority() - parent.setSamplingPriority(PrioritySampling.SAMPLER_DROP) - child1.finish() - def child2 = tracer.buildSpan("datadog", "testChild2").asChildOf(parent).start() - child2.finish() - parent.finish() - - expect: - parent.context().samplingPriority == PrioritySampling.SAMPLER_KEEP - parent.getSamplingPriority() == PrioritySampling.SAMPLER_KEEP - parent.hasSamplingPriority() - child1.getSamplingPriority() == parent.getSamplingPriority() - child2.getSamplingPriority() == parent.getSamplingPriority() - !child1.hasSamplingPriority() - !child2.hasSamplingPriority() - } - - def "origin set only on root span"() { - setup: - def parent = tracer.buildSpan("datadog", "testParent").asChildOf(extractedContext).start().context() - def child = tracer.buildSpan("datadog", "testChild1").asChildOf(parent).start().context() - - expect: - parent.origin == "some-origin" - parent.@origin == "some-origin" // Access field directly instead of getter. - child.origin == "some-origin" - child.@origin == null // Access field directly instead of getter. - - where: - extractedContext | _ - new TagContext("some-origin", TagMap.fromMap([:])) | _ - new ExtractedContext(DDTraceId.ONE, 2, PrioritySampling.SAMPLER_DROP, "some-origin", propagationTagsFactory.empty(), DATADOG) | _ - } - - def "isRootSpan() in and not in the context of distributed tracing"() { - setup: - def root = tracer.buildSpan("datadog", "root").asChildOf((AgentSpanContext) extractedContext).start() - def child = tracer.buildSpan("datadog", "child").asChildOf(root).start() - - expect: - root.isRootSpan() == isTraceRootSpan - !child.isRootSpan() - - cleanup: - child.finish() - root.finish() - - where: - extractedContext | isTraceRootSpan - null | true - new ExtractedContext(DDTraceId.from(123), 456, PrioritySampling.SAMPLER_KEEP, "789", propagationTagsFactory.empty(), DATADOG) | false - } - - def "getApplicationRootSpan() in and not in the context of distributed tracing"() { - setup: - def root = tracer.buildSpan("datadog", "root").asChildOf((AgentSpanContext) extractedContext).start() - def child = tracer.buildSpan("datadog", "child").asChildOf(root).start() - - expect: - root.localRootSpan == root - child.localRootSpan == root - // Checking for backward compatibility method names - root.rootSpan == root - child.rootSpan == root - - cleanup: - child.finish() - root.finish() - - where: - extractedContext | isTraceRootSpan - null | true - new ExtractedContext(DDTraceId.from(123), 456, PrioritySampling.SAMPLER_KEEP, "789", propagationTagsFactory.empty(), DATADOG) | false - } - - def 'publishing of root span closes the request context data'() { - setup: - def reqContextData = Mock(Closeable) - def context = new TagContext().withRequestContextDataAppSec(reqContextData) - def root = tracer.buildSpan("datadog", "root").asChildOf(context).start() - def child = tracer.buildSpan("datadog", "child").asChildOf(root).start() - - expect: - root.requestContext.getData(RequestContextSlot.APPSEC).is(reqContextData) - child.requestContext.getData(RequestContextSlot.APPSEC).is(reqContextData) - - when: - child.finish() - - then: - 0 * reqContextData.close() - - when: - root.finish() - - then: - 1 * reqContextData.close() - } - - def "infer top level from parent service name"() { - setup: - def propagationTagsFactory = tracer.getPropagationTagsFactory() - when: - DDSpanContext context = - new DDSpanContext( - DDTraceId.ONE, - 1, - DDSpanId.ZERO, - parentServiceName, - "fakeService", - "fakeOperation", - "fakeResource", - PrioritySampling.UNSET, - null, - Collections. emptyMap(), - false, - "fakeType", - 0, - tracer.traceCollectorFactory.create(DDTraceId.ONE), - null, - null, - NoopPathwayContext.INSTANCE, - false, - propagationTagsFactory.empty()) - then: - context.isTopLevel() == expectTopLevel - - where: - parentServiceName | expectTopLevel - "foo" | true - UTF8BytesString.create("foo") | true - "fakeService" | false - UTF8BytesString.create("fakeService") | false - "" | true - null | true - } - - def "broken pipe exception does not create error span"() { - when: - def span = tracer.buildSpan("datadog", "root").start() - span.addThrowable(new IOException("Broken pipe")) - then: - !span.isError() - span.getTag(DDTags.ERROR_STACK) == null - span.getTag(DDTags.ERROR_MSG) == "Broken pipe" - } - - def "wrapped broken pipe exception does not create error span"() { - when: - def span = tracer.buildSpan("datadog", "root").start() - span.addThrowable(new RuntimeException(new IOException("Broken pipe"))) - then: - !span.isError() - span.getTag(DDTags.ERROR_STACK) == null - span.getTag(DDTags.ERROR_MSG) == "java.io.IOException: Broken pipe" - } - - def "null exception safe to add"() { - when: - def span = tracer.buildSpan("datadog", "root").start() - span.addThrowable(null) - then: - !span.isError() - span.getTag(DDTags.ERROR_STACK) == null - } - - def "set single span sampling tags"() { - setup: - def span = tracer.buildSpan("datadog", "testSpan").start() as DDSpan - - expect: - span.samplingPriority() == UNSET - - when: - span.setSpanSamplingPriority(rate, limit) - - then: - span.getTag(SPAN_SAMPLING_MECHANISM_TAG) == SPAN_SAMPLING_RATE - span.getTag(SPAN_SAMPLING_RULE_RATE_TAG) == rate - span.getTag(SPAN_SAMPLING_MAX_PER_SECOND_TAG) == (limit == Integer.MAX_VALUE ? null : limit) - // single span sampling should not change the trace sampling priority - span.samplingPriority() == UNSET - - where: - rate | limit - 1.0 | 10 - 0.5 | 100 - 0.25 | Integer.MAX_VALUE - } - - def "error priorities should be respected"() { - setup: - def span = tracer.buildSpan("datadog", "testSpan").start() as DDSpan - - expect: - !span.isError() - - when: - span.setError(true) - then: - span.isError() - - when: - span.setError(false) - then: - !span.isError() - - when: - span.setError(true, ErrorPriorities.HTTP_SERVER_DECORATOR) - then: - !span.isError() - - when: - span.setError(true, ErrorPriorities.MANUAL_INSTRUMENTATION) - then: - span.isError() - - when: - span.setError(true, Byte.MAX_VALUE) - then: - span.isError() - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy deleted file mode 100644 index c372e70b7c9..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/KnuthSamplingRateTest.groovy +++ /dev/null @@ -1,234 +0,0 @@ -package datadog.trace.core - -import datadog.trace.common.sampling.PrioritySampler -import datadog.trace.common.sampling.RateByServiceTraceSampler -import datadog.trace.common.sampling.Sampler -import datadog.trace.common.writer.ListWriter -import datadog.trace.common.writer.ddagent.DDAgentApi -import datadog.trace.core.propagation.PropagationTags -import datadog.trace.core.test.DDCoreSpecification - -import static datadog.trace.api.config.TracerConfig.TRACE_RATE_LIMIT -import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLE_RATE -import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLING_RULES -import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLING_SERVICE_RULES -import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_KEEP - -class KnuthSamplingRateTest extends DDCoreSpecification { - static serializer = DDAgentApi.RESPONSE_ADAPTER - - def "updateKnuthSamplingRate formats rate correctly"() { - setup: - def pTags = PropagationTags.factory().empty() - - when: - pTags.updateKnuthSamplingRate(rate) - def tagMap = pTags.createTagMap() - - then: - tagMap.get('_dd.p.ksr') == expected - - where: - rate | expected - 1.0d | "1" - 0.5d | "0.5" - 0.1d | "0.1" - 0.0d | "0" - 0.765432d | "0.765432" - 0.7654321d | "0.765432" - 0.123456d | "0.123456" - 0.100000d | "0.1" - 0.250d | "0.25" - 0.05d | "0.05" - // 6 decimal places: round(0.0123456789 * 1e6) = round(12345.6789) = 12346 - 0.0123456789d | "0.012346" - 0.001d | "0.001" - 0.00500d | "0.005" - // 6 decimal places: round(0.00123456789 * 1e6) = round(1234.56789) = 1235 - 0.00123456789d | "0.001235" - 0.0001d | "0.0001" - 0.000500d | "0.0005" - // 6 decimal places: round(0.000123456789 * 1e6) = round(123.456789) = 123 - 0.000123456789d | "0.000123" - // rounding boundary: round(0.9999995 * 1e6) = round(999999.5) = 1000000 >= 1e6 -> "1" - 0.9999995d | "1" - // values in (0, 1e-4): fixed 6 decimal places, no scientific notation - 0.00001d | "0.00001" - 0.000050d | "0.00005" - // round(1.23456789e-5 * 1e6) = round(12.3456789) = 12 - 1.23456789e-5d | "0.000012" - // below 6-decimal-place precision: round to 0 - 1e-7d | "0" - 5.5e-10d | "0" - // system-tests Test_Knuth_Sample_Rate boundary cases - 0.000001d | "0.000001" // six_decimal_precision_boundary - 0.00000051d | "0.000001" // rounds_up_to_one_millionth - } - - def "agent rate sampler sets ksr propagated tag"() { - setup: - def serviceSampler = new RateByServiceTraceSampler() - def tracer = tracerBuilder().writer(new ListWriter()).build() - String response = '{"rate_by_service": {"service:,env:":' + rate + '}}' - serviceSampler.onResponse("traces", serializer.fromJson(response)) - - when: - DDSpan span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("spock") - .withTag("env", "test") - .ignoreActiveSpan().start() - serviceSampler.setSamplingPriority(span) - - def propagationMap = span.context.propagationTags.createTagMap() - def ksr = propagationMap.get('_dd.p.ksr') - - then: - ksr == expectedKsr - - cleanup: - tracer.close() - - where: - rate | expectedKsr - 1.0 | "1" - 0.5 | "0.5" - 0.0 | "0" - } - - def "rule-based sampler sets ksr propagated tag when rule matches"() { - setup: - Properties properties = new Properties() - properties.setProperty(TRACE_SAMPLING_RULES, jsonRules) - properties.setProperty(TRACE_RATE_LIMIT, "50") - def tracer = tracerBuilder().writer(new ListWriter()).build() - - when: - Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("datadog", "operation") - .withServiceName("service") - .withTag("env", "bar") - .ignoreActiveSpan().start() - ((PrioritySampler) sampler).setSamplingPriority(span) - - def propagationMap = span.context.propagationTags.createTagMap() - def ksr = propagationMap.get('_dd.p.ksr') - - then: - ksr == expectedKsr - - cleanup: - tracer.close() - - where: - jsonRules | expectedKsr - // Matching rule with rate 1 -> ksr is "1" - '[{"service": "service", "sample_rate": 1}]' | "1" - // Matching rule with rate 0.5 -> ksr is "0.5" - '[{"service": "service", "sample_rate": 0.5}]' | "0.5" - // Matching rule with rate 0 -> ksr is "0" (drop, but ksr still set) - '[{"service": "service", "sample_rate": 0}]' | "0" - } - - def "rule-based sampler fallback to agent sampler sets ksr"() { - setup: - Properties properties = new Properties() - // Rule that does NOT match "service" - properties.setProperty(TRACE_SAMPLING_RULES, '[{"service": "nomatch", "sample_rate": 0.5}]') - properties.setProperty(TRACE_RATE_LIMIT, "50") - def tracer = tracerBuilder().writer(new ListWriter()).build() - - when: - Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("datadog", "operation") - .withServiceName("service") - .withTag("env", "bar") - .ignoreActiveSpan().start() - ((PrioritySampler) sampler).setSamplingPriority(span) - - def propagationMap = span.context.propagationTags.createTagMap() - def ksr = propagationMap.get('_dd.p.ksr') - - then: - // When falling back to agent sampler, ksr should still be set (agent rate = 1.0 by default) - ksr == "1" - span.getSamplingPriority() == SAMPLER_KEEP - - cleanup: - tracer.close() - } - - def "service rule sampler sets ksr propagated tag"() { - setup: - Properties properties = new Properties() - properties.setProperty(TRACE_SAMPLING_SERVICE_RULES, "service:0.75") - properties.setProperty(TRACE_RATE_LIMIT, "50") - def tracer = tracerBuilder().writer(new ListWriter()).build() - - when: - Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("datadog", "operation") - .withServiceName("service") - .withTag("env", "bar") - .ignoreActiveSpan().start() - ((PrioritySampler) sampler).setSamplingPriority(span) - - def propagationMap = span.context.propagationTags.createTagMap() - def ksr = propagationMap.get('_dd.p.ksr') - - then: - ksr == "0.75" - - cleanup: - tracer.close() - } - - def "default rate sampler sets ksr propagated tag"() { - setup: - Properties properties = new Properties() - properties.setProperty(TRACE_SAMPLE_RATE, "0.25") - properties.setProperty(TRACE_RATE_LIMIT, "50") - def tracer = tracerBuilder().writer(new ListWriter()).build() - - when: - Sampler sampler = Sampler.Builder.forConfig(properties) - DDSpan span = tracer.buildSpan("datadog", "operation") - .withServiceName("service") - .withTag("env", "bar") - .ignoreActiveSpan().start() - ((PrioritySampler) sampler).setSamplingPriority(span) - - def propagationMap = span.context.propagationTags.createTagMap() - def ksr = propagationMap.get('_dd.p.ksr') - - then: - ksr == "0.25" - - cleanup: - tracer.close() - } - - def "ksr is propagated via x-datadog-tags header"() { - setup: - def serviceSampler = new RateByServiceTraceSampler() - def tracer = tracerBuilder().writer(new ListWriter()).build() - String response = '{"rate_by_service": {"service:,env:":0.5}}' - serviceSampler.onResponse("traces", serializer.fromJson(response)) - - when: - DDSpan span = tracer.buildSpan("datadog", "fakeOperation") - .withServiceName("spock") - .withTag("env", "test") - .ignoreActiveSpan().start() - serviceSampler.setSamplingPriority(span) - - def headerValue = span.context.propagationTags.headerValue( - datadog.trace.core.propagation.PropagationTags.HeaderType.DATADOG) - - then: - headerValue != null - headerValue.contains("_dd.p.ksr=0.5") - - cleanup: - tracer.close() - } -} diff --git a/dd-trace-core/src/test/java/datadog/trace/common/writer/ddagent/TraceMapperTestBridge.java b/dd-trace-core/src/test/java/datadog/trace/common/writer/ddagent/TraceMapperTestBridge.java new file mode 100644 index 00000000000..5632ee2e047 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/common/writer/ddagent/TraceMapperTestBridge.java @@ -0,0 +1,17 @@ +package datadog.trace.common.writer.ddagent; + +import datadog.communication.serialization.GrowableBuffer; +import java.util.Map; + +/** + * Bridge class to allow tests to access package-private method exposed by the {@code TraceMapper} + */ +public class TraceMapperTestBridge { + public static GrowableBuffer getDictionary(TraceMapperV0_5 traceMapperV05) { + return traceMapperV05.getDictionary(); + } + + public static Map getEncoding(TraceMapperV0_5 traceMapperV05) { + return traceMapperV05.getEncoding(); + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java new file mode 100644 index 00000000000..d9e60264b7d --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java @@ -0,0 +1,563 @@ +package datadog.trace.core; + +import static datadog.trace.api.DDTags.DJM_ENABLED; +import static datadog.trace.api.DDTags.DSM_ENABLED; +import static datadog.trace.api.DDTags.PROFILING_CONTEXT_ENGINE; +import static datadog.trace.api.DDTags.PROFILING_ENABLED; +import static datadog.trace.api.DDTags.THREAD_ID; +import static datadog.trace.api.DDTags.THREAD_NAME; +import static datadog.trace.api.TracePropagationStyle.DATADOG; +import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_DROP; +import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_KEEP; +import static datadog.trace.api.sampling.PrioritySampling.UNSET; +import static datadog.trace.api.sampling.PrioritySampling.USER_DROP; +import static datadog.trace.api.sampling.PrioritySampling.USER_KEEP; +import static datadog.trace.api.sampling.SamplingMechanism.DEFAULT; +import static datadog.trace.api.sampling.SamplingMechanism.MANUAL; +import static datadog.trace.api.sampling.SamplingMechanism.SPAN_SAMPLING_RATE; +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND; +import static datadog.trace.core.DDSpanContext.SPAN_KIND_VALUES; +import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MAX_PER_SECOND_TAG; +import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MECHANISM_TAG; +import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_RULE_RATE_TAG; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import datadog.trace.api.DDTags; +import datadog.trace.api.DDTraceId; +import datadog.trace.api.internal.TraceSegment; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; +import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration; +import datadog.trace.bootstrap.instrumentation.api.ServiceNameSources; +import datadog.trace.bootstrap.instrumentation.api.Tags; +import datadog.trace.common.writer.ListWriter; +import datadog.trace.core.propagation.ExtractedContext; +import datadog.trace.junit.utils.tabletest.TableTestTypeConverters; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.tabletest.junit.TableTest; +import org.tabletest.junit.TypeConverter; +import org.tabletest.junit.TypeConverterSources; + +@TypeConverterSources(TableTestTypeConverters.class) +public class DDSpanContextTest extends DDCoreJavaSpecification { + + private ListWriter writer; + private CoreTracer tracer; + private ProfilingContextIntegration profilingContextIntegration; + + @BeforeEach + void setup() { + writer = new ListWriter(); + profilingContextIntegration = mock(ProfilingContextIntegration.class); + tracer = + tracerBuilder() + .writer(writer) + .profilingContextIntegration(profilingContextIntegration) + .build(); + } + + @ParameterizedTest + @ValueSource(strings = {DDTags.SERVICE_NAME, DDTags.RESOURCE_NAME, DDTags.SPAN_TYPE, "some.tag"}) + void nullValuesForTagsDeleteExistingTags(String name) throws Exception { + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .withSpanType("fakeType") + .start(); + DDSpanContext context = (DDSpanContext) span.context(); + + context.setTag("some.tag", "asdf"); + context.setTag(name, null); + context.setErrorFlag(true, ErrorPriorities.DEFAULT); + span.finish(); + writer.waitForTraces(1); + + Map expectedTags = createExpectedTagsFromCurrentThread(); + if (!"some.tag".equals(name)) { + expectedTags.put("some.tag", "asdf"); + } + + assertTagmap(context.getTags(), expectedTags); + assertEquals("fakeService", context.getServiceName()); + assertEquals("fakeResource", context.getResourceName().toString()); + assertEquals("fakeType", context.getSpanType().toString()); + } + + private static Map createExpectedTagsFromCurrentThread() { + Thread thread = Thread.currentThread(); + Map expectedTags = new HashMap<>(); + expectedTags.put(THREAD_NAME, thread.getName()); + expectedTags.put(THREAD_ID, thread.getId()); + expectedTags.put(DDTags.DD_SVC_SRC, ServiceNameSources.MANUAL); + return expectedTags; + } + + // spotless:off + @TableTest({ + "scenario | name | expected | method ", + "SERVICE_NAME tag | " + DDTags.SERVICE_NAME + " | different service | serviceName ", + "RESOURCE_NAME tag | " + DDTags.RESOURCE_NAME + " | different resource | resourceName ", + "SPAN_TYPE tag | " + DDTags.SPAN_TYPE + " | different type | spanType " + }) + //spotless:on + void specialTagsSetCertainValues(String scenario, String name, String expected, String method) + throws Exception { + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .withSpanType("fakeType") + .start(); + DDSpanContext context = (DDSpanContext) span.context(); + + context.setTag(name, expected); + span.finish(); + writer.waitForTraces(1); + + Map expectedTags = createExpectedTagsFromCurrentThread(); + assertTagmap(context.getTags(), expectedTags); + + String value; + switch (method) { + case "serviceName": + value = context.getServiceName(); + break; + case "resourceName": + value = context.getResourceName().toString(); + break; + case "spanType": + value = context.getSpanType().toString(); + break; + default: + throw new IllegalArgumentException("Unknown method: " + method); + } + assertEquals(expected, value); + } + + static Object[][] tagsCanBeAddedToContextArguments() { + return new Object[][] { + {"tag.name", "some value"}, + {"tag with int", 1234}, + {"tag-with-bool", false}, + {"tag_with_float", 0.321} + }; + } + + @ParameterizedTest + @MethodSource("tagsCanBeAddedToContextArguments") + void tagsCanBeAddedToContext(String name, Object value) throws Exception { + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .withSpanType("fakeType") + .start(); + DDSpanContext context = (DDSpanContext) span.context(); + + context.setTag(name, value); + span.finish(); + writer.waitForTraces(1); + + Map expectedTags = createExpectedTagsFromCurrentThread(); + expectedTags.put(name, value); + assertTagmap(context.getTags(), expectedTags); + } + + @TableTest({ + "expectedType | value ", + "java.lang.Integer | 0 ", + "java.lang.Integer | Integer.MAX_VALUE", + "java.lang.Integer | Integer.MIN_VALUE", + "java.lang.Short | Short.MAX_VALUE ", + "java.lang.Short | Short.MIN_VALUE ", + "java.lang.Float | Float.MAX_VALUE ", + "java.lang.Float | Float.MIN_VALUE ", + "java.lang.Double | Double.MAX_VALUE ", + "java.lang.Double | Double.MIN_VALUE ", + "java.lang.Float | 1f ", + "java.lang.Double | 1d ", + "java.lang.Float | 0.5f ", + "java.lang.Double | 0.5d ", + "java.lang.Integer | 0x55 " + }) + void metricsUseExpectedTypes(Class expectedType, Number value) { + // floats should be converted to doubles. + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .start(); + DDSpanContext context = (DDSpanContext) span.context(); + + context.setMetric("test", value); + + assertInstanceOf(expectedType, context.getTag("test")); + + span.finish(); + } + + @Test + void forceKeepReallyKeepsTrace() { + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .start(); + DDSpanContext context = (DDSpanContext) span.context(); + + context.setSamplingPriority(SAMPLER_DROP, DEFAULT); + assertEquals(SAMPLER_DROP, context.getSamplingPriority()); + + context.lockSamplingPriority(); + assertFalse(context.setSamplingPriority(USER_DROP, MANUAL)); + assertEquals(SAMPLER_DROP, context.getSamplingPriority()); + + context.forceKeep(); + assertEquals(USER_KEEP, context.getSamplingPriority()); + + span.finish(); + } + + @Test + void setTraceSegmentTagsAndDataOnCorrectSpan() { + ExtractedContext extracted = + (ExtractedContext) + new ExtractedContext( + DDTraceId.from(123), + 456, + SAMPLER_KEEP, + "789", + tracer.getPropagationTagsFactory().empty(), + DATADOG) + .withRequestContextDataAppSec("dummy"); + + AgentSpan top = + tracer.buildSpan("datadog", "top").asChildOf((AgentSpanContext) extracted).start(); + DDSpanContext topC = (DDSpanContext) top.context(); + TraceSegment topTS = top.getRequestContext().getTraceSegment(); + + AgentSpan current = tracer.buildSpan("datadog", "current").asChildOf(top.context()).start(); + TraceSegment currentTS = current.getRequestContext().getTraceSegment(); + DDSpanContext currentC = (DDSpanContext) current.context(); + + currentTS.setDataTop("ctd", "[1]"); + currentTS.setTagTop("ctt", "t1"); + currentTS.setDataCurrent("ccd", "[2]"); + currentTS.setTagCurrent("cct", "t2"); + topTS.setDataTop("ttd", "[3]"); + topTS.setTagTop("ttt", "t3"); + topTS.setDataCurrent("tcd", "[4]"); + topTS.setTagCurrent("tct", "t4"); + + Map expectedTopTags = new HashMap<>(); + expectedTopTags.put(dataTag("ctd"), "[1]"); + expectedTopTags.put("ctt", "t1"); + expectedTopTags.put(dataTag("ttd"), "[3]"); + expectedTopTags.put("ttt", "t3"); + expectedTopTags.put(dataTag("tcd"), "[4]"); + expectedTopTags.put("tct", "t4"); + assertTagmap(topC.getTags(), expectedTopTags, true); + + Map expectedCurrentTags = new HashMap<>(); + expectedCurrentTags.put(dataTag("ccd"), "[2]"); + expectedCurrentTags.put("cct", "t2"); + assertTagmap(currentC.getTags(), expectedCurrentTags, true); + + current.finish(); + top.finish(); + } + + @TableTest({ + "rate | limit ", + "1.0 | 10 ", + "0.5 | 100 ", + "0.25 | Integer.MAX_VALUE" + }) + void setSingleSpanSamplingTags(double rate, int limit) { + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .start(); + DDSpanContext context = (DDSpanContext) span.context(); + assertEquals(UNSET, context.getSamplingPriority()); + + context.setSpanSamplingPriority(rate, limit); + + assertEquals((int) SPAN_SAMPLING_RATE, context.getTag(SPAN_SAMPLING_MECHANISM_TAG)); + assertEquals(rate, context.getTag(SPAN_SAMPLING_RULE_RATE_TAG)); + assertEquals( + limit == Integer.MAX_VALUE ? null : Double.valueOf(limit), + context.getTag(SPAN_SAMPLING_MAX_PER_SECOND_TAG)); + // single span sampling should not change the trace sampling priority + assertEquals(UNSET, context.getSamplingPriority()); + // make sure the `_dd.p.dm` tag has not been set by single span sampling + assertFalse(context.getPropagationTags().createTagMap().containsKey("_dd.p.dm")); + + span.finish(); + } + + @Test + void settingResourceNameToNullIsIgnored() { + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .start(); + + span.setResourceName(null); + + assertEquals("fakeResource", ((DDSpan) span).getResourceName().toString()); + + span.finish(); + } + + @Test + void settingOperationNameTriggersConstantEncoding() { + when(profilingContextIntegration.encodeOperationName("fakeOperation")).thenReturn(1); + when(profilingContextIntegration.encodeResourceName("fakeResource")).thenReturn(-1); + + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .start(); + + verify(profilingContextIntegration, times(1)).encodeOperationName("fakeOperation"); + verify(profilingContextIntegration, times(1)).encodeResourceName("fakeResource"); + assertEquals(1, ((DDSpanContext) span.context()).getEncodedOperationName()); + assertEquals(-1, ((DDSpanContext) span.context()).getEncodedResourceName()); + + when(profilingContextIntegration.encodeOperationName("newOperationName")).thenReturn(2); + span.setOperationName("newOperationName"); + + verify(profilingContextIntegration, times(1)).encodeOperationName("newOperationName"); + assertEquals(2, ((DDSpanContext) span.context()).getEncodedOperationName()); + + when(profilingContextIntegration.encodeResourceName("newResourceName")).thenReturn(-2); + span.setResourceName("newResourceName"); + + verify(profilingContextIntegration, times(1)).encodeResourceName("newResourceName"); + assertEquals(-2, ((DDSpanContext) span.context()).getEncodedResourceName()); + + span.finish(); + } + + @Test + void spanIdsPrintedAsUnsignedLong() { + AgentSpan parent = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .withSpanId(-987654321) + .start(); + + AgentSpan span = + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .withSpanId(-123456789) + .asChildOf(parent.context()) + .start(); + + DDSpanContext context = (DDSpanContext) span.context(); + + // even though span ID and parent ID are setup as negative numbers, they should be printed as + // their unsigned value + // asserting there is no negative sign after ids is the best I can do. + assertFalse(context.toString().contains("id=-")); + + span.finish(); + parent.finish(); + } + + @Test + void serviceNameSourceIsPropagatedFromParentToChildSpan() { + AgentSpan parent = + tracer.buildSpan("datadog", "parentOperation").withServiceName("fakeService").start(); + + AgentSpan child = + tracer.buildSpan("datadog", "childOperation").asChildOf(parent.context()).start(); + DDSpanContext childContext = (DDSpanContext) child.context(); + + assertEquals(ServiceNameSources.MANUAL, childContext.getServiceNameSource()); + + child.finish(); + parent.finish(); + } + + @Test + void spanKindOrdinalConstantsAndSpanKindValuesArrayStayInSync() { + // SPAN_KIND_VALUES array covers all ordinals + assertEquals(DDSpanContext.SPAN_KIND_CUSTOM + 1, SPAN_KIND_VALUES.length); + + // each known ordinal maps to the correct Tags constant" + assertEquals(Tags.SPAN_KIND_SERVER, SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_SERVER]); + assertEquals(Tags.SPAN_KIND_CLIENT, SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CLIENT]); + assertEquals(Tags.SPAN_KIND_PRODUCER, SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_PRODUCER]); + assertEquals(Tags.SPAN_KIND_CONSUMER, SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CONSUMER]); + assertEquals(Tags.SPAN_KIND_INTERNAL, SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_INTERNAL]); + assertEquals(Tags.SPAN_KIND_BROKER, SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_BROKER]); + + // UNSET and CUSTOM map to null + assertNull(SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_UNSET]); + assertNull(SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CUSTOM]); + } + + @TableTest({ + "scenario | kindString | expectedOrdinal ", + "server | server | DDSpanContext.SPAN_KIND_SERVER ", + "client | client | DDSpanContext.SPAN_KIND_CLIENT ", + "producer | producer | DDSpanContext.SPAN_KIND_PRODUCER", + "consumer | consumer | DDSpanContext.SPAN_KIND_CONSUMER", + "internal | internal | DDSpanContext.SPAN_KIND_INTERNAL", + "broker | broker | DDSpanContext.SPAN_KIND_BROKER " + }) + void setSpanKindOrdinalRoundTripsWithSpanKindValues( + String scenario, String kindString, int expectedOrdinal) { + AgentSpan span = tracer.buildSpan("test", "test").start(); + DDSpanContext context = (DDSpanContext) span.context(); + context.setSpanKindOrdinal(kindString); + + assertEquals(expectedOrdinal, context.getSpanKindOrdinal()); + assertEquals(kindString, SPAN_KIND_VALUES[expectedOrdinal]); + + span.finish(); + } + + @TypeConverter + public static int toInt(String value) { + if (value == null) { + throw new IllegalArgumentException("Value cannot be null"); + } + switch (value) { + case "DDSpanContext.SPAN_KIND_SERVER": + return DDSpanContext.SPAN_KIND_SERVER; + case "DDSpanContext.SPAN_KIND_CLIENT": + return DDSpanContext.SPAN_KIND_CLIENT; + case "DDSpanContext.SPAN_KIND_PRODUCER": + return DDSpanContext.SPAN_KIND_PRODUCER; + case "DDSpanContext.SPAN_KIND_CONSUMER": + return DDSpanContext.SPAN_KIND_CONSUMER; + case "DDSpanContext.SPAN_KIND_BROKER": + return DDSpanContext.SPAN_KIND_BROKER; + case "DDSpanContext.SPAN_KIND_INTERNAL": + return DDSpanContext.SPAN_KIND_INTERNAL; + default: + return TableTestTypeConverters.toInt(value); + } + } + + @ParameterizedTest + @ValueSource( + strings = { + Tags.SPAN_KIND_SERVER, + Tags.SPAN_KIND_CLIENT, + Tags.SPAN_KIND_PRODUCER, + Tags.SPAN_KIND_CONSUMER, + Tags.SPAN_KIND_INTERNAL, + Tags.SPAN_KIND_BROKER + }) + void setTagAndGetTagRoundTripForSpanKind(String kindString) { + AgentSpan span = tracer.buildSpan("test", "test").start(); + span.setTag(SPAN_KIND, kindString); + + assertEquals(kindString, span.getTag(SPAN_KIND)); + + span.finish(); + } + + @Test + void getTagReturnsNullWhenSpanKindNotSet() { + AgentSpan span = tracer.buildSpan("test", "test").start(); + + assertNull(span.getTag(SPAN_KIND)); + + span.finish(); + } + + @ParameterizedTest + @ValueSource( + strings = { + Tags.SPAN_KIND_SERVER, + Tags.SPAN_KIND_CLIENT, + Tags.SPAN_KIND_PRODUCER, + Tags.SPAN_KIND_CONSUMER, + Tags.SPAN_KIND_INTERNAL, + Tags.SPAN_KIND_BROKER + }) + void setTagThenRemoveTagClearsSpanKind(String kindString) { + AgentSpan span = tracer.buildSpan("test", "test").start(); + span.setTag(SPAN_KIND, kindString); + + assertEquals(kindString, span.getTag(SPAN_KIND)); + + ((DDSpan) span).context().removeTag(SPAN_KIND); + + assertNull(span.getTag(SPAN_KIND)); + + span.finish(); + } + + @Test + void setTagWithCustomSpanKindFallsBackToTagMap() { + AgentSpan span = tracer.buildSpan("test", "test").start(); + span.setTag(SPAN_KIND, "custom-kind"); + + assertEquals("custom-kind", span.getTag(SPAN_KIND)); + + span.finish(); + } + + static void assertTagmap(Map source, Map comparison) { + assertTagmap(source, comparison, false); + } + + static void assertTagmap(Map source, Map comparison, boolean removeThread) { + Map sourceWithoutCommonTags = new HashMap<>(source); + sourceWithoutCommonTags.remove("runtime-id"); + sourceWithoutCommonTags.remove("language"); + sourceWithoutCommonTags.remove("_dd.agent_psr"); + sourceWithoutCommonTags.remove("_sample_rate"); + sourceWithoutCommonTags.remove("process_id"); + sourceWithoutCommonTags.remove("_dd.trace_span_attribute_schema"); + sourceWithoutCommonTags.remove(PROFILING_ENABLED); + sourceWithoutCommonTags.remove(PROFILING_CONTEXT_ENGINE); + sourceWithoutCommonTags.remove(DSM_ENABLED); + sourceWithoutCommonTags.remove(DJM_ENABLED); + if (removeThread) { + sourceWithoutCommonTags.remove(THREAD_ID); + sourceWithoutCommonTags.remove(THREAD_NAME); + } + assertEquals(comparison, sourceWithoutCommonTags); + } + + private static String dataTag(String tag) { + return "_dd." + tag + ".json"; + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/DDSpanSerializationTest.java b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanSerializationTest.java new file mode 100644 index 00000000000..78c8dda3c94 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanSerializationTest.java @@ -0,0 +1,500 @@ +package datadog.trace.core; + +import static datadog.trace.api.config.GeneralConfig.EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import datadog.communication.serialization.ByteBufferConsumer; +import datadog.communication.serialization.FlushingBuffer; +import datadog.communication.serialization.GrowableBuffer; +import datadog.communication.serialization.msgpack.MsgPackWriter; +import datadog.trace.api.Config; +import datadog.trace.api.DDSpanId; +import datadog.trace.api.DDTraceId; +import datadog.trace.api.ProcessTags; +import datadog.trace.api.datastreams.NoopPathwayContext; +import datadog.trace.api.sampling.PrioritySampling; +import datadog.trace.common.writer.ListWriter; +import datadog.trace.common.writer.ddagent.TraceMapperTestBridge; +import datadog.trace.common.writer.ddagent.TraceMapperV0_4; +import datadog.trace.common.writer.ddagent.TraceMapperV0_5; +import datadog.trace.junit.utils.config.WithConfig; +import java.nio.ByteBuffer; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.msgpack.core.MessageFormat; +import org.msgpack.core.MessagePack; +import org.msgpack.core.MessageUnpacker; +import org.msgpack.core.buffer.ArrayBufferInput; +import org.msgpack.value.ValueType; +import org.tabletest.junit.TableTest; + +@WithConfig(key = EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, value = "false") +public class DDSpanSerializationTest extends DDCoreJavaSpecification { + + @BeforeAll + static void beforeAll() { + ProcessTags.reset(Config.get()); + } + + @AfterAll + static void afterAll() { + ProcessTags.reset(Config.get()); + } + + @TableTest({ + "scenario | value | spanType ", + "zero | 0 | ", + "one with type | 1 | some-type", + "max long minus one billion | 8223372036854775807 | ", + "Long.MAX_VALUE minus one | 9223372036854775806 | some-type", + "Long.MAX_VALUE plus one | 9223372036854775808 | ", + "2^64 minus one | 18446744073709551615 | some-type" + }) + void serializeTraceWithIdAsInt(String scenario, String value, String spanType) throws Exception { + ListWriter writer = new ListWriter(); + CoreTracer tracer = tracerBuilder().writer(writer).build(); + DDTraceId traceId = DDTraceId.from(value); + long spanId = DDSpanId.from(value); + DDSpanContext context = createContext(spanType, tracer, traceId, spanId); + DDSpan span = DDSpan.create("test", 0, context, null); + CaptureBuffer capture = new CaptureBuffer(); + MsgPackWriter packer = new MsgPackWriter(new FlushingBuffer(1024, capture)); + packer.format(Collections.singletonList(span), new TraceMapperV0_4()); + packer.flush(); + MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)); + int traceCount = capture.messageCount; + int spanCount = unpacker.unpackArrayHeader(); + int size = unpacker.unpackMapHeader(); + + assertEquals(1, traceCount); + assertEquals(1, spanCount); + assertEquals(12, size); + for (int i = 0; i < size; i++) { + String key = unpacker.unpackString(); + switch (key) { + case "trace_id": + MessageFormat traceIdFormat = unpacker.getNextFormat(); + assertEquals(ValueType.INTEGER, traceIdFormat.getValueType()); + if (traceIdFormat == MessageFormat.UINT64) { + assertEquals(traceId, DDTraceId.from(unpacker.unpackBigInteger().toString())); + } else { + assertEquals(traceId, DDTraceId.from(unpacker.unpackLong())); + } + break; + case "span_id": + MessageFormat spanIdFormat = unpacker.getNextFormat(); + assertEquals(ValueType.INTEGER, spanIdFormat.getValueType()); + if (spanIdFormat == MessageFormat.UINT64) { + assertEquals(spanId, DDSpanId.from(unpacker.unpackBigInteger().toString())); + } else { + assertEquals(spanId, unpacker.unpackLong()); + } + break; + default: + unpacker.unpackValue(); + } + } + tracer.close(); + } + + @TableTest({ + "scenario | value | spanType ", + "zero | 0 | ", + "one with type | 1 | some-type", + "max long minus one billion | 8223372036854775807 | ", + "Long.MAX_VALUE minus one | 9223372036854775806 | some-type", + "Long.MAX_VALUE plus one | 9223372036854775808 | ", + "2^64 minus one | 18446744073709551615 | some-type" + }) + void serializeTraceWithIdAsIntV05(String scenario, String value, String spanType) + throws Exception { + ListWriter writer = new ListWriter(); + CoreTracer tracer = tracerBuilder().writer(writer).build(); + DDTraceId traceId = DDTraceId.from(value); + long spanId = DDSpanId.from(value); + DDSpanContext context = createContext(spanType, tracer, traceId, spanId); + DDSpan span = DDSpan.create("test", 0, context, null); + CaptureBuffer capture = new CaptureBuffer(); + MsgPackWriter packer = new MsgPackWriter(new FlushingBuffer(1024, capture)); + TraceMapperV0_5 traceMapper = new TraceMapperV0_5(); + packer.format(Collections.singletonList(span), traceMapper); + packer.flush(); + MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)); + int traceCount = capture.messageCount; + int spanCount = unpacker.unpackArrayHeader(); + int size = unpacker.unpackArrayHeader(); + + assertEquals(1, traceCount); + assertEquals(1, spanCount); + assertEquals(12, size); + for (int i = 0; i < size; i++) { + switch (i) { + case 3: + MessageFormat traceIdFormat = unpacker.getNextFormat(); + assertEquals(ValueType.INTEGER, traceIdFormat.getValueType()); + if (traceIdFormat == MessageFormat.UINT64) { + assertEquals(traceId, DDTraceId.from(unpacker.unpackBigInteger().toString())); + } else { + assertEquals(traceId, DDTraceId.from(unpacker.unpackLong())); + } + break; + case 4: + MessageFormat spanIdFormat = unpacker.getNextFormat(); + assertEquals(ValueType.INTEGER, spanIdFormat.getValueType()); + if (spanIdFormat == MessageFormat.UINT64) { + assertEquals(spanId, DDSpanId.from(unpacker.unpackBigInteger().toString())); + } else { + assertEquals(spanId, unpacker.unpackLong()); + } + break; + default: + unpacker.unpackValue(); + } + } + tracer.close(); + } + + @TableTest({ + "scenario | baggage | tags | expected | injectBaggage", + "empty baggage and tags inject | [:] | [:] | [:] | true ", + "baggage only inject | [foo: bbar] | [:] | [foo: bbar] | true ", + "baggage and tags inject no overlap | [foo: bbar] | [bar: tfoo] | [foo: bbar, bar: tfoo] | true ", + "baggage and tags inject tag wins | [foo: bbar] | [foo: tbar] | [foo: tbar] | true ", + "empty baggage and tags no inject | [:] | [:] | [:] | false ", + "baggage only no inject | [foo: bbar] | [:] | [:] | false ", + "baggage and tags no inject no overlap | [foo: bbar] | [bar: tfoo] | [bar: tfoo] | false ", + "baggage and tags no inject tag wins | [foo: bbar] | [foo: tbar] | [foo: tbar] | false " + }) + void serializeTraceWithBaggageAndTagsCorrectlyV04( + String scenario, + Map baggage, + Map tags, + Map expected, + boolean injectBaggage) + throws Exception { + ListWriter writer = new ListWriter(); + CoreTracer tracer = tracerBuilder().writer(writer).build(); + DDSpanContext context = + new DDSpanContext( + DDTraceId.ONE, + 1, + DDSpanId.ZERO, + null, + "fakeService", + "fakeOperation", + "fakeResource", + PrioritySampling.UNSET, + null, + baggage, + false, + null, + tags.size(), + tracer.createTraceCollector(DDTraceId.ONE), + null, + null, + NoopPathwayContext.INSTANCE, + false, + null, + injectBaggage, + true); + context.setAllTags(tags); + DDSpan span = DDSpan.create("test", 0, context, null); + CaptureBuffer capture = new CaptureBuffer(); + MsgPackWriter packer = new MsgPackWriter(new FlushingBuffer(1024, capture)); + packer.format(Collections.singletonList(span), new TraceMapperV0_4()); + packer.flush(); + MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)); + int traceCount = capture.messageCount; + int spanCount = unpacker.unpackArrayHeader(); + int size = unpacker.unpackMapHeader(); + + assertEquals(1, traceCount); + assertEquals(1, spanCount); + assertEquals(12, size); + for (int i = 0; i < size; i++) { + String key = unpacker.unpackString(); + if ("meta".equals(key)) { + int packedSize = unpacker.unpackMapHeader(); + Map unpackedMeta = new HashMap<>(); + for (int j = 0; j < packedSize; j++) { + String k = unpacker.unpackString(); + String v = unpacker.unpackString(); + if (!"thread.name".equals(k) && !"thread.id".equals(k)) { + unpackedMeta.put(k, v); + } + } + assertEquals(expected, unpackedMeta); + } else { + unpacker.unpackValue(); + } + } + tracer.close(); + } + + @TableTest({ + "scenario | baggage | tags | expected | injectBaggage", + "empty baggage and tags inject | [:] | [:] | [:] | true ", + "baggage only inject | [foo: bbar] | [:] | [foo: bbar] | true ", + "baggage and tags inject no overlap | [foo: bbar] | [bar: tfoo] | [foo: bbar, bar: tfoo] | true ", + "baggage and tags inject tag wins | [foo: bbar] | [foo: tbar] | [foo: tbar] | true ", + "empty baggage and tags no inject | [:] | [:] | [:] | false ", + "baggage only no inject | [foo: bbar] | [:] | [:] | false ", + "baggage and tags no inject no overlap | [foo: bbar] | [bar: tfoo] | [bar: tfoo] | false ", + "baggage and tags no inject tag wins | [foo: bbar] | [foo: tbar] | [foo: tbar] | false " + }) + void serializeTraceWithBaggageAndTagsCorrectlyV05( + String scenario, + Map baggage, + Map tags, + Map expected, + boolean injectBaggage) + throws Exception { + ListWriter writer = new ListWriter(); + CoreTracer tracer = tracerBuilder().writer(writer).build(); + DDSpanContext context = + new DDSpanContext( + DDTraceId.ONE, + 1, + DDSpanId.ZERO, + null, + "fakeService", + "fakeOperation", + "fakeResource", + PrioritySampling.UNSET, + null, + baggage, + false, + null, + tags.size(), + tracer.createTraceCollector(DDTraceId.ONE), + null, + null, + NoopPathwayContext.INSTANCE, + false, + null, + injectBaggage, + true); + context.setAllTags(tags); + DDSpan span = DDSpan.create("test", 0, context, null); + CaptureBuffer capture = new CaptureBuffer(); + MsgPackWriter packer = new MsgPackWriter(new FlushingBuffer(1024, capture)); + TraceMapperV0_5 mapper = new TraceMapperV0_5(); + packer.format(Collections.singletonList(span), mapper); + packer.flush(); + MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)); + int traceCount = capture.messageCount; + int spanCount = unpacker.unpackArrayHeader(); + int size = unpacker.unpackArrayHeader(); + String[] dictionary = buildDictionary(mapper); + + assertEquals(1, traceCount); + assertEquals(1, spanCount); + assertEquals(12, size); + for (int i = 0; i < 9; ++i) { + unpacker.skipValue(); + } + int packedSize = unpacker.unpackMapHeader(); + Map unpackedMeta = new HashMap<>(); + for (int j = 0; j < packedSize; j++) { + String k = dictionary[unpacker.unpackInt()]; + String v = dictionary[unpacker.unpackInt()]; + if (!"thread.name".equals(k) && !"thread.id".equals(k)) { + unpackedMeta.put(k, v); + } + } + assertEquals(expected, unpackedMeta); + tracer.close(); + } + + @Test + void serializeTraceWithFlatMapTagV04() throws Exception { + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + DDSpanContext context = + new DDSpanContext( + DDTraceId.ONE, + 1, + DDSpanId.ZERO, + null, + "fakeService", + "fakeOperation", + "fakeResource", + PrioritySampling.UNSET, + null, + null, + false, + null, + 0, + tracer.createTraceCollector(DDTraceId.ONE), + null, + null, + NoopPathwayContext.INSTANCE, + false, + null); + context.setTag("key1", "value1"); + Map nested = new HashMap<>(); + nested.put("sub1", "v1"); + nested.put("sub2", "v2"); + context.setTag("key2", nested); + DDSpan span = DDSpan.create("test", 0, context, null); + + CaptureBuffer capture = new CaptureBuffer(); + MsgPackWriter packer = new MsgPackWriter(new FlushingBuffer(1024, capture)); + packer.format(Collections.singletonList(span), new TraceMapperV0_4()); + packer.flush(); + MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)); + int traceCount = capture.messageCount; + int spanCount = unpacker.unpackArrayHeader(); + int size = unpacker.unpackMapHeader(); + + Map expectedMeta = new HashMap<>(); + expectedMeta.put("key1", "value1"); + expectedMeta.put("key2.sub1", "v1"); + expectedMeta.put("key2.sub2", "v2"); + + assertEquals(1, traceCount); + assertEquals(1, spanCount); + for (int i = 0; i < size; i++) { + String key = unpacker.unpackString(); + if ("meta".equals(key)) { + int packedSize = unpacker.unpackMapHeader(); + Map unpackedMeta = new HashMap<>(); + for (int j = 0; j < packedSize; j++) { + String k = unpacker.unpackString(); + String v = unpacker.unpackString(); + if (!"thread.name".equals(k) && !"thread.id".equals(k)) { + unpackedMeta.put(k, v); + } + } + assertEquals(expectedMeta, unpackedMeta); + } else { + unpacker.unpackValue(); + } + } + tracer.close(); + } + + @Test + void serializeTraceWithFlatMapTagV05() throws Exception { + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + DDSpanContext context = + new DDSpanContext( + DDTraceId.ONE, + 1, + DDSpanId.ZERO, + null, + "fakeService", + "fakeOperation", + "fakeResource", + PrioritySampling.UNSET, + null, + null, + false, + null, + 0, + tracer.createTraceCollector(DDTraceId.ONE), + null, + null, + NoopPathwayContext.INSTANCE, + false, + null); + context.setTag("key1", "value1"); + Map nested = new HashMap<>(); + nested.put("sub1", "v1"); + nested.put("sub2", "v2"); + context.setTag("key2", nested); + DDSpan span = DDSpan.create("test", 0, context, null); + + CaptureBuffer capture = new CaptureBuffer(); + MsgPackWriter packer = new MsgPackWriter(new FlushingBuffer(1024, capture)); + TraceMapperV0_5 mapper = new TraceMapperV0_5(); + packer.format(Collections.singletonList(span), mapper); + packer.flush(); + MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(new ArrayBufferInput(capture.bytes)); + int traceCount = capture.messageCount; + int spanCount = unpacker.unpackArrayHeader(); + int size = unpacker.unpackArrayHeader(); + String[] dictionary = buildDictionary(mapper); + + Map expectedMeta = new HashMap<>(); + expectedMeta.put("key1", "value1"); + expectedMeta.put("key2.sub1", "v1"); + expectedMeta.put("key2.sub2", "v2"); + + assertEquals(1, traceCount); + assertEquals(1, spanCount); + assertEquals(12, size); + for (int i = 0; i < 9; ++i) { + unpacker.skipValue(); + } + int packedSize = unpacker.unpackMapHeader(); + Map unpackedMeta = new HashMap<>(); + for (int j = 0; j < packedSize; j++) { + String k = dictionary[unpacker.unpackInt()]; + String v = dictionary[unpacker.unpackInt()]; + if (!"thread.name".equals(k) && !"thread.id".equals(k)) { + unpackedMeta.put(k, v); + } + } + assertEquals(expectedMeta, unpackedMeta); + tracer.close(); + } + + private static class CaptureBuffer implements ByteBufferConsumer { + private byte[] bytes; + int messageCount; + + @Override + public void accept(int messageCount, ByteBuffer buffer) { + this.messageCount = messageCount; + this.bytes = new byte[buffer.limit() - buffer.position()]; + buffer.get(bytes); + } + } + + private DDSpanContext createContext( + String spanType, CoreTracer tracer, DDTraceId traceId, long spanId) { + Map baggage = new HashMap<>(); + baggage.put("a-baggage", "value"); + DDSpanContext ctx = + new DDSpanContext( + traceId, + spanId, + DDSpanId.ZERO, + null, + "fakeService", + "fakeOperation", + "fakeResource", + PrioritySampling.UNSET, + null, + baggage, + false, + spanType, + 1, + tracer.createTraceCollector(DDTraceId.ONE), + null, + null, + NoopPathwayContext.INSTANCE, + false, + null); + Map tags = new HashMap<>(); + tags.put("k1", "v1"); + ctx.setAllTags(tags); + return ctx; + } + + private static String[] buildDictionary(TraceMapperV0_5 mapper) throws Exception { + GrowableBuffer dictionaryBuffer = TraceMapperTestBridge.getDictionary(mapper); + Map encoding = TraceMapperTestBridge.getEncoding(mapper); + + String[] dictionary = new String[encoding.size()]; + MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(dictionaryBuffer.slice()); + for (int i = 0; i < dictionary.length; ++i) { + dictionary[i] = unpacker.unpackString(); + } + return dictionary; + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/DDSpanTest.java b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanTest.java new file mode 100644 index 00000000000..ec18c7b91e8 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanTest.java @@ -0,0 +1,501 @@ +package datadog.trace.core; + +import static datadog.trace.api.TracePropagationStyle.DATADOG; +import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_DROP; +import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_KEEP; +import static datadog.trace.api.sampling.PrioritySampling.UNSET; +import static datadog.trace.api.sampling.SamplingMechanism.SPAN_SAMPLING_RATE; +import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MAX_PER_SECOND_TAG; +import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_MECHANISM_TAG; +import static datadog.trace.core.DDSpanContext.SPAN_SAMPLING_RULE_RATE_TAG; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.params.provider.Arguments.arguments; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import datadog.trace.api.DDSpanId; +import datadog.trace.api.DDTags; +import datadog.trace.api.DDTraceId; +import datadog.trace.api.TagMap; +import datadog.trace.api.datastreams.NoopPathwayContext; +import datadog.trace.api.gateway.RequestContextSlot; +import datadog.trace.api.sampling.PrioritySampling; +import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; +import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities; +import datadog.trace.bootstrap.instrumentation.api.TagContext; +import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; +import datadog.trace.common.sampling.RateByServiceTraceSampler; +import datadog.trace.common.writer.ListWriter; +import datadog.trace.core.propagation.ExtractedContext; +import datadog.trace.core.propagation.PropagationTags; +import java.io.Closeable; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.tabletest.junit.TableTest; + +public class DDSpanTest extends DDCoreJavaSpecification { + + private ListWriter writer; + private CoreTracer tracer; + + @BeforeEach + void setup() { + writer = new ListWriter(); + tracer = tracerBuilder().writer(writer).sampler(new RateByServiceTraceSampler()).build(); + } + + @Test + void gettersAndSetters() { + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("fakeService") + .withResourceName("fakeResource") + .withSpanType("fakeType") + .start(); + + span.setServiceName("service"); + assertEquals("service", span.getServiceName()); + + span.setOperationName("operation"); + assertEquals("operation", span.getOperationName().toString()); + + span.setResourceName("resource"); + assertEquals("resource", span.getResourceName().toString()); + + span.setSpanType("type"); + assertEquals("type", span.getType()); + + span.setSamplingPriority(PrioritySampling.UNSET); + assertNull(span.getSamplingPriority()); + + span.setSamplingPriority(PrioritySampling.SAMPLER_KEEP); + assertEquals(PrioritySampling.SAMPLER_KEEP, (int) span.getSamplingPriority()); + + span.context().lockSamplingPriority(); + span.setSamplingPriority(PrioritySampling.USER_KEEP); + assertEquals(PrioritySampling.SAMPLER_KEEP, (int) span.getSamplingPriority()); + } + + @Test + void resourceNameEqualsOperationNameIfNull() { + String opName = "operationName"; + DDSpan span = (DDSpan) tracer.buildSpan("datadog", opName).start(); + assertEquals(opName, span.getResourceName().toString()); + assertFalse(span.getServiceName().isEmpty()); + + String resourceName = "fake"; + String serviceName = "myService"; + span = + (DDSpan) + tracer + .buildSpan("datadog", opName) + .withResourceName(resourceName) + .withServiceName(serviceName) + .start(); + assertEquals(resourceName, span.getResourceName().toString()); + assertEquals(serviceName, span.getServiceName()); + } + + @Test + void durationMeasuredInNanoseconds() { + long mod = TimeUnit.MILLISECONDS.toNanos(1); + long start = System.nanoTime(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "test").start(); + long between = System.nanoTime(); + long betweenDur = System.nanoTime() - between; + span.finish(); + long total = System.nanoTime() - start; + + // Generous 5 seconds to execute this test + assertTrue( + Math.abs( + TimeUnit.NANOSECONDS.toSeconds(span.getStartTime()) + - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) + < 5); + assertTrue(span.getDurationNano() > betweenDur); + assertTrue(span.getDurationNano() < total); + assertTrue(span.getDurationNano() % mod > 0); + } + + @Test + void phasedFinishCapturesDurationButDoesNotPublishImmediately() throws Exception { + long mod = TimeUnit.MILLISECONDS.toNanos(1); + long start = System.nanoTime(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "test").start(); + long between = System.nanoTime(); + long betweenDur = System.nanoTime() - between; + // calling publish before phasedFinish + span.publish(); + // has no effect + assertEquals(0, span.getDurationNano()); + assertEquals(1, pendingReferenceCount(span)); + assertEquals(0, writer.size()); + + boolean finish = span.phasedFinish(); + long total = System.nanoTime() - start; + + assertTrue(finish); + assertEquals(1, pendingReferenceCount(span)); + assertTrue(spans(span).isEmpty()); + assertTrue(writer.isEmpty()); + // duration is recorded as negative to allow publishing + assertTrue(span.getDurationNano() < 0); + long actualDurationNano = span.getDurationNano() & Long.MAX_VALUE; + // Generous 5 seconds to execute this test + assertTrue( + Math.abs( + TimeUnit.NANOSECONDS.toSeconds(span.getStartTime()) + - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) + < 5); + assertTrue(actualDurationNano > betweenDur); + assertTrue(actualDurationNano < total); + assertTrue(actualDurationNano % mod > 0); // Very slim chance of a false negative. + // extra finishes + finish = span.phasedFinish(); + // have no effect + span.finish(); // verify conflicting finishes are ignored + assertFalse(finish); + assertEquals(1, pendingReferenceCount(span)); + assertTrue(spans(span).isEmpty()); + assertTrue(writer.isEmpty()); + + span.publish(); + // duration is flipped to positive + assertTrue(span.getDurationNano() > 0); + assertEquals(actualDurationNano, span.getDurationNano()); + assertEquals(0, pendingReferenceCount(span)); + assertEquals(1, writer.size()); + // duplicate call to publish" + span.publish(); + // has no effect + assertEquals(0, pendingReferenceCount(span)); + assertEquals(1, writer.size()); + } + + @Test + void startingWithTimestampDisablesNanotime() { + long mod = TimeUnit.MILLISECONDS.toNanos(1); + long start = System.currentTimeMillis(); + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "test") + .withStartTimestamp(TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis())) + .start(); + long between = System.currentTimeMillis(); + long betweenDur = System.currentTimeMillis() - between; + span.finish(); + long total = Math.max(1, System.currentTimeMillis() - start); + + // Generous 5 seconds to execute this test + assertTrue( + Math.abs( + TimeUnit.NANOSECONDS.toSeconds(span.getStartTime()) + - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) + < 5); + assertTrue(span.getDurationNano() >= TimeUnit.MILLISECONDS.toNanos(betweenDur)); + assertTrue(span.getDurationNano() <= TimeUnit.MILLISECONDS.toNanos(total)); + assertTrue(span.getDurationNano() % mod == 0 || span.getDurationNano() == 1); + } + + @Test + void stoppingWithTimestampDisablesNanotime() { + long mod = TimeUnit.MILLISECONDS.toNanos(1); + long start = System.currentTimeMillis(); + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "test").start(); + long between = System.currentTimeMillis(); + long betweenDur = System.currentTimeMillis() - between; + span.finish(TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis() + 1)); + long total = System.currentTimeMillis() - start + 1; + + // Generous 5 seconds to execute this test + assertTrue( + Math.abs( + TimeUnit.NANOSECONDS.toSeconds(span.getStartTime()) + - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) + < 5); + assertTrue(span.getDurationNano() >= TimeUnit.MILLISECONDS.toNanos(betweenDur)); + assertTrue(span.getDurationNano() <= TimeUnit.MILLISECONDS.toNanos(total)); + // true span duration can be <1ms if clock was about to tick over, so allow for that + assertTrue(span.getDurationNano() % mod == 0 || span.getDurationNano() == 1); + } + + @Test + void stoppingWithTimestampBeforeStartTimeYieldsMinDurationOfOne() { + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "test").start(); + // remove tick precision part of our internal time to match previous test condition + span.finish( + TimeUnit.MILLISECONDS.toMicros(TimeUnit.NANOSECONDS.toMillis(span.getStartTimeNano())) + - 10); + assertEquals(1, span.getDurationNano()); + } + + @Test + void prioritySamplingMetricSetOnlyOnRootSpan() { + DDSpan parent = (DDSpan) tracer.buildSpan("datadog", "testParent").start(); + DDSpan child1 = + (DDSpan) tracer.buildSpan("datadog", "testChild1").asChildOf(parent.context()).start(); + + child1.setSamplingPriority(PrioritySampling.SAMPLER_KEEP); + child1.context().lockSamplingPriority(); + parent.setSamplingPriority(PrioritySampling.SAMPLER_DROP); + child1.finish(); + DDSpan child2 = + (DDSpan) tracer.buildSpan("datadog", "testChild2").asChildOf(parent.context()).start(); + child2.finish(); + parent.finish(); + + assertEquals(PrioritySampling.SAMPLER_KEEP, parent.context().getSamplingPriority()); + assertEquals(PrioritySampling.SAMPLER_KEEP, (int) parent.getSamplingPriority()); + assertTrue(parent.hasSamplingPriority()); + assertEquals(parent.getSamplingPriority(), child1.getSamplingPriority()); + assertEquals(parent.getSamplingPriority(), child2.getSamplingPriority()); + assertFalse(child1.hasSamplingPriority()); + assertFalse(child2.hasSamplingPriority()); + } + + static Stream originSetOnlyOnRootSpanArguments() { + return Stream.of( + arguments("TagContext", new TagContext("some-origin", TagMap.fromMap(new HashMap<>()))), + arguments( + "ExtractedContext", + new ExtractedContext( + DDTraceId.ONE, + 2, + SAMPLER_DROP, + "some-origin", + PropagationTags.factory().empty(), + DATADOG))); + } + + @ParameterizedTest + @MethodSource("originSetOnlyOnRootSpanArguments") + void originSetOnlyOnRootSpan(String scenario, AgentSpanContext extractedContext) + throws Exception { + DDSpanContext parent = + (DDSpanContext) + tracer.buildSpan("datadog", "testParent").asChildOf(extractedContext).start().context(); + DDSpanContext child = + (DDSpanContext) + tracer.buildSpan("datadog", "testChild1").asChildOf(parent).start().context(); + + assertEquals("some-origin", parent.getOrigin().toString()); + // Access field directly instead of getter. + Field originField = DDSpanContext.class.getDeclaredField("origin"); + originField.setAccessible(true); + assertEquals("some-origin", originField.get(parent).toString()); + assertEquals("some-origin", child.getOrigin().toString()); + // Access field directly instead of getter. + assertNull(originField.get(child)); + } + + static Stream isRootSpanArguments() { + return Stream.of( + arguments("no parent", null, true), + arguments( + "distributed parent", + new ExtractedContext( + DDTraceId.from(123), + 456, + SAMPLER_KEEP, + "789", + PropagationTags.factory().empty(), + DATADOG), + false)); + } + + @ParameterizedTest + @MethodSource("isRootSpanArguments") + void isRootSpanInAndNotInContextOfDistributedTracing( + String scenario, AgentSpanContext extractedContext, boolean isTraceRootSpan) { + DDSpan root = (DDSpan) tracer.buildSpan("datadog", "root").asChildOf(extractedContext).start(); + DDSpan child = (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(root.context()).start(); + + assertEquals(isTraceRootSpan, root.isRootSpan()); + assertFalse(child.isRootSpan()); + + child.finish(); + root.finish(); + } + + static Stream getApplicationRootSpanArguments() { + return Stream.of( + arguments("no parent", null), + arguments( + "distributed parent", + new ExtractedContext( + DDTraceId.from(123), + 456, + SAMPLER_KEEP, + "789", + PropagationTags.factory().empty(), + DATADOG))); + } + + @ParameterizedTest + @MethodSource("getApplicationRootSpanArguments") + void getApplicationRootSpanInAndNotInContextOfDistributedTracing( + String scenario, AgentSpanContext extractedContext) { + DDSpan root = (DDSpan) tracer.buildSpan("datadog", "root").asChildOf(extractedContext).start(); + DDSpan child = (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(root.context()).start(); + + assertEquals(root, root.getLocalRootSpan()); + assertEquals(root, child.getLocalRootSpan()); + // Checking for backward compatibility method names + assertEquals(root, root.getRootSpan()); + assertEquals(root, child.getRootSpan()); + + child.finish(); + root.finish(); + } + + @Test + void publishingOfRootSpanClosesRequestContextData() throws Exception { + Closeable reqContextData = mock(Closeable.class); + TagContext context = new TagContext().withRequestContextDataAppSec(reqContextData); + DDSpan root = (DDSpan) tracer.buildSpan("datadog", "root").asChildOf(context).start(); + DDSpan child = (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(root.context()).start(); + + assertEquals(reqContextData, root.getRequestContext().getData(RequestContextSlot.APPSEC)); + assertEquals(reqContextData, child.getRequestContext().getData(RequestContextSlot.APPSEC)); + + child.finish(); + verify(reqContextData, never()).close(); + + root.finish(); + verify(reqContextData, times(1)).close(); + } + + static Stream inferTopLevelFromParentServiceNameArguments() { + return Stream.of( + arguments("String foo", "foo", true), + arguments("UTF8BytesString foo", UTF8BytesString.create("foo"), true), + arguments("String fakeService", "fakeService", false), + arguments("UTF8BytesString fakeService", UTF8BytesString.create("fakeService"), false), + arguments("empty string", "", true), + arguments("null", null, true)); + } + + @ParameterizedTest + @MethodSource("inferTopLevelFromParentServiceNameArguments") + void inferTopLevelFromParentServiceName( + String scenario, CharSequence parentServiceName, boolean expectTopLevel) { + DDSpanContext context = + new DDSpanContext( + DDTraceId.ONE, + 1, + DDSpanId.ZERO, + parentServiceName, + "fakeService", + "fakeOperation", + "fakeResource", + PrioritySampling.UNSET, + null, + Collections.emptyMap(), + false, + "fakeType", + 0, + tracer.createTraceCollector(DDTraceId.ONE), + null, + null, + NoopPathwayContext.INSTANCE, + false, + PropagationTags.factory().empty()); + assertEquals(expectTopLevel, context.isTopLevel()); + } + + @Test + void brokenPipeExceptionDoesNotCreateErrorSpan() { + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "root").start(); + span.addThrowable(new IOException("Broken pipe")); + assertFalse(span.isError()); + assertNull(span.getTag(DDTags.ERROR_STACK)); + assertEquals("Broken pipe", span.getTag(DDTags.ERROR_MSG)); + } + + @Test + void wrappedBrokenPipeExceptionDoesNotCreateErrorSpan() { + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "root").start(); + span.addThrowable(new RuntimeException(new IOException("Broken pipe"))); + assertFalse(span.isError()); + assertNull(span.getTag(DDTags.ERROR_STACK)); + assertEquals("java.io.IOException: Broken pipe", span.getTag(DDTags.ERROR_MSG)); + } + + @Test + void nullExceptionSafeToAdd() { + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "root").start(); + span.addThrowable(null); + assertFalse(span.isError()); + assertNull(span.getTag(DDTags.ERROR_STACK)); + } + + @TableTest({ + "scenario | rate | limit ", + "rate=1.0 lim=10 | 1.0 | 10 ", + "rate=0.5 lim=100 | 0.5 | 100 ", + "rate=0.25 no lim | 0.25 | 2147483647" + }) + void setSingleSpanSamplingTags(String scenario, double rate, int limit) { + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "testSpan").start(); + assertEquals(UNSET, span.samplingPriority()); + + span.setSpanSamplingPriority(rate, limit); + + assertEquals((int) SPAN_SAMPLING_RATE, span.getTag(SPAN_SAMPLING_MECHANISM_TAG)); + assertEquals(rate, span.getTag(SPAN_SAMPLING_RULE_RATE_TAG)); + assertEquals( + limit == Integer.MAX_VALUE ? null : (double) limit, + span.getTag(SPAN_SAMPLING_MAX_PER_SECOND_TAG)); + // single span sampling should not change the trace sampling priority + assertEquals(UNSET, span.samplingPriority()); + } + + @Test + void errorPrioritiesShouldBeRespected() { + DDSpan span = (DDSpan) tracer.buildSpan("datadog", "testSpan").start(); + assertFalse(span.isError()); + + span.setError(true); + assertTrue(span.isError()); + + span.setError(false); + assertFalse(span.isError()); + + span.setError(true, ErrorPriorities.HTTP_SERVER_DECORATOR); + assertFalse(span.isError()); + + span.setError(true, ErrorPriorities.MANUAL_INSTRUMENTATION); + assertTrue(span.isError()); + + span.setError(true, Byte.MAX_VALUE); + assertTrue(span.isError()); + } + + private static int pendingReferenceCount(DDSpan span) { + PendingTrace trace = (PendingTrace) span.context().getTraceCollector(); + return PendingTraceTestBridge.getPendingReferenceCount(trace); + } + + private static Collection spans(DDSpan span) { + PendingTrace trace = (PendingTrace) span.context().getTraceCollector(); + return trace.getSpans(); + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/KnuthSamplingRateTest.java b/dd-trace-core/src/test/java/datadog/trace/core/KnuthSamplingRateTest.java new file mode 100644 index 00000000000..8ec4aefc178 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/KnuthSamplingRateTest.java @@ -0,0 +1,230 @@ +package datadog.trace.core; + +import static datadog.trace.api.config.TracerConfig.TRACE_RATE_LIMIT; +import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLE_RATE; +import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLING_RULES; +import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLING_SERVICE_RULES; +import static datadog.trace.api.sampling.PrioritySampling.SAMPLER_KEEP; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import datadog.trace.common.sampling.PrioritySampler; +import datadog.trace.common.sampling.RateByServiceTraceSampler; +import datadog.trace.common.sampling.Sampler; +import datadog.trace.common.writer.ListWriter; +import datadog.trace.core.propagation.PropagationTags; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import org.junit.jupiter.api.Test; +import org.tabletest.junit.TableTest; + +public class KnuthSamplingRateTest extends DDCoreJavaSpecification { + + @TableTest({ + "scenario | rate | expected", + "1.0 | 1.0 | 1 ", + "0.5 | 0.5 | 0.5 ", + "0.1 | 0.1 | 0.1 ", + "0.0 | 0.0 | 0 ", + "0.765432 | 0.765432 | 0.765432", + "0.7654321 rounds to 6 decimal | 0.7654321 | 0.765432", + "0.123456 | 0.123456 | 0.123456", + "0.100000 trailing zeros | 0.100000 | 0.1 ", + "0.250 trailing zero | 0.250 | 0.25 ", + "0.05 | 0.05 | 0.05 ", + "0.0123456789 rounds at 6 decimal places | 0.0123456789 | 0.012346", + "0.001 | 0.001 | 0.001 ", + "0.00500 trailing zeros | 0.00500 | 0.005 ", + "0.00123456789 rounds at 6 decimal places | 0.00123456789 | 0.001235", + "0.0001 | 0.0001 | 0.0001 ", + "0.000500 trailing zeros | 0.000500 | 0.0005 ", + "0.000123456789 rounds at 6 decimal places | 0.000123456789 | 0.000123", + "0.9999995 rounds up to 1 | 0.9999995 | 1 ", + "0.00001 | 0.00001 | 0.00001 ", + "0.000050 trailing zeros | 0.000050 | 0.00005 ", + "1.23456789e-5 rounds at 6dp | 0.0000123456789 | 0.000012", + "1e-7 below precision rounds to 0 | 0.0000001 | 0 ", + "5.5e-10 below precision | 0.00000000055 | 0 ", + "0.000001 six decimal boundary | 0.000001 | 0.000001", + "0.00000051 rounds up | 0.00000051 | 0.000001" + }) + void updateKnuthSamplingRateFormatsRateCorrectly(String scenario, double rate, String expected) { + PropagationTags pTags = PropagationTags.factory().empty(); + pTags.updateKnuthSamplingRate(rate); + Map tagMap = pTags.createTagMap(); + assertEquals(expected, tagMap.get("_dd.p.ksr")); + } + + @TableTest({ + "scenario | rate | expectedKsr", + "rate 1.0 | 1.0 | 1 ", + "rate 0.5 | 0.5 | 0.5 ", + "rate 0.0 | 0.0 | 0 " + }) + void agentRateSamplerSetsKsrPropagatedTag(String scenario, double rate, String expectedKsr) { + RateByServiceTraceSampler serviceSampler = new RateByServiceTraceSampler(); + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + + Map rates = new HashMap<>(); + rates.put("service:,env:", rate); + Map> response = new HashMap<>(); + response.put("rate_by_service", rates); + serviceSampler.onResponse("traces", response); + + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("spock") + .withTag("env", "test") + .ignoreActiveSpan() + .start(); + serviceSampler.setSamplingPriority(span); + + Map propagationMap = span.context().getPropagationTags().createTagMap(); + String ksr = propagationMap.get("_dd.p.ksr"); + + assertEquals(expectedKsr, ksr); + tracer.close(); + } + + @TableTest({ + "scenario | jsonRules | expectedKsr", + "Matching rule with rate 1 -> ksr is 1 | '[{\"service\": \"service\", \"sample_rate\": 1}]' | 1 ", + "Matching rule with rate 0.5 -> ksr is 0.5 | '[{\"service\": \"service\", \"sample_rate\": 0.5}]' | 0.5 ", + "Matching rule with rate 0 -> ksr is 0 (drop, but ksr still set) | '[{\"service\": \"service\", \"sample_rate\": 0}]' | 0 " + }) + void ruleBasedSamplerSetsKsrPropagatedTagWhenRuleMatches( + String scenario, String jsonRules, String expectedKsr) { + Properties properties = new Properties(); + properties.setProperty(TRACE_SAMPLING_RULES, jsonRules); + properties.setProperty(TRACE_RATE_LIMIT, "50"); + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + + Sampler sampler = Sampler.Builder.forConfig(properties); + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "operation") + .withServiceName("service") + .withTag("env", "bar") + .ignoreActiveSpan() + .start(); + ((PrioritySampler) sampler).setSamplingPriority(span); + + Map propagationMap = span.context().getPropagationTags().createTagMap(); + String ksr = propagationMap.get("_dd.p.ksr"); + + assertEquals(expectedKsr, ksr); + tracer.close(); + } + + @Test + void ruleBasedSamplerFallbackToAgentSamplerSetsKsr() { + Properties properties = new Properties(); + // Rule that does NOT match "service" + properties.setProperty( + TRACE_SAMPLING_RULES, "[{\"service\": \"nomatch\", \"sample_rate\": 0.5}]"); + properties.setProperty(TRACE_RATE_LIMIT, "50"); + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + + Sampler sampler = Sampler.Builder.forConfig(properties); + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "operation") + .withServiceName("service") + .withTag("env", "bar") + .ignoreActiveSpan() + .start(); + ((PrioritySampler) sampler).setSamplingPriority(span); + + Map propagationMap = span.context().getPropagationTags().createTagMap(); + String ksr = propagationMap.get("_dd.p.ksr"); + // When falling back to agent sampler, ksr should still be set (agent rate = 1.0 by default) + assertEquals("1", ksr); + assertEquals(SAMPLER_KEEP, (int) span.getSamplingPriority()); + tracer.close(); + } + + @Test + void serviceRuleSamplerSetsKsrPropagatedTag() { + Properties properties = new Properties(); + properties.setProperty(TRACE_SAMPLING_SERVICE_RULES, "service:0.75"); + properties.setProperty(TRACE_RATE_LIMIT, "50"); + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + + Sampler sampler = Sampler.Builder.forConfig(properties); + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "operation") + .withServiceName("service") + .withTag("env", "bar") + .ignoreActiveSpan() + .start(); + ((PrioritySampler) sampler).setSamplingPriority(span); + + Map propagationMap = span.context().getPropagationTags().createTagMap(); + String ksr = propagationMap.get("_dd.p.ksr"); + + assertEquals("0.75", ksr); + tracer.close(); + } + + @Test + void defaultRateSamplerSetsKsrPropagatedTag() { + Properties properties = new Properties(); + properties.setProperty(TRACE_SAMPLE_RATE, "0.25"); + properties.setProperty(TRACE_RATE_LIMIT, "50"); + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + + Sampler sampler = Sampler.Builder.forConfig(properties); + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "operation") + .withServiceName("service") + .withTag("env", "bar") + .ignoreActiveSpan() + .start(); + ((PrioritySampler) sampler).setSamplingPriority(span); + + Map propagationMap = span.context().getPropagationTags().createTagMap(); + String ksr = propagationMap.get("_dd.p.ksr"); + + assertEquals("0.25", ksr); + tracer.close(); + } + + @Test + void ksrIsPropagatedViaXDatadogTagsHeader() { + RateByServiceTraceSampler serviceSampler = new RateByServiceTraceSampler(); + CoreTracer tracer = tracerBuilder().writer(new ListWriter()).build(); + + Map rates = new HashMap<>(); + rates.put("service:,env:", 0.5); + Map> response = new HashMap<>(); + response.put("rate_by_service", rates); + serviceSampler.onResponse("traces", response); + + DDSpan span = + (DDSpan) + tracer + .buildSpan("datadog", "fakeOperation") + .withServiceName("spock") + .withTag("env", "test") + .ignoreActiveSpan() + .start(); + serviceSampler.setSamplingPriority(span); + + String headerValue = + span.context().getPropagationTags().headerValue(PropagationTags.HeaderType.DATADOG); + + assertNotNull(headerValue); + assertTrue(headerValue.contains("_dd.p.ksr=0.5")); + tracer.close(); + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBridge.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBridge.java new file mode 100644 index 00000000000..0d4fc04a9ac --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBridge.java @@ -0,0 +1,10 @@ +package datadog.trace.core; + +/** + * Bridge class to allow tests to access package-private method exposed by the {@code PendingTrace} + */ +public class PendingTraceTestBridge { + public static int getPendingReferenceCount(PendingTrace pendingTrace) { + return pendingTrace.getPendingReferenceCount(); + } +} diff --git a/utils/junit-utils/src/main/java/datadog/trace/junit/utils/tabletest/TableTestTypeConverters.java b/utils/junit-utils/src/main/java/datadog/trace/junit/utils/tabletest/TableTestTypeConverters.java index 1341f109cbb..8f2b2986efd 100644 --- a/utils/junit-utils/src/main/java/datadog/trace/junit/utils/tabletest/TableTestTypeConverters.java +++ b/utils/junit-utils/src/main/java/datadog/trace/junit/utils/tabletest/TableTestTypeConverters.java @@ -22,4 +22,53 @@ public static long toLong(String value) { return Long.decode(token); } } + + @TypeConverter + public static int toInt(String value) { + if (value == null) { + throw new IllegalArgumentException("Value cannot be null"); + } + String token = value.trim(); + switch (token) { + case "Integer.MAX_VALUE": + return Integer.MAX_VALUE; + case "Integer.MIN_VALUE": + return Integer.MIN_VALUE; + default: + return Integer.decode(token); + } + } + + @TypeConverter + public static Number toNumber(String value) { + if (value == null) { + throw new IllegalArgumentException("Value cannot be null"); + } + switch (value) { + case "Integer.MAX_VALUE": + return Integer.MAX_VALUE; + case "Integer.MIN_VALUE": + return Integer.MIN_VALUE; + case "Short.MAX_VALUE": + return Short.MAX_VALUE; + case "Short.MIN_VALUE": + return Short.MIN_VALUE; + case "Float.MAX_VALUE": + return Float.MAX_VALUE; + case "Float.MIN_VALUE": + return Float.MIN_VALUE; + case "Double.MAX_VALUE": + return Double.MAX_VALUE; + case "Double.MIN_VALUE": + return Double.MIN_VALUE; + default: + if (value.endsWith("f")) { + return Float.parseFloat(value); + } + if (value.endsWith("d")) { + return Double.parseDouble(value); + } + return Integer.decode(value); + } + } } From 19fa98a248d27a2557b7406f418936062606ed6d Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Tue, 12 May 2026 21:15:48 +0100 Subject: [PATCH 015/478] Fix the behaviour of asynchronous counters and up-down counters. (#11332) Fix the behaviour of asynchronous counters and up-down counters. Unlike synchronous counters which take the increment/delta value, asynchronous callbacks report the absolute value of the counter. Co-authored-by: devflow.devflow-routing-intake --- .../otel/metrics/OtelInstrumentType.java | 24 ++- .../otel/metrics/data/OtelDoubleDelta.java | 25 +++ .../otel/metrics/data/OtelDoubleSum.java | 1 + .../otel/metrics/data/OtelDoubleValue.java | 1 + .../metrics/data/OtelHistogramSketch.java | 1 + .../otel/metrics/data/OtelLongDelta.java | 25 +++ .../otel/metrics/data/OtelLongSum.java | 1 + .../otel/metrics/data/OtelLongValue.java | 1 + .../otel/metrics/data/OtelMetricStorage.java | 68 +++---- .../shim/metrics/OtelDoubleCounter.java | 2 +- .../shim/metrics/OtelDoubleUpDownCounter.java | 2 +- .../shim/metrics/OtelLongCounter.java | 2 +- .../shim/metrics/OtelLongUpDownCounter.java | 2 +- ...nTelemetryMetricsCumulativeForkedTest.java | 147 ++++++++++++++++ .../metrics/OpenTelemetryMetricsTest.java | 166 ++++++++++++++++-- 15 files changed, 408 insertions(+), 60 deletions(-) create mode 100644 dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleDelta.java create mode 100644 dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongDelta.java create mode 100644 dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsCumulativeForkedTest.java diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/OtelInstrumentType.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/OtelInstrumentType.java index 9a072c95e57..d8b7ea9ac22 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/OtelInstrumentType.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/OtelInstrumentType.java @@ -2,11 +2,21 @@ public enum OtelInstrumentType { // same order as io.opentelemetry.sdk.metrics.InstrumentType - COUNTER, - UP_DOWN_COUNTER, - HISTOGRAM, - OBSERVABLE_COUNTER, - OBSERVABLE_UP_DOWN_COUNTER, - OBSERVABLE_GAUGE, - GAUGE, + COUNTER(false), + UP_DOWN_COUNTER(false), + HISTOGRAM(false), + OBSERVABLE_COUNTER(true), + OBSERVABLE_UP_DOWN_COUNTER(true), + OBSERVABLE_GAUGE(true), + GAUGE(false); + + private final boolean observable; + + OtelInstrumentType(boolean observable) { + this.observable = observable; + } + + public boolean isObservable() { + return observable; + } } diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleDelta.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleDelta.java new file mode 100644 index 00000000000..9544fe44f04 --- /dev/null +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleDelta.java @@ -0,0 +1,25 @@ +package datadog.trace.bootstrap.otel.metrics.data; + +import datadog.trace.bootstrap.otlp.metrics.OtlpDataPoint; +import datadog.trace.bootstrap.otlp.metrics.OtlpDoublePoint; + +/** Reports the delta value since the last reset. */ +final class OtelDoubleDelta extends OtelAggregator { + private volatile double value; + private double lastValue; + + @Override + void doRecordDouble(double value) { + this.value = value; + } + + @Override + OtlpDataPoint doCollect(boolean reset) { + double collectedValue = value; + double delta = collectedValue - lastValue; + if (reset) { + lastValue = collectedValue; + } + return new OtlpDoublePoint(delta); + } +} diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleSum.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleSum.java index 602cdad0a87..7e5bd48bc6a 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleSum.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleSum.java @@ -4,6 +4,7 @@ import datadog.trace.bootstrap.otlp.metrics.OtlpDoublePoint; import java.util.concurrent.atomic.DoubleAdder; +/** Reports the sum of values since the last reset. */ final class OtelDoubleSum extends OtelAggregator { private final DoubleAdder total = new DoubleAdder(); diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleValue.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleValue.java index 509516b62db..6e1269e73a5 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleValue.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelDoubleValue.java @@ -3,6 +3,7 @@ import datadog.trace.bootstrap.otlp.metrics.OtlpDataPoint; import datadog.trace.bootstrap.otlp.metrics.OtlpDoublePoint; +/** Always reports the latest value. */ final class OtelDoubleValue extends OtelAggregator { private volatile double value; diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelHistogramSketch.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelHistogramSketch.java index b322d3f75e5..35092bc55a0 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelHistogramSketch.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelHistogramSketch.java @@ -6,6 +6,7 @@ import datadog.trace.bootstrap.otlp.metrics.OtlpHistogramPoint; import java.util.List; +/** Reports the histogram of values since the last reset. */ final class OtelHistogramSketch extends OtelAggregator { private final HistogramWithSum histogram; diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongDelta.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongDelta.java new file mode 100644 index 00000000000..a644ee6085d --- /dev/null +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongDelta.java @@ -0,0 +1,25 @@ +package datadog.trace.bootstrap.otel.metrics.data; + +import datadog.trace.bootstrap.otlp.metrics.OtlpDataPoint; +import datadog.trace.bootstrap.otlp.metrics.OtlpLongPoint; + +/** Reports the delta value since the last reset. */ +final class OtelLongDelta extends OtelAggregator { + private volatile long value; + private long lastValue; + + @Override + void doRecordLong(long value) { + this.value = value; + } + + @Override + OtlpDataPoint doCollect(boolean reset) { + long collectedValue = value; + long delta = collectedValue - lastValue; + if (reset) { + lastValue = collectedValue; + } + return new OtlpLongPoint(delta); + } +} diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongSum.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongSum.java index d4693954ba4..773e107a613 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongSum.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongSum.java @@ -4,6 +4,7 @@ import datadog.trace.bootstrap.otlp.metrics.OtlpLongPoint; import java.util.concurrent.atomic.LongAdder; +/** Reports the sum of values since the last reset. */ final class OtelLongSum extends OtelAggregator { private final LongAdder total = new LongAdder(); diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongValue.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongValue.java index 790ce640364..5f6967fca84 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongValue.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelLongValue.java @@ -3,6 +3,7 @@ import datadog.trace.bootstrap.otlp.metrics.OtlpDataPoint; import datadog.trace.bootstrap.otlp.metrics.OtlpLongPoint; +/** Always reports the latest value. */ final class OtelLongValue extends OtelAggregator { private volatile long value; diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricStorage.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricStorage.java index 8863b21bd1b..15e953016bf 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricStorage.java +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelMetricStorage.java @@ -11,6 +11,7 @@ import datadog.trace.bootstrap.otel.metrics.OtelInstrumentDescriptor; import datadog.trace.bootstrap.otel.metrics.OtelInstrumentType; import datadog.trace.bootstrap.otlp.common.OtlpAttributeVisitor; +import datadog.trace.bootstrap.otlp.metrics.OtlpDataPoint; import datadog.trace.bootstrap.otlp.metrics.OtlpMetricVisitor; import io.opentelemetry.api.common.Attributes; import java.util.Collections; @@ -46,6 +47,7 @@ public final class OtelMetricStorage { private final OtelInstrumentDescriptor descriptor; private final boolean resetOnCollect; + private final boolean toggleRecordings; private final Function aggregatorSupplier; private volatile Recording currentRecording; @@ -56,9 +58,12 @@ private OtelMetricStorage( OtelInstrumentDescriptor descriptor, Supplier aggregatorSupplier) { this.descriptor = descriptor; this.resetOnCollect = shouldResetOnCollect(descriptor.getType()); + // no need to toggle if not resetting on collect, or if it's an observable instrument + // (observables are always invoked within the collect cycle, so no concurrent writers) + this.toggleRecordings = resetOnCollect && !descriptor.getType().isObservable(); this.aggregatorSupplier = unused -> aggregatorSupplier.get(); this.currentRecording = new Recording(); - if (resetOnCollect) { + if (toggleRecordings) { this.previousRecording = new Recording(); } } @@ -86,6 +91,10 @@ public static OtelMetricStorage newDoubleValueStorage(OtelInstrumentDescriptor d return new OtelMetricStorage(descriptor, OtelDoubleValue::new); } + public static OtelMetricStorage newDoubleDeltaStorage(OtelInstrumentDescriptor descriptor) { + return new OtelMetricStorage(descriptor, OtelDoubleDelta::new); + } + public static OtelMetricStorage newLongSumStorage(OtelInstrumentDescriptor descriptor) { return new OtelMetricStorage(descriptor, OtelLongSum::new); } @@ -94,6 +103,10 @@ public static OtelMetricStorage newLongValueStorage(OtelInstrumentDescriptor des return new OtelMetricStorage(descriptor, OtelLongValue::new); } + public static OtelMetricStorage newLongDeltaStorage(OtelInstrumentDescriptor descriptor) { + return new OtelMetricStorage(descriptor, OtelLongDelta::new); + } + public static OtelMetricStorage newHistogramStorage( OtelInstrumentDescriptor descriptor, List bucketBoundaries) { return new OtelMetricStorage(descriptor, () -> new OtelHistogramSketch(bucketBoundaries)); @@ -108,7 +121,7 @@ public OtelInstrumentDescriptor getDescriptor() { } public void recordLong(long value, Object attributes) { - if (resetOnCollect) { + if (toggleRecordings) { Recording recording = acquireRecordingForWrite(); try { aggregator(recording.aggregators, attributes).recordLong(value); @@ -129,7 +142,7 @@ public void recordDouble(double value, Object attributes) { attributes); return; } - if (resetOnCollect) { + if (toggleRecordings) { Recording recording = acquireRecordingForWrite(); try { aggregator(recording.aggregators, attributes).recordDouble(value); @@ -173,26 +186,8 @@ public static void registerAttributeReader( /** Collect data for CUMULATIVE temporality, keeping aggregators for future writes. */ private void doCollect(OtlpMetricVisitor visitor) { - BiConsumer attributesReader = null; - ClassLoader attributesClassLoader = null; - // no need to hold writers back if we are not resetting metrics on collect - for (Map.Entry entry : currentRecording.aggregators.entrySet()) { - OtelAggregator aggregator = entry.getValue(); - if (!aggregator.isEmpty()) { - Object attributes = entry.getKey(); - ClassLoader cl = attributes.getClass().getClassLoader(); - // avoid repeated lookups when attribute class-loader is same for all records - if (attributesReader == null || cl != attributesClassLoader) { - attributesReader = ATTRIBUTE_READERS.get(cl); - attributesClassLoader = cl; - } - if (attributesReader != null) { - attributesReader.accept(attributes, visitor); - } - visitor.visitDataPoint(aggregator.collect()); - } - } + collectDataPoints(currentRecording.aggregators, visitor, OtelAggregator::collect); } /** @@ -205,13 +200,15 @@ private void doCollectAndReset(OtlpMetricVisitor visitor) { // capture _current_ recording for collection, its aggregators will be reset at the end final Recording recording = currentRecording; - // publish fresh recording for new writers, using aggregators from _previous_ recording - currentRecording = new Recording(previousRecording); + if (toggleRecordings) { + // publish fresh recording for new writers, using aggregators from _previous_ recording + currentRecording = new Recording(previousRecording); - // notify writers that the captured recording is about to be reset - ACTIVITY.addAndGet(recording, RESET_PENDING); - while (recording.activity > 1) { - Thread.yield(); // other threads are still writing to this recording + // notify writers that the captured recording is about to be reset + ACTIVITY.addAndGet(recording, RESET_PENDING); + while (recording.activity > 1) { + Thread.yield(); // other threads are still writing to this recording + } } Map aggregators = recording.aggregators; @@ -221,6 +218,17 @@ private void doCollectAndReset(OtlpMetricVisitor visitor) { aggregators.values().removeIf(OtelAggregator::isEmpty); } + collectDataPoints(aggregators, visitor, OtelAggregator::collectAndReset); + + if (toggleRecordings) { + previousRecording = recording; + } + } + + private void collectDataPoints( + Map aggregators, + OtlpMetricVisitor visitor, + Function collect) { BiConsumer attributesReader = null; ClassLoader attributesClassLoader = null; @@ -237,11 +245,9 @@ private void doCollectAndReset(OtlpMetricVisitor visitor) { if (attributesReader != null) { attributesReader.accept(attributes, visitor); } - visitor.visitDataPoint(aggregator.collectAndReset()); + visitor.visitDataPoint(collect.apply(aggregator)); } } - - previousRecording = recording; } private Recording acquireRecordingForWrite() { diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleCounter.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleCounter.java index d2ab4dedbc2..1395dbbe8ad 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleCounter.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleCounter.java @@ -79,7 +79,7 @@ public DoubleCounter build() { @Override public ObservableDoubleMeasurement buildObserver() { - return meter.registerObservableStorage(builder, OtelMetricStorage::newDoubleSumStorage); + return meter.registerObservableStorage(builder, OtelMetricStorage::newDoubleDeltaStorage); } @Override diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleUpDownCounter.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleUpDownCounter.java index 4a25c3f095a..f66a09d2d69 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleUpDownCounter.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelDoubleUpDownCounter.java @@ -65,7 +65,7 @@ public DoubleUpDownCounter build() { @Override public ObservableDoubleMeasurement buildObserver() { - return meter.registerObservableStorage(builder, OtelMetricStorage::newDoubleSumStorage); + return meter.registerObservableStorage(builder, OtelMetricStorage::newDoubleDeltaStorage); } @Override diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongCounter.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongCounter.java index 949c10733c4..76507eed9d8 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongCounter.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongCounter.java @@ -85,7 +85,7 @@ public LongCounter build() { @Override public ObservableLongMeasurement buildObserver() { - return meter.registerObservableStorage(builder, OtelMetricStorage::newLongSumStorage); + return meter.registerObservableStorage(builder, OtelMetricStorage::newLongDeltaStorage); } @Override diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongUpDownCounter.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongUpDownCounter.java index 209b9e7265d..2bd9833a6bd 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongUpDownCounter.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/metrics/OtelLongUpDownCounter.java @@ -71,7 +71,7 @@ public LongUpDownCounter build() { @Override public ObservableLongMeasurement buildObserver() { - return meter.registerObservableStorage(builder, OtelMetricStorage::newLongSumStorage); + return meter.registerObservableStorage(builder, OtelMetricStorage::newLongDeltaStorage); } @Override diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsCumulativeForkedTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsCumulativeForkedTest.java new file mode 100644 index 00000000000..8ab40d1f738 --- /dev/null +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsCumulativeForkedTest.java @@ -0,0 +1,147 @@ +package opentelemetry147.metrics; + +import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import datadog.metrics.impl.DDSketchHistograms; +import datadog.opentelemetry.shim.metrics.OtelMeterProvider; +import datadog.trace.agent.test.AbstractInstrumentationTest; +import datadog.trace.bootstrap.otel.metrics.data.OtelMetricRegistry; +import datadog.trace.junit.utils.config.WithConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.metrics.Meter; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +// Forked test: runs in an isolated JVM with cumulative temporality, verifying that observable +// counters report absolute values on each collect (no delta computation). +@WithConfig(key = "metrics.otel.enabled", value = "true") +@WithConfig(key = "otlp.metrics.temporality.preference", value = "cumulative") +class OpenTelemetryMetricsCumulativeForkedTest extends AbstractInstrumentationTest { + + private static final Attributes SOME_ATTRIBUTES = Attributes.of(stringKey("some"), "thing"); + private static final String WITH_ATTRS = "@{some=thing}"; + + private OtelMeterProvider meterProvider; + private Meter meter; + private Map points; + private OpenTelemetryMetricsTest.MeterReader meterReader; + + @BeforeAll + static void registerHistogramFactory() { + datadog.metrics.api.Histograms.register(DDSketchHistograms.FACTORY); + } + + @BeforeEach + void setUpMetrics() { + meterProvider = (OtelMeterProvider) GlobalOpenTelemetry.get().getMeterProvider(); + meter = meterProvider.get("test"); + points = new HashMap<>(); + meterReader = new OpenTelemetryMetricsTest.MeterReader(points); + } + + @Test + void testObservableLongCounterCumulative() { + long[] absoluteValue = {0L}; + AutoCloseable observable = + meter + .counterBuilder("cumulative-observable-long-counter") + .buildWithCallback(m -> m.record(absoluteValue[0])); + + absoluteValue[0] = 5L; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(5L, points.get("test:cumulative-observable-long-counter")); + + // cumulative: same absolute value is reported as-is (not as delta=0) + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(5L, points.get("test:cumulative-observable-long-counter")); + + // absolute value increases: reports new absolute value + points.clear(); + absoluteValue[0] = 12L; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(12L, points.get("test:cumulative-observable-long-counter")); + + closeQuietly(observable); + } + + @Test + void testObservableDoubleCounterCumulative() { + double[] absoluteValue = {0.0}; + AutoCloseable observable = + meter + .counterBuilder("cumulative-observable-double-counter") + .ofDoubles() + .buildWithCallback(m -> m.record(absoluteValue[0])); + + absoluteValue[0] = 3.5; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(3.5, points.get("test:cumulative-observable-double-counter")); + + // cumulative: same absolute value is reported as-is (not as delta=0.0) + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(3.5, points.get("test:cumulative-observable-double-counter")); + + // absolute value increases: reports new absolute value + points.clear(); + absoluteValue[0] = 8.0; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(8.0, points.get("test:cumulative-observable-double-counter")); + + closeQuietly(observable); + } + + @Test + void testSynchronousLongCounterCumulative() { + io.opentelemetry.api.metrics.LongCounter counter = + meter.counterBuilder("cumulative-long-counter").build(); + + counter.add(1); + counter.add(2, SOME_ATTRIBUTES); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(1L, points.get("test:cumulative-long-counter")); + assertEquals(2L, points.get("test:cumulative-long-counter" + WITH_ATTRS)); + + // cumulative: values accumulate without reset between collects + points.clear(); + counter.add(3); + counter.add(4, SOME_ATTRIBUTES); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(4L, points.get("test:cumulative-long-counter")); + assertEquals(6L, points.get("test:cumulative-long-counter" + WITH_ATTRS)); + } + + @Test + void testSynchronousDoubleCounterCumulative() { + io.opentelemetry.api.metrics.DoubleCounter counter = + meter.counterBuilder("cumulative-double-counter").ofDoubles().build(); + + counter.add(1.0); + counter.add(2.0, SOME_ATTRIBUTES); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(1.0, points.get("test:cumulative-double-counter")); + assertEquals(2.0, points.get("test:cumulative-double-counter" + WITH_ATTRS)); + + // cumulative: values accumulate without reset between collects + points.clear(); + counter.add(0.5); + counter.add(1.5, SOME_ATTRIBUTES); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(1.5, (double) points.get("test:cumulative-double-counter"), 0.001); + assertEquals(3.5, (double) points.get("test:cumulative-double-counter" + WITH_ATTRS), 0.001); + } + + private static void closeQuietly(AutoCloseable closeable) { + try { + closeable.close(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java index 3a4c6187fb2..11fcff87612 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/OpenTelemetryMetricsTest.java @@ -212,6 +212,13 @@ void testObservableLongCounter() { assertEquals(1L, points.get("test:observable-long-counter")); assertEquals(2L, points.get("test:observable-long-counter" + WITH_ATTRS)); + // second collect: absolute values are reported, not accumulated + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + + assertEquals(0L, points.get("test:observable-long-counter")); + assertEquals(0L, points.get("test:observable-long-counter" + WITH_ATTRS)); + closeQuietly(observable); } @@ -231,6 +238,13 @@ void testObservableDoubleCounter() { assertEquals(1.2, points.get("test:observable-double-counter")); assertEquals(3.4, points.get("test:observable-double-counter" + WITH_ATTRS)); + // second collect: absolute values are reported, not accumulated + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + + assertEquals(0.0, points.get("test:observable-double-counter")); + assertEquals(0.0, points.get("test:observable-double-counter" + WITH_ATTRS)); + closeQuietly(observable); } @@ -249,6 +263,13 @@ void testObservableLongUpDownCounter() { assertEquals(1L, points.get("test:observable-long-up-down-counter")); assertEquals(2L, points.get("test:observable-long-up-down-counter" + WITH_ATTRS)); + // second collect: absolute values are reported, not accumulated + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + + assertEquals(1L, points.get("test:observable-long-up-down-counter")); + assertEquals(2L, points.get("test:observable-long-up-down-counter" + WITH_ATTRS)); + closeQuietly(observable); } @@ -268,6 +289,13 @@ void testObservableDoubleUpDownCounter() { assertEquals(1.2, points.get("test:observable-double-up-down-counter")); assertEquals(3.4, points.get("test:observable-double-up-down-counter" + WITH_ATTRS)); + // second collect: absolute values are reported, not accumulated + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + + assertEquals(1.2, points.get("test:observable-double-up-down-counter")); + assertEquals(3.4, points.get("test:observable-double-up-down-counter" + WITH_ATTRS)); + closeQuietly(observable); } @@ -308,6 +336,108 @@ void testObservableDoubleGauge() { closeQuietly(observable); } + @Test + void testObservableLongCounterDeltaWithChangingValues() { + long[] absoluteValue = {0L}; + AutoCloseable observable = + meter + .counterBuilder("observable-long-counter-delta-changing") + .buildWithCallback(m -> m.record(absoluteValue[0])); + + absoluteValue[0] = 5L; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(5L, points.get("test:observable-long-counter-delta-changing")); + + // delta since last collect: 12 - 5 = 7 + points.clear(); + absoluteValue[0] = 12L; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(7L, points.get("test:observable-long-counter-delta-changing")); + + // no change in absolute value: delta = 0 + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(0L, points.get("test:observable-long-counter-delta-changing")); + + closeQuietly(observable); + } + + @Test + void testObservableDoubleCounterDeltaWithChangingValues() { + double[] absoluteValue = {0.0}; + AutoCloseable observable = + meter + .counterBuilder("observable-double-counter-delta-changing") + .ofDoubles() + .buildWithCallback(m -> m.record(absoluteValue[0])); + + absoluteValue[0] = 2.5; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(2.5, points.get("test:observable-double-counter-delta-changing")); + + // delta since last collect: 5.0 - 2.5 = 2.5 + points.clear(); + absoluteValue[0] = 5.0; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(2.5, points.get("test:observable-double-counter-delta-changing")); + + // no change in absolute value: delta = 0.0 + points.clear(); + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(0.0, points.get("test:observable-double-counter-delta-changing")); + + closeQuietly(observable); + } + + @Test + void testObservableLongUpDownCounterReportsAbsoluteValue() { + long[] absoluteValue = {0L}; + AutoCloseable observable = + meter + .upDownCounterBuilder("observable-long-up-down-counter-absolute") + .buildWithCallback(m -> m.record(absoluteValue[0])); + + absoluteValue[0] = 10L; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(10L, points.get("test:observable-long-up-down-counter-absolute")); + + // value decreases: should report new absolute value, not a delta + points.clear(); + absoluteValue[0] = 3L; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(3L, points.get("test:observable-long-up-down-counter-absolute")); + + // value increases again + points.clear(); + absoluteValue[0] = 15L; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(15L, points.get("test:observable-long-up-down-counter-absolute")); + + closeQuietly(observable); + } + + @Test + void testObservableDoubleUpDownCounterReportsAbsoluteValue() { + double[] absoluteValue = {0.0}; + AutoCloseable observable = + meter + .upDownCounterBuilder("observable-double-up-down-counter-absolute") + .ofDoubles() + .buildWithCallback(m -> m.record(absoluteValue[0])); + + absoluteValue[0] = 8.0; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(8.0, points.get("test:observable-double-up-down-counter-absolute")); + + // value decreases: should report new absolute value + points.clear(); + absoluteValue[0] = 2.5; + OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); + assertEquals(2.5, points.get("test:observable-double-up-down-counter-absolute")); + + closeQuietly(observable); + } + @Test void testBatchCallback() { ObservableLongMeasurement longCounterObserver = @@ -385,18 +515,18 @@ void testBatchCallback() { points.clear(); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); - // delta mode: counters show values added during last collect - assertEquals(1L, points.get("test:long-counter-observer")); - assertEquals(10L, points.get("test:long-counter-observer" + WITH_ATTRS)); - assertEquals(2.3, points.get("test:double-counter-observer")); - assertEquals(20.3, points.get("test:double-counter-observer" + WITH_ATTRS)); - // up-down counters stay cumulative: they show the running total - assertEquals(8L, points.get("test:long-up-down-counter-observer")); - assertEquals(80L, points.get("test:long-up-down-counter-observer" + WITH_ATTRS)); - assertEquals(11.2, (double) points.get("test:double-up-down-counter-observer"), 0.001); + // async counters show delta since last collect (same value was recorded) + assertEquals(0L, points.get("test:long-counter-observer")); + assertEquals(0L, points.get("test:long-counter-observer" + WITH_ATTRS)); + assertEquals(0.0, points.get("test:double-counter-observer")); + assertEquals(0.0, points.get("test:double-counter-observer" + WITH_ATTRS)); + // async up-down counters stay cumulative and show the latest value + assertEquals(4L, points.get("test:long-up-down-counter-observer")); + assertEquals(40L, points.get("test:long-up-down-counter-observer" + WITH_ATTRS)); + assertEquals(5.6, (double) points.get("test:double-up-down-counter-observer"), 0.001); assertEquals( - 101.2, (double) points.get("test:double-up-down-counter-observer" + WITH_ATTRS), 0.001); - // gauges also stay cumulative: they only show latest value + 50.6, (double) points.get("test:double-up-down-counter-observer" + WITH_ATTRS), 0.001); + // gauges continue to only show the latest value assertEquals(7L, points.get("test:long-gauge-observer")); assertEquals(70L, points.get("test:long-gauge-observer" + WITH_ATTRS)); assertEquals(8.9, points.get("test:double-gauge-observer")); @@ -407,18 +537,18 @@ void testBatchCallback() { points.clear(); OtelMetricRegistry.INSTANCE.collectMetrics(meterReader); - // delta mode: no values were added as batchCallback is closed + // delta mode: no counts were set as batchCallback is closed, so no data point assertNull(points.get("test:long-counter-observer")); assertNull(points.get("test:long-counter-observer" + WITH_ATTRS)); assertNull(points.get("test:double-counter-observer")); assertNull(points.get("test:double-counter-observer" + WITH_ATTRS)); - // up-down counters stay cumulative: they show the running total - assertEquals(8L, points.get("test:long-up-down-counter-observer")); - assertEquals(80L, points.get("test:long-up-down-counter-observer" + WITH_ATTRS)); - assertEquals(11.2, (double) points.get("test:double-up-down-counter-observer"), 0.001); + // up-down counters stay cumulative: they continue to show the last count set + assertEquals(4L, points.get("test:long-up-down-counter-observer")); + assertEquals(40L, points.get("test:long-up-down-counter-observer" + WITH_ATTRS)); + assertEquals(5.6, (double) points.get("test:double-up-down-counter-observer"), 0.001); assertEquals( - 101.2, (double) points.get("test:double-up-down-counter-observer" + WITH_ATTRS), 0.001); - // gauges also stay cumulative: they only show latest value + 50.6, (double) points.get("test:double-up-down-counter-observer" + WITH_ATTRS), 0.001); + // gauges also stay cumulative: they continue to show the latest value set assertEquals(7L, points.get("test:long-gauge-observer")); assertEquals(70L, points.get("test:long-gauge-observer" + WITH_ATTRS)); assertEquals(8.9, points.get("test:double-gauge-observer")); From 3bca1f08e3973ebe326fd6ee2632ea143e7e087a Mon Sep 17 00:00:00 2001 From: Zarir Hamza Date: Tue, 12 May 2026 16:33:38 -0400 Subject: [PATCH 016/478] fix(aws-lambda): force placeholder resource so the Lambda Extension drops dd-tracer-serverless-span (#11313) fix(aws-lambda): force placeholder resource so the Lambda Extension drops dd-tracer-serverless-span The Datadog Lambda Extension filters the placeholder invocation span by comparing `span.resource == "dd-tracer-serverless-span"` (see `bottlecap/src/traces/trace_processor.rs::filter_span_from_lambda_library_or_runtime`). The intent is that the extension drops the placeholder so the inferred `aws.lambda` span (which the end-invocation handshake gives the same `span_id`) is the surviving record under that key in the trace store and remains parented to the inferred apigateway root. In practice the HTTP/JAX-RS instrumentation overwrites the placeholder's resource with the request route (e.g. "POST /") at `HTTP_FRAMEWORK_ROUTE` priority during the invocation, so the extension's filter no longer matches at end-of-invocation. Both records (the placeholder with `parent_id=0`, and the inferred `aws.lambda` with `parent_id=apigateway.span_id`) reach the backend under the same `(trace_id, span_id)` key. The trace store keeps the placeholder, and the rest of the trace is detached from the inferred apigateway root. Fix: in `LambdaHandlerInstrumentation.exit`, force the resource name back to the literal placeholder marker right before `span.finish()`, using `ResourceNamePriorities.MANUAL_INSTRUMENTATION` so the override beats whatever HTTP-framework priority the in-flight instrumentation has written. Verified end-to-end on Quarkus 3.15.4 / Java 21 / Lambda Extension v96: pre-fix the placeholder leaks to the backend with `parent_id=0` and the trace store reports orphans; post-fix zero `dd_tracer_serverless_span` rows reach the backend and the trace store reports a single 11-span chunk with no orphans. Refs: SLES-2837 use tag interceptor priority to avoid clobbering user-set resource names Add unit test comment Co-authored-by: rithikanarayan Co-authored-by: devflow.devflow-routing-intake --- .../lambda/LambdaHandlerInstrumentation.java | 16 ++++++++++++ ...reamingSimulatesHttpFrameworkResource.java | 26 +++++++++++++++++++ .../LambdaHandlerInstrumentationTest.groovy | 22 ++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/HandlerStreamingSimulatesHttpFrameworkResource.java diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java index d7407b47b5f..610b24b2f31 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java @@ -24,6 +24,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes; +import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; import datadog.trace.config.inversion.ConfigHelper; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -126,6 +127,21 @@ static void exit( String lambdaRequestId = awsContext.getAwsRequestId(); AgentTracer.get().notifyAppSecEnd(span); + // Force the resource name back to the literal placeholder marker right + // before finish so that the Datadog Lambda Extension's filter + // (filter_span_from_lambda_library_or_runtime in + // bottlecap/src/traces/trace_processor.rs, which compares + // span.resource == "dd-tracer-serverless-span") drops the placeholder. + // Other instrumentation (HTTP/JAX-RS) may have overwritten it with the + // route ("POST /") during the invocation, in which case the extension + // would fail to dedup, leading to the placeholder leaking to the backend + // with parent_id=0 and detaching the inferred apigateway root from the + // rest of the trace. + // Use TAG_INTERCEPTOR priority because DDSpanContext.setResourceName + // ignores writes whose priority is below the current resource priority, + // and the HTTP/JAX-RS instrumentation will already have written + // HTTP_FRAMEWORK_ROUTE (3) by this point. + span.setResourceName(INVOCATION_SPAN_NAME, ResourceNamePriorities.TAG_INTERCEPTOR); span.finish(); AgentTracer.get().notifyExtensionEnd(span, result, null != throwable, lambdaRequestId); } finally { diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/HandlerStreamingSimulatesHttpFrameworkResource.java b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/HandlerStreamingSimulatesHttpFrameworkResource.java new file mode 100644 index 00000000000..826f9858e25 --- /dev/null +++ b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/HandlerStreamingSimulatesHttpFrameworkResource.java @@ -0,0 +1,26 @@ +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Simulates HTTP server instrumentation updating the local root span resource (e.g. route) while + * the Lambda invocation span is active. + */ +public class HandlerStreamingSimulatesHttpFrameworkResource implements RequestStreamHandler { + + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) + throws IOException { + AgentSpan span = AgentTracer.activeSpan(); + if (span != null) { + span.setResourceName("POST /api/simulated", ResourceNamePriorities.HTTP_FRAMEWORK_ROUTE); + } + outputStream.write('O'); + outputStream.write('K'); + } +} diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy index d5b6a4bbbc1..ed1152ea1aa 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/test/groovy/LambdaHandlerInstrumentationTest.groovy @@ -98,6 +98,28 @@ abstract class LambdaHandlerInstrumentationTest extends VersionedNamingTestBase } } + def "serverless invocation span resource reset after simulated HTTP framework overwrite"() { + when: + def input = new ByteArrayInputStream(StandardCharsets.UTF_8.encode("Hello").array()) + def output = new ByteArrayOutputStream() + def ctx = Stub(Context) { + getAwsRequestId() >> requestId + } + new HandlerStreamingSimulatesHttpFrameworkResource().handleRequest(input, output, ctx) + + then: + assertTraces(1) { + trace(1) { + span { + operationName operation() + resourceName operation() + spanType DDSpanTypes.SERVERLESS + errored false + } + } + } + } + def "test streaming handler with error"() { when: def input = new ByteArrayInputStream(StandardCharsets.UTF_8.encode("Hello").array()) From 287722762e51a340a0651a9093d50bb676ff3ae3 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Tue, 12 May 2026 22:48:55 +0200 Subject: [PATCH 017/478] Replace secrets.GITHUB_TOKEN with dd-octo-sts in CI workflows (#11347) Add dd-octo-sts chainguard policy files Add 5 policy files under .github/chainguard/ declaring the issuer, subject, event, and permission constraints for every workflow that will be migrated from secrets.GITHUB_TOKEN to DataDog/dd-octo-sts-action. These policies must be on the default branch before the corresponding workflow changes can use them. Replace secrets.GITHUB_TOKEN with dd-octo-sts Migrate all 5 GitHub Actions workflows from secrets.GITHUB_TOKEN to OIDC tokens minted by DataDog/dd-octo-sts-action. The token exchange is auditable and governed by chainguard policy files that explicitly declare which workflow, event, and ref pattern may request which permissions. All affected workflows pass the token to actions/github-script via the github-token parameter. Merge branch 'master' into lloeki/dd-octo-sts Co-authored-by: sarahchen6 --- .github/workflows/check-pull-request-labels.yaml | 11 +++++++++-- .github/workflows/check-pull-requests.yaml | 15 +++++++++++---- .../workflows/comment-on-submodule-update.yaml | 15 +++++++++++---- .github/workflows/enforce-groovy-migration.yaml | 11 +++++++++-- .github/workflows/update-issues-on-release.yaml | 9 ++++++++- 5 files changed, 48 insertions(+), 13 deletions(-) diff --git a/.github/workflows/check-pull-request-labels.yaml b/.github/workflows/check-pull-request-labels.yaml index fbcc7303afe..e339e23b193 100644 --- a/.github/workflows/check-pull-request-labels.yaml +++ b/.github/workflows/check-pull-request-labels.yaml @@ -11,15 +11,22 @@ jobs: check_pr_labels: name: Check pull request labels permissions: + id-token: write # Required for OIDC token federation issues: write pull-requests: write runs-on: ubuntu-latest steps: + - name: Get GitHub Token via dd-octo-sts + id: generate-token + uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4 + with: + scope: DataDog/dd-trace-java + policy: self.check-pull-request-labels - name: Flag AI-generated pull requests id: flag_ai_generated uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # 9.0.0 with: - github-token: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ steps.generate-token.outputs.token }} script: | // Skip draft pull requests if (context.payload.pull_request.draft) { @@ -124,7 +131,7 @@ jobs: env: LABELS_STALE: ${{ steps.flag_ai_generated.outputs.labels_stale }} with: - github-token: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ steps.generate-token.outputs.token }} script: | // Skip draft pull requests if (context.payload.pull_request.draft) { diff --git a/.github/workflows/check-pull-requests.yaml b/.github/workflows/check-pull-requests.yaml index 42058eb42ab..4e7f00f07c7 100644 --- a/.github/workflows/check-pull-requests.yaml +++ b/.github/workflows/check-pull-requests.yaml @@ -3,8 +3,8 @@ on: pull_request: types: [opened, edited, ready_for_review, labeled, unlabeled, synchronize] branches: - - master - - release/v* + - master + - release/v* concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -12,14 +12,21 @@ jobs: check_pull_requests: name: Check pull requests permissions: + id-token: write # Required for OIDC token federation issues: write # Required to create a comment on the pull request pull-requests: write # Required to create a comment on the pull request runs-on: ubuntu-latest steps: + - name: Get GitHub Token via dd-octo-sts + id: generate-token + uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4 + with: + scope: DataDog/dd-trace-java + policy: self.check-pull-requests - name: Check pull requests uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # 9.0.0 with: - github-token: ${{secrets.GITHUB_TOKEN}} + github-token: ${{ steps.generate-token.outputs.token }} script: | // Skip draft pull requests if (context.payload.pull_request.draft) { @@ -41,7 +48,7 @@ jobs: if (titleCheckFailed) { core.setFailed('Please remove the tag from the pull request title.') } - // Check body does + // Check body does const linkingKeywords = ['closes', 'closed', 'fix', 'fixes', 'fixed', 'resolve', 'resolves', 'resolved'] const body = context.payload.pull_request.body const bodyCheckFailed = linkingKeywords.some(keyword => body.search(new RegExp(`${keyword}\\s\\d+`, "im")) !== -1) diff --git a/.github/workflows/comment-on-submodule-update.yaml b/.github/workflows/comment-on-submodule-update.yaml index c81a3004bf5..59065c94d01 100644 --- a/.github/workflows/comment-on-submodule-update.yaml +++ b/.github/workflows/comment-on-submodule-update.yaml @@ -3,23 +3,30 @@ name: Comment on Submodule Update on: pull_request: branches: - - 'master' - - 'release/**' + - "master" + - "release/**" paths: - - 'dd-java-agent/agent-jmxfetch/integrations-core' + - "dd-java-agent/agent-jmxfetch/integrations-core" jobs: comment_on_submodule_update: permissions: + id-token: write # Required for OIDC token federation issues: write # Required to create a comment on the pull request pull-requests: write # Required to create a comment on the pull request runs-on: ubuntu-latest steps: + - name: Get GitHub Token via dd-octo-sts + id: generate-token + uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4 + with: + scope: DataDog/dd-trace-java + policy: self.comment-on-submodule-update - name: Post comment on submodule update uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # 9.0.0 with: - github-token: ${{secrets.GITHUB_TOKEN}} + github-token: ${{ steps.generate-token.outputs.token }} script: | github.rest.issues.createComment({ issue_number: context.issue.number, diff --git a/.github/workflows/enforce-groovy-migration.yaml b/.github/workflows/enforce-groovy-migration.yaml index adfb3ff59ce..d9d51d63a22 100644 --- a/.github/workflows/enforce-groovy-migration.yaml +++ b/.github/workflows/enforce-groovy-migration.yaml @@ -4,7 +4,7 @@ on: types: [opened, edited, ready_for_review, labeled, unlabeled, synchronize] branches: - master - - 'release/v*' + - "release/v*" concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -14,14 +14,21 @@ jobs: enforce_groovy_migration: name: Enforce Groovy migration permissions: + id-token: write # Required for OIDC token federation issues: write # Required to create a comment on the pull request pull-requests: write # Required to create a comment on the pull request runs-on: ubuntu-latest steps: + - name: Get GitHub Token via dd-octo-sts + id: generate-token + uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4 + with: + scope: DataDog/dd-trace-java + policy: self.enforce-groovy-migration - name: Check for new Groovy files uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # 9.0.0 with: - github-token: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ steps.generate-token.outputs.token }} script: | const managedMarker = '' diff --git a/.github/workflows/update-issues-on-release.yaml b/.github/workflows/update-issues-on-release.yaml index 8ed8a9de1b1..8749f857231 100644 --- a/.github/workflows/update-issues-on-release.yaml +++ b/.github/workflows/update-issues-on-release.yaml @@ -11,13 +11,20 @@ on: jobs: update_issues: permissions: + id-token: write # Required for OIDC token federation issues: write # Required to update issues runs-on: ubuntu-latest steps: + - name: Get GitHub Token via dd-octo-sts + id: generate-token + uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4 + with: + scope: DataDog/dd-trace-java + policy: self.update-issues-on-release - name: Get milestone for release uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # 9.0.0 with: - github-token: ${{secrets.GITHUB_TOKEN}} + github-token: ${{ steps.generate-token.outputs.token }} script: | // Get release milestone name const milestoneName = "${{github.event_name}}" == "workflow_dispatch" ? From 1877c671b19547335bc25ead763ec91300625842 Mon Sep 17 00:00:00 2001 From: Andrei Matei Date: Wed, 13 May 2026 03:07:37 -0400 Subject: [PATCH 018/478] debugger/symdb: add upload metadata fields to upload event message and attachment (#11329) debugger/symdb: add upload metadata fields to upload event message and attachment Add the following fields to the SymDB upload event message that accompanies each multipart upload (camelCase, matching the rest of the EvP event schema): - "version" (top-level): the service version - "language" (top-level): "java" - "uploadId" (top-level): a UUID generated once per SymbolSink instance, shared by all batches uploaded by the sink - "batchNum" (top-level): 1-indexed counter incremented per upload - "final" (top-level): always false; the Java tracer continuously uploads new code as classes get loaded, so there is no defined end-of-upload point - "attachmentSize" (top-level): size in bytes of the (compressed) attachment payload Also add the same metadata to the gzipped attachment body via the ServiceVersion wrapper (snake_case to match the rest of the attachment scope schema): - "upload_id" - "batch_num" - "final" uploadId/batchNum are computed once per batch in serializeAndUpload so both the attachment and the event JSON carry the same values. Some of these fields are new, to be used by the backend in the future. Others duplicate info that was already included in the attachment; by duplicating some metadata out of the SymDB attachment body into the EvP event body, the backend can populate per-attachment bookkeeping without downloading the attachment. Co-authored-by: devflow.devflow-routing-intake --- .../com/datadog/debugger/sink/SymbolSink.java | 67 +++++++++++++++---- .../debugger/symbol/ServiceVersion.java | 22 +++++- .../datadog/debugger/sink/SymbolSinkTest.java | 29 ++++++-- 3 files changed, 99 insertions(+), 19 deletions(-) diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SymbolSink.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SymbolSink.java index a18cd2d3df5..ecb064ac251 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SymbolSink.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/SymbolSink.java @@ -10,6 +10,7 @@ import com.datadog.debugger.util.MoshiHelper; import com.squareup.moshi.JsonAdapter; import datadog.trace.api.Config; +import datadog.trace.util.RandomUtils; import datadog.trace.util.TagsHelper; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -21,6 +22,7 @@ import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.atomic.AtomicLong; import java.util.zip.GZIPOutputStream; import okhttp3.HttpUrl; import okhttp3.MediaType; @@ -36,21 +38,34 @@ public class SymbolSink { public static final BatchUploader.RetryPolicy RETRY_POLICY = new BatchUploader.RetryPolicy(10); private static final JsonAdapter SERVICE_VERSION_ADAPTER = MoshiHelper.createMoshiSymbol().adapter(ServiceVersion.class); + // The upload event message JSON. The "final" field is hard-coded to false: + // the Java tracer continuously uploads new code as classes get loaded, so + // there is no defined end-of-upload point. private static final String EVENT_FORMAT = "{%n" + "\"ddsource\": \"dd_debugger\",%n" + "\"service\": \"%s\",%n" + + "\"version\": \"%s\",%n" + + "\"language\": \"java\",%n" + "\"runtimeId\": \"%s\",%n" - + "\"type\": \"symdb\"%n" + + "\"type\": \"symdb\",%n" + + "\"uploadId\": \"%s\",%n" + + "\"batchNum\": %d,%n" + + "\"final\": false,%n" + + "\"attachmentSize\": %d%n" + "}"; static final int MAX_SYMDB_UPLOAD_SIZE = 50 * 1024 * 1024; private final String serviceName; private final String env; private final String version; + private final String runtimeId; private final BatchUploader symbolUploader; private final int maxPayloadSize; - private final BatchUploader.MultiPartContent event; + // uploadId is shared by all batches uploaded by this sink. The backend uses + // it to group batches belonging to the same logical upload. + private final String uploadId = RandomUtils.randomUUID().toString(); + private final AtomicLong batchNum = new AtomicLong(0); private final BlockingQueue scopes = new ArrayBlockingQueue<>(CAPACITY); private final Stats stats = new Stats(); private final boolean isCompressed; @@ -66,15 +81,10 @@ public SymbolSink(Config config) { this.serviceName = TagsHelper.sanitize(config.getServiceName()); this.env = TagsHelper.sanitize(config.getEnv()); this.version = TagsHelper.sanitize(config.getVersion()); + this.runtimeId = config.getRuntimeId(); this.symbolUploader = symbolUploader; this.maxPayloadSize = maxPayloadSize; this.isCompressed = config.isSymbolDatabaseCompressed(); - byte[] eventContent = - String.format( - EVENT_FORMAT, TagsHelper.sanitize(config.getServiceName()), config.getRuntimeId()) - .getBytes(StandardCharsets.UTF_8); - this.event = - new BatchUploader.MultiPartContent(eventContent, "event", "event.json", APPLICATION_JSON); } public void stop() { @@ -111,22 +121,35 @@ public void flush() { } private void serializeAndUpload(List scopesToSerialize) { + // Determine the batch number once so the attachment body and the EvP event + // message agree on it. + long currentBatch = batchNum.incrementAndGet(); try { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(2 * 1024 * 1024); try (OutputStream outputStream = isCompressed ? new GZIPOutputStream(byteArrayOutputStream) : byteArrayOutputStream) { BufferedSink sink = Okio.buffer(Okio.sink(outputStream)); SERVICE_VERSION_ADAPTER.toJson( - sink, new ServiceVersion(serviceName, env, version, "JAVA", scopesToSerialize)); + sink, + new ServiceVersion( + serviceName, + env, + version, + "JAVA", + scopesToSerialize, + uploadId, + currentBatch, + false /* isFinal */)); sink.flush(); } - doUpload(scopesToSerialize, byteArrayOutputStream.toByteArray(), isCompressed); + doUpload(scopesToSerialize, byteArrayOutputStream.toByteArray(), isCompressed, currentBatch); } catch (IOException e) { LOGGER.debug("Error serializing scopes", e); } } - private void doUpload(List scopesToSerialize, byte[] payload, boolean isCompressed) { + private void doUpload( + List scopesToSerialize, byte[] payload, boolean isCompressed, long currentBatch) { if (payload.length > maxPayloadSize) { LOGGER.warn( "Payload is too big: {}/{} isCompressed={}", @@ -138,20 +161,38 @@ private void doUpload(List scopesToSerialize, byte[] payload, boolean isC } updateStats(scopesToSerialize, payload.length); LOGGER.debug( - "Sending {} jar scopes size={} isCompressed={}", + "Sending {} jar scopes size={} isCompressed={} uploadId={} batchNum={}", scopesToSerialize.size(), payload.length, - isCompressed); + isCompressed, + uploadId, + currentBatch); String fileName = "file.json"; MediaType mediaType = APPLICATION_JSON; if (isCompressed) { fileName = "file.gz"; mediaType = APPLICATION_GZIP; } + BatchUploader.MultiPartContent event = buildEvent(currentBatch, payload.length); symbolUploader.uploadAsMultipart( "", event, new BatchUploader.MultiPartContent(payload, "file", fileName, mediaType)); } + private BatchUploader.MultiPartContent buildEvent(long currentBatch, int attachmentSize) { + byte[] eventContent = + String.format( + EVENT_FORMAT, + serviceName, + version, + runtimeId, + uploadId.toString(), + currentBatch, + attachmentSize) + .getBytes(StandardCharsets.UTF_8); + return new BatchUploader.MultiPartContent( + eventContent, "event", "event.json", APPLICATION_JSON); + } + private static byte[] compressPayload(byte[] jsonBytes) { // usual compression factor 40:1 for those json payload, so we are preallocating 1/40 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(jsonBytes.length / 40); diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ServiceVersion.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ServiceVersion.java index a88fc25da63..fd1efaaac04 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ServiceVersion.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/ServiceVersion.java @@ -1,5 +1,6 @@ package com.datadog.debugger.symbol; +import com.squareup.moshi.Json; import java.util.List; public class ServiceVersion { @@ -10,13 +11,32 @@ public class ServiceVersion { private final String language; private final List scopes; + @Json(name = "upload_id") + private final String uploadId; + + @Json(name = "batch_num") + private final long batchNum; + + @Json(name = "final") + private final boolean isFinal; + public ServiceVersion( - String service, String env, String version, String language, List scopes) { + String service, + String env, + String version, + String language, + List scopes, + String uploadId, + long batchNum, + boolean isFinal) { this.service = service; this.env = env; this.version = version; this.language = language; this.scopes = scopes; + this.uploadId = uploadId; + this.batchNum = batchNum; + this.isFinal = isFinal; } public List getScopes() { diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/sink/SymbolSinkTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/sink/SymbolSinkTest.java index 91a5743d2a0..5ec1471f92a 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/sink/SymbolSinkTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/sink/SymbolSinkTest.java @@ -24,6 +24,8 @@ public void testSimpleFlush() { SymbolUploaderMock symbolUploaderMock = new SymbolUploaderMock(); Config config = mock(Config.class); when(config.getServiceName()).thenReturn("service1"); + when(config.getVersion()).thenReturn("1.0.0"); + when(config.getRuntimeId()).thenReturn("test-runtime"); when(config.isSymbolDatabaseCompressed()).thenReturn(false); SymbolSink symbolSink = new SymbolSink(config, symbolUploaderMock, MAX_SYMDB_UPLOAD_SIZE); symbolSink.addScope(Scope.builder(ScopeType.JAR, null, 0, 0).build()); @@ -35,13 +37,25 @@ public void testSimpleFlush() { String strEventContent = new String(eventContent.getContent()); assertTrue(strEventContent.contains("\"ddsource\": \"dd_debugger\"")); assertTrue(strEventContent.contains("\"service\": \"service1\"")); + assertTrue(strEventContent.contains("\"version\": \"1.0.0\"")); + assertTrue(strEventContent.contains("\"language\": \"java\"")); + assertTrue(strEventContent.contains("\"runtimeId\": \"test-runtime\"")); assertTrue(strEventContent.contains("\"type\": \"symdb\"")); + assertTrue(strEventContent.contains("\"uploadId\":")); + assertTrue(strEventContent.contains("\"batchNum\": 1")); + assertTrue(strEventContent.contains("\"final\": false")); + assertTrue(strEventContent.contains("\"attachmentSize\":")); BatchUploader.MultiPartContent symbolContent = symbolUploaderMock.multiPartContents.get(1); assertEquals("file", symbolContent.getPartName()); assertEquals("file.json", symbolContent.getFileName()); - assertEquals( - "{\"language\":\"JAVA\",\"scopes\":[{\"end_line\":0,\"has_injectible_lines\":false,\"scope_type\":\"JAR\",\"start_line\":0}],\"service\":\"service1\"}", - new String(symbolContent.getContent())); + String fileContent = new String(symbolContent.getContent()); + assertTrue(fileContent.contains("\"language\":\"JAVA\"")); + assertTrue(fileContent.contains("\"scopes\":[")); + assertTrue(fileContent.contains("\"service\":\"service1\"")); + assertTrue(fileContent.contains("\"version\":\"1.0.0\"")); + assertTrue(fileContent.contains("\"upload_id\":")); + assertTrue(fileContent.contains("\"batch_num\":1")); + assertTrue(fileContent.contains("\"final\":false")); } @Test @@ -219,8 +233,13 @@ public void maxCompressedAndSplit() { .build()); } symbolSink.flush(); - assertEquals(4, symbolUploaderMock.multiPartContents.size()); - for (int i = 0; i < 4; i += 2) { + int total = symbolUploaderMock.multiPartContents.size(); + assertTrue( + total >= 4, "expected at least 4 multipart entries (2+ event/file pairs), got " + total); + assertTrue( + total % 2 == 0, + "expected an even number of multipart entries (event/file pairs), got " + total); + for (int i = 0; i < total; i += 2) { BatchUploader.MultiPartContent eventContent = symbolUploaderMock.multiPartContents.get(i); assertEquals("event", eventContent.getPartName()); BatchUploader.MultiPartContent symbolContent = From af7ee344a99d95772b0ef815d23b75f9ae2fb7e0 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Wed, 13 May 2026 12:59:30 +0200 Subject: [PATCH 019/478] Avoid Metadata.key allocations on grpc (#11351) Avoid Metadata.key allocations on grpc Co-authored-by: andrea.marziali --- .../armeria/grpc/client/GrpcInjectAdapter.java | 9 ++++++++- .../armeria/grpc/server/GrpcExtractAdapter.java | 10 ++++++++-- .../armeria/grpc/server/TracingServerInterceptor.java | 8 +++++++- .../instrumentation/grpc/client/GrpcInjectAdapter.java | 10 +++++++++- .../grpc/server/GrpcExtractAdapter.java | 10 ++++++++-- .../grpc/server/TracingServerInterceptor.java | 8 +++++++- 6 files changed, 47 insertions(+), 8 deletions(-) diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java index 931d729c6e1..8be18d7f369 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java @@ -1,17 +1,24 @@ package datadog.trace.instrumentation.armeria.grpc.client; import datadog.context.propagation.CarrierSetter; +import datadog.trace.api.cache.DDCache; +import datadog.trace.api.cache.DDCaches; import io.grpc.Metadata; +import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault public final class GrpcInjectAdapter implements CarrierSetter { + private static final Function> KEY_MAKER = + key -> Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + private static final DDCache> KEY_CACHE = + DDCaches.newFixedSizeCache(64); public static final GrpcInjectAdapter SETTER = new GrpcInjectAdapter(); @Override public void set(final Metadata carrier, final String key, final String value) { - Metadata.Key metadataKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + Metadata.Key metadataKey = KEY_CACHE.computeIfAbsent(key, KEY_MAKER); if (carrier.containsKey(metadataKey)) { carrier.removeAll( metadataKey); // Remove existing to ensure identical behavior with other carriers diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/GrpcExtractAdapter.java b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/GrpcExtractAdapter.java index e358e7a0632..6cc62562d72 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/GrpcExtractAdapter.java +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/GrpcExtractAdapter.java @@ -1,9 +1,16 @@ package datadog.trace.instrumentation.armeria.grpc.server; +import datadog.trace.api.cache.DDCache; +import datadog.trace.api.cache.DDCaches; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import io.grpc.Metadata; +import java.util.function.Function; public final class GrpcExtractAdapter implements AgentPropagation.ContextVisitor { + private static final Function> KEY_MAKER = + key -> Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + private static final DDCache> KEY_CACHE = + DDCaches.newFixedSizeCache(64); public static final GrpcExtractAdapter GETTER = new GrpcExtractAdapter(); @@ -11,8 +18,7 @@ public final class GrpcExtractAdapter implements AgentPropagation.ContextVisitor public void forEachKey(Metadata carrier, AgentPropagation.KeyClassifier classifier) { for (String key : carrier.keys()) { if (!key.endsWith(Metadata.BINARY_HEADER_SUFFIX) && !key.startsWith(":")) { - if (!classifier.accept( - key, carrier.get(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER)))) { + if (!classifier.accept(key, carrier.get(KEY_CACHE.computeIfAbsent(key, KEY_MAKER)))) { return; } } diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java index 2e3026f9cad..be36634f48e 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/server/TracingServerInterceptor.java @@ -12,6 +12,8 @@ import static datadog.trace.instrumentation.armeria.grpc.server.GrpcServerDecorator.SERVER_PATHWAY_EDGE_TAGS; import datadog.trace.api.Config; +import datadog.trace.api.cache.DDCache; +import datadog.trace.api.cache.DDCaches; import datadog.trace.api.function.TriConsumer; import datadog.trace.api.function.TriFunction; import datadog.trace.api.gateway.CallbackProvider; @@ -43,6 +45,10 @@ import javax.annotation.Nonnull; public class TracingServerInterceptor implements ServerInterceptor { + private static final Function> KEY_MAKER = + key -> Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + private static final DDCache> KEY_CACHE = + DDCaches.newFixedSizeCache(64); public static final TracingServerInterceptor INSTANCE = new TracingServerInterceptor(); private static final Set IGNORED_METHODS = Config.get().getGrpcIgnoredInboundMethods(); @@ -294,7 +300,7 @@ private static void callIGCallbackHeaders( } for (String key : metadata.keys()) { if (!key.endsWith(Metadata.BINARY_HEADER_SUFFIX) && !key.startsWith(":")) { - Metadata.Key mdKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + Metadata.Key mdKey = KEY_CACHE.computeIfAbsent(key, KEY_MAKER); for (String value : metadata.getAll(mdKey)) { headerCb.accept(reqCtx, key, value); } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java index a969dcb8771..24a6c7df1aa 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/client/GrpcInjectAdapter.java @@ -1,16 +1,24 @@ package datadog.trace.instrumentation.grpc.client; import datadog.context.propagation.CarrierSetter; +import datadog.trace.api.cache.DDCache; +import datadog.trace.api.cache.DDCaches; import io.grpc.Metadata; +import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault public final class GrpcInjectAdapter implements CarrierSetter { + private static final Function> KEY_MAKER = + key -> Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + private static final DDCache> KEY_CACHE = + DDCaches.newFixedSizeCache(64); + public static final GrpcInjectAdapter SETTER = new GrpcInjectAdapter(); @Override public void set(final Metadata carrier, final String key, final String value) { - Metadata.Key metadataKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + Metadata.Key metadataKey = KEY_CACHE.computeIfAbsent(key, KEY_MAKER); if (carrier.containsKey(metadataKey)) { carrier.removeAll( metadataKey); // Remove existing to ensure identical behavior with other carriers diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/GrpcExtractAdapter.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/GrpcExtractAdapter.java index 26477356e11..27a8804651c 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/GrpcExtractAdapter.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/GrpcExtractAdapter.java @@ -1,9 +1,16 @@ package datadog.trace.instrumentation.grpc.server; +import datadog.trace.api.cache.DDCache; +import datadog.trace.api.cache.DDCaches; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; import io.grpc.Metadata; +import java.util.function.Function; public final class GrpcExtractAdapter implements AgentPropagation.ContextVisitor { + private static final Function> KEY_MAKER = + key -> Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + private static final DDCache> KEY_CACHE = + DDCaches.newFixedSizeCache(64); public static final GrpcExtractAdapter GETTER = new GrpcExtractAdapter(); @@ -11,8 +18,7 @@ public final class GrpcExtractAdapter implements AgentPropagation.ContextVisitor public void forEachKey(Metadata carrier, AgentPropagation.KeyClassifier classifier) { for (String key : carrier.keys()) { if (!key.endsWith(Metadata.BINARY_HEADER_SUFFIX)) { - if (!classifier.accept( - key, carrier.get(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER)))) { + if (!classifier.accept(key, carrier.get(KEY_CACHE.computeIfAbsent(key, KEY_MAKER)))) { return; } } diff --git a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java index c259940dc87..db605914bb9 100644 --- a/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java +++ b/dd-java-agent/instrumentation/grpc-1.5/src/main/java/datadog/trace/instrumentation/grpc/server/TracingServerInterceptor.java @@ -13,6 +13,8 @@ import static datadog.trace.instrumentation.grpc.server.GrpcServerDecorator.SERVER_PATHWAY_EDGE_TAGS; import datadog.trace.api.Config; +import datadog.trace.api.cache.DDCache; +import datadog.trace.api.cache.DDCaches; import datadog.trace.api.function.TriConsumer; import datadog.trace.api.function.TriFunction; import datadog.trace.api.gateway.CallbackProvider; @@ -44,6 +46,10 @@ import javax.annotation.Nonnull; public class TracingServerInterceptor implements ServerInterceptor { + private static final Function> KEY_MAKER = + key -> Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + private static final DDCache> KEY_CACHE = + DDCaches.newFixedSizeCache(64); public static final TracingServerInterceptor INSTANCE = new TracingServerInterceptor(); private static final Set IGNORED_METHODS = Config.get().getGrpcIgnoredInboundMethods(); @@ -295,7 +301,7 @@ private static void callIGCallbackHeaders( } for (String key : metadata.keys()) { if (!key.endsWith(Metadata.BINARY_HEADER_SUFFIX)) { - Metadata.Key mdKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER); + Metadata.Key mdKey = KEY_CACHE.computeIfAbsent(key, KEY_MAKER); for (String value : metadata.getAll(mdKey)) { headerCb.accept(reqCtx, key, value); } From 71c5da043c6a9573cfbe42fc3e8e893caa56654d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 May 2026 11:05:37 +0000 Subject: [PATCH 020/478] chore(ci): bump the gh-actions-packages group with 2 updates (#11360) chore(ci): bump the gh-actions-packages group with 2 updates Bumps the gh-actions-packages group with 2 updates: [DataDog/commit-headless](https://github.com/datadog/commit-headless) and [github/codeql-action](https://github.com/github/codeql-action). Updates `DataDog/commit-headless` from 3.2.0 to 3.3.0 - [Changelog](https://github.com/DataDog/commit-headless/blob/main/CHANGELOG.md) - [Commits](https://github.com/datadog/commit-headless/compare/ad3668640012ec69186398f43d61923f6878bbbe...567f7eedac58750aa573f48fd60cfe478abc65bd) Updates `github/codeql-action` from 4.35.3 to 4.35.4 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/e46ed2cbd01164d986452f91f178727624ae40d7...68bde559dea0fdcac2102bfdf6230c5f70eb485e) --- updated-dependencies: - dependency-name: DataDog/commit-headless dependency-version: 3.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gh-actions-packages - dependency-name: github/codeql-action dependency-version: 4.35.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gh-actions-packages ... Signed-off-by: dependabot[bot] Merge branch 'master' into dependabot/github_actions/gh-actions-packages-0f5c633cfe Co-authored-by: amarziali Co-authored-by: devflow.devflow-routing-intake --- .github/workflows/add-release-to-cloudfoundry.yaml | 2 +- .github/workflows/analyze-changes.yaml | 6 +++--- .github/workflows/create-release-branch.yaml | 2 +- .github/workflows/update-gradle-dependencies.yaml | 4 ++-- .github/workflows/update-jmxfetch-submodule.yaml | 2 +- .github/workflows/update-smoke-test-latest-versions.yaml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/add-release-to-cloudfoundry.yaml b/.github/workflows/add-release-to-cloudfoundry.yaml index b26f06b9bbe..69be0e57853 100644 --- a/.github/workflows/add-release-to-cloudfoundry.yaml +++ b/.github/workflows/add-release-to-cloudfoundry.yaml @@ -49,7 +49,7 @@ jobs: git add --all git commit -m "chore: Add version ${{ steps.get-release-version.outputs.VERSION }} to Cloud Foundry" - name: Push changes - uses: DataDog/commit-headless@ad3668640012ec69186398f43d61923f6878bbbe # action/v3.2.0 + uses: DataDog/commit-headless@567f7eedac58750aa573f48fd60cfe478abc65bd # action/v3.3.0 with: branch: cloudfoundry command: push diff --git a/.github/workflows/analyze-changes.yaml b/.github/workflows/analyze-changes.yaml index 526832b607b..147964b5731 100644 --- a/.github/workflows/analyze-changes.yaml +++ b/.github/workflows/analyze-changes.yaml @@ -30,7 +30,7 @@ jobs: ${{ runner.os }}-gradle- - name: Initialize CodeQL - uses: github/codeql-action/init@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3 + uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4 with: languages: 'java' build-mode: 'manual' @@ -43,7 +43,7 @@ jobs: ./gradlew clean :dd-java-agent:shadowJar --build-cache --parallel --stacktrace --no-daemon --max-workers=4 - name: Perform CodeQL Analysis and upload results to GitHub Security tab - uses: github/codeql-action/analyze@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3 + uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4 trivy: name: Analyze changes with Trivy @@ -102,7 +102,7 @@ jobs: TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db - name: Upload Trivy scan results to GitHub Security tab - uses: github/codeql-action/upload-sarif@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3 + uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4 if: always() with: sarif_file: 'trivy-results.sarif' diff --git a/.github/workflows/create-release-branch.yaml b/.github/workflows/create-release-branch.yaml index ecd13a1de93..841dd7ae79d 100644 --- a/.github/workflows/create-release-branch.yaml +++ b/.github/workflows/create-release-branch.yaml @@ -121,7 +121,7 @@ jobs: git commit -m "chore: Pin system-tests for release branch" .github/workflows/run-system-tests.yaml .gitlab-ci.yml - name: Push changes - uses: DataDog/commit-headless@ad3668640012ec69186398f43d61923f6878bbbe # action/v3.2.0 + uses: DataDog/commit-headless@567f7eedac58750aa573f48fd60cfe478abc65bd # action/v3.3.0 with: token: "${{ steps.octo-sts.outputs.token }}" branch: "${{ steps.define-pin-branch.outputs.branch }}" diff --git a/.github/workflows/update-gradle-dependencies.yaml b/.github/workflows/update-gradle-dependencies.yaml index 001c5b38d4e..e3b73658ae9 100644 --- a/.github/workflows/update-gradle-dependencies.yaml +++ b/.github/workflows/update-gradle-dependencies.yaml @@ -75,7 +75,7 @@ jobs: - name: Push core changes if: steps.check-core-changes.outputs.commit_changes == 'true' - uses: DataDog/commit-headless@ad3668640012ec69186398f43d61923f6878bbbe # action/v3.2.0 + uses: DataDog/commit-headless@567f7eedac58750aa573f48fd60cfe478abc65bd # action/v3.3.0 with: token: "${{ steps.octo-sts.outputs.token }}" branch: "${{ steps.define-branches.outputs.core_branch }}" @@ -132,7 +132,7 @@ jobs: - name: Push instrumentation changes if: steps.check-instrumentation-changes.outputs.commit_changes == 'true' - uses: DataDog/commit-headless@ad3668640012ec69186398f43d61923f6878bbbe # action/v3.2.0 + uses: DataDog/commit-headless@567f7eedac58750aa573f48fd60cfe478abc65bd # action/v3.3.0 with: token: "${{ steps.octo-sts.outputs.token }}" branch: "${{ steps.define-branches.outputs.instrumentation_branch }}" diff --git a/.github/workflows/update-jmxfetch-submodule.yaml b/.github/workflows/update-jmxfetch-submodule.yaml index 0907cb98f84..ea5ea15c7b4 100644 --- a/.github/workflows/update-jmxfetch-submodule.yaml +++ b/.github/workflows/update-jmxfetch-submodule.yaml @@ -45,7 +45,7 @@ jobs: git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git commit -m "feat(ci): Update agent-jmxfetch submodule" dd-java-agent/agent-jmxfetch/integrations-core - name: Push changes - uses: DataDog/commit-headless@ad3668640012ec69186398f43d61923f6878bbbe # action/v3.2.0 + uses: DataDog/commit-headless@567f7eedac58750aa573f48fd60cfe478abc65bd # action/v3.3.0 if: steps.check-changes.outputs.commit_changes == 'true' with: token: "${{ steps.octo-sts.outputs.token }}" diff --git a/.github/workflows/update-smoke-test-latest-versions.yaml b/.github/workflows/update-smoke-test-latest-versions.yaml index 98a317a23ee..49a8dbee825 100644 --- a/.github/workflows/update-smoke-test-latest-versions.yaml +++ b/.github/workflows/update-smoke-test-latest-versions.yaml @@ -136,7 +136,7 @@ jobs: - name: Push changes if: steps.check-changes.outputs.has_changes == 'true' - uses: DataDog/commit-headless@ad3668640012ec69186398f43d61923f6878bbbe # action/v3.2.0 + uses: DataDog/commit-headless@567f7eedac58750aa573f48fd60cfe478abc65bd # action/v3.3.0 with: token: "${{ steps.octo-sts.outputs.token }}" branch: "${{ steps.define-branch.outputs.branch }}" From 3e3f3d5b8a0b60263471bf8c39d96a55b1fe926d Mon Sep 17 00:00:00 2001 From: Adrien Boitreaud <72934368+aboitreaud@users.noreply.github.com> Date: Wed, 13 May 2026 16:45:54 +0200 Subject: [PATCH 021/478] Revert "e2e pipeline configuration when data jobs is enabled" (#8553) (#11356) Revert "e2e pipeline configuration when data jobs is enabled" (#8553) Merge branch 'master' into adrien.boitreaud/revert-pr-8553 Co-authored-by: adrien.boitreaud --- .../src/main/java/datadog/trace/bootstrap/Agent.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java index 5288f92dbe3..f46e04bed6a 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java @@ -442,12 +442,6 @@ private static boolean configureDataJobsMonitoring() { propertyNameToSystemPropertyName("integration.spark.enabled"), "true"); setSystemPropertyDefault( propertyNameToSystemPropertyName("integration.spark-executor.enabled"), "true"); - // needed for e2e pipeline - setSystemPropertyDefault(propertyNameToSystemPropertyName("data.streams.enabled"), "true"); - setSystemPropertyDefault( - propertyNameToSystemPropertyName("integration.aws-sdk.enabled"), "true"); - setSystemPropertyDefault( - propertyNameToSystemPropertyName("integration.kafka.enabled"), "true"); if ("true".equals(ddGetProperty(propertyNameToSystemPropertyName(DATA_JOBS_ENABLED)))) { setSystemPropertyDefault( From fd9eac965fb1462b95f1127d134d0ad06eb5c57f Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Wed, 13 May 2026 18:12:09 -0400 Subject: [PATCH 022/478] Bump lz4 version. (#11365) Bump lz4 version. Fixed exclusion. Fixed resolution. Fixed warning. Improved comment. [skip ci] Merge branch 'master' into alexeyk/bump-lz4-version Co-authored-by: alexey.kuznetsov --- gradle/dependencies.gradle | 12 +++++++++++- gradle/libs.versions.toml | 5 ++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 3814c64f559..ae4aa311ce1 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -44,7 +44,7 @@ final class CachedData { exclude(dependency('com.squareup.okhttp3:okhttp')) exclude(dependency('com.datadoghq.okio:okio')) exclude(dependency('com.squareup.okio:okio')) - exclude(dependency('org.lz4:lz4-java')) + exclude(dependency('at.yawk.lz4:lz4-java')) exclude(dependency('io.airlift:aircompressor')) // dogstatsd and its transitives @@ -73,6 +73,16 @@ final class CachedData { ] } +// The upstream `org.lz4:lz4-java` project is no longer maintained (see https://github.com/lz4/lz4-java), +// so we depend on the community fork `at.yawk.lz4:lz4-java`. The fork advertises itself as a drop-in replacement +// via Gradle capabilities (see https://docs.gradle.org/current/userguide/component_capabilities.html). +// This rule resolves conflicts by selecting the highest version. +configurations.configureEach { + resolutionStrategy.capabilitiesResolution.withCapability('org.lz4:lz4-java') { + selectHighestVersion() + } +} + CachedData.deps.shared = [ // Force specific version of okio required by com.squareup.moshi:moshi // When all of the dependencies are declared in dd-trace-core, moshi overrides the okhttp's diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5147cb93c35..6b1916a456f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -53,7 +53,7 @@ commons = "3.2" guava = "[16.0,20.0]" # Last version to support Java 7 javaparser = "3.24.4" jctools = "4.0.6" -lz4 = "1.7.1" +lz4 = "1.11.0" # Logging slf4j = "1.7.30" @@ -118,7 +118,6 @@ instrument-java = { module = "com.datadoghq:dd-instrument-java", version.ref = " # Profiling jmc-common = { module = "org.openjdk.jmc:common", version.ref = "jmc" } jmc-flightrecorder = { module = "org.openjdk.jmc:flightrecorder", version.ref = "jmc" } -jafar-parser = { module = "io.btrace:jafar-parser", version.ref = "jafar" } jafar-tools = { module = "io.btrace:jafar-tools", version.ref = "jafar" } # Web & Network @@ -136,7 +135,7 @@ guava = { module = "com.google.guava:guava", version.ref = "guava" } javaparser = {module = "com.github.javaparser:javaparser-core", version.ref = "javaparser"} javaparser-symbol-solver = {module = "com.github.javaparser:javaparser-symbol-solver-core", version.ref = "javaparser"} jctools = { module = "org.jctools:jctools-core-jdk11", version.ref = "jctools" } -lz4 = { module = "org.lz4:lz4-java", version.ref = "lz4" } +lz4 = { module = "at.yawk.lz4:lz4-java", version.ref = "lz4" } # Logging logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } From b4d1d5b2f1b8916abeaa6e685b39942c5422e75e Mon Sep 17 00:00:00 2001 From: "dd-octo-sts[bot]" <200755185+dd-octo-sts[bot]@users.noreply.github.com> Date: Thu, 14 May 2026 20:13:15 +0000 Subject: [PATCH 023/478] Update instrumentation Gradle dependencies (#11333) chore: Update instrumentation Gradle dependencies Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Merge branch 'master' into ci/update-gradle-dependencies-instrumentation-20260510 Fixed OpenAI Java latest dependency tests with dummy mock token. Refresh Mule latest scheduler service lock Co-authored-by: AlexeyKuznetsov-DD Co-authored-by: yury.gribkov --- .../aws-java-dynamodb-2.0/gradle.lockfile | 74 +++++++-------- .../aws-java-eventbridge-2.0/gradle.lockfile | 74 +++++++-------- .../aws-java/aws-java-s3-2.0/gradle.lockfile | 80 ++++++++-------- .../aws-java/aws-java-sdk-2.2/gradle.lockfile | 82 ++++++++--------- .../aws-java/aws-java-sfn-2.0/gradle.lockfile | 74 +++++++-------- .../aws-java/aws-java-sns-2.0/gradle.lockfile | 74 +++++++-------- .../gradle.lockfile | 8 +- .../google-pubsub-1.116/gradle.lockfile | 60 ++++++------ .../gradle.lockfile | 24 ++--- .../jetty-client-12.0/gradle.lockfile | 14 +-- .../jetty-server-12.0/gradle.lockfile | 92 +++++++++---------- .../gradle.lockfile | 50 +++++----- .../instrumentation/mule-4.5/gradle.lockfile | 6 +- .../netty/netty-4.1/gradle.lockfile | 28 +++--- .../netty/netty-buffer-4.0/gradle.lockfile | 4 +- .../netty-concurrent-4.0/gradle.lockfile | 2 +- .../netty/netty-promise-4.0/gradle.lockfile | 2 +- .../openai-java-3.0/gradle.lockfile | 10 +- .../src/test/groovy/OpenAiTest.groovy | 3 +- .../test/groovy/ResponseServiceTest.groovy | 2 +- .../opentelemetry-1.27/gradle.lockfile | 6 +- .../opentelemetry-1.4/gradle.lockfile | 6 +- .../opentelemetry-1.47/gradle.lockfile | 6 +- .../tomcat/tomcat-5.5/gradle.lockfile | 6 +- .../twilio-0.0.1/gradle.lockfile | 2 +- .../vertx-mysql-client-4.0/gradle.lockfile | 32 +++---- .../vertx-pg-client-4.0/gradle.lockfile | 32 +++---- .../vertx-redis-client-3.9/gradle.lockfile | 38 ++++---- .../vertx-web/vertx-web-4.0/gradle.lockfile | 40 ++++---- .../vertx-web/vertx-web-5.0/gradle.lockfile | 44 ++++----- .../appsec/springboot/gradle.lockfile | 3 + dd-smoke-tests/log-injection/gradle.lockfile | 14 +-- 32 files changed, 498 insertions(+), 494 deletions(-) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile index 9ead0b0528c..e925c6c2584 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile @@ -54,25 +54,25 @@ commons-logging:commons-logging:1.2=latestDepForkedTestRuntimeClasspath,latestDe de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.118.Final=testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.118.Final=testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.118.Final=testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.118.Final=testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.118.Final=testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.118.Final=testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.118.Final=testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.118.Final=testRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.118.Final=testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.118.Final=testRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs @@ -154,57 +154,57 @@ org.testcontainers:localstack:1.21.4=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.30.22=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:dynamodb:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:dynamodb:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:dynamodb:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.30.22=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile index 75ba2e06b27..97137b0d838 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile @@ -54,25 +54,25 @@ commons-logging:commons-logging:1.2=latestDepForkedTestRuntimeClasspath,latestDe de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.112.Final=testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.112.Final=testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.112.Final=testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.112.Final=testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.112.Final=testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.112.Final=testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.112.Final=testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.112.Final=testRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.112.Final=testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.112.Final=testRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs @@ -155,83 +155,83 @@ org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,lat org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.27.19=compileClasspath software.amazon.awssdk:annotations:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.27.23=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.27.19=compileClasspath software.amazon.awssdk:auth:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.27.19=compileClasspath software.amazon.awssdk:aws-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.27.19=compileClasspath software.amazon.awssdk:aws-json-protocol:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:checksums-spi:2.27.19=compileClasspath software.amazon.awssdk:checksums-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.27.19=compileClasspath software.amazon.awssdk:checksums:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.27.19=compileClasspath software.amazon.awssdk:endpoints-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.27.19=compileClasspath software.amazon.awssdk:eventbridge:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:eventbridge:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:eventbridge:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.27.19=compileClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.27.19=compileClasspath software.amazon.awssdk:http-auth-aws:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.27.19=compileClasspath software.amazon.awssdk:http-auth-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.27.19=compileClasspath software.amazon.awssdk:http-auth:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.27.19=compileClasspath software.amazon.awssdk:http-client-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.27.19=compileClasspath software.amazon.awssdk:identity-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.27.19=compileClasspath software.amazon.awssdk:json-utils:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.27.19=compileClasspath software.amazon.awssdk:metrics-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.27.23=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.27.19=compileClasspath software.amazon.awssdk:profiles:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.27.19=compileClasspath software.amazon.awssdk:protocol-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.27.19=compileClasspath software.amazon.awssdk:regions:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.27.19=compileClasspath software.amazon.awssdk:retries-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.27.19=compileClasspath software.amazon.awssdk:retries:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.27.19=compileClasspath software.amazon.awssdk:sdk-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sqs:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.27.19=compileClasspath software.amazon.awssdk:third-party-jackson-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.27.19=compileClasspath software.amazon.awssdk:utils:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile index f20f6210a5e..1beb23f3618 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile @@ -54,25 +54,25 @@ commons-logging:commons-logging:1.2=latestDepForkedTestRuntimeClasspath,latestDe de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.115.Final=testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.115.Final=testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.115.Final=testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.115.Final=testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.115.Final=testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.115.Final=testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.115.Final=testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.115.Final=testRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.115.Final=testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.115.Final=testRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs @@ -154,63 +154,63 @@ org.testcontainers:localstack:1.21.4=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.29.26=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:arns:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:arns:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:arns:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-xml-protocol:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-xml-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:crt-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:crt-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:crt-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.29.26=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:s3:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:s3:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:s3:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile index ef6ecf95cab..c6ca917d606 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile @@ -63,52 +63,52 @@ commons-logging:commons-logging:1.2=dsmForkedTestCompileClasspath,dsmForkedTestR de.thetaphi:forbiddenapis:3.10=compileClasspath,dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=dsmForkedTestRuntimeClasspath,dsmTestRuntimeClasspath,latestDepTestRuntimeClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-buffer:4.1.32.Final=testRuntimeClasspath io.netty:netty-buffer:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-buffer:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-codec-http2:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-codec-http2:4.1.32.Final=testRuntimeClasspath io.netty:netty-codec-http2:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-codec-http2:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-codec-http:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-codec-http:4.1.32.Final=testRuntimeClasspath io.netty:netty-codec-http:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-codec-http:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-codec:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-codec:4.1.32.Final=testRuntimeClasspath io.netty:netty-codec:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-codec:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-common:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-common:4.1.32.Final=testRuntimeClasspath io.netty:netty-common:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-common:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-handler:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-handler:4.1.32.Final=testRuntimeClasspath io.netty:netty-handler:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-handler:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-resolver:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-resolver:4.1.32.Final=testRuntimeClasspath io.netty:netty-resolver:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-resolver:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.32.Final=testRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.32.Final=testRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath io.netty:netty-transport:4.1.108.Final=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath io.netty:netty-transport:4.1.32.Final=testRuntimeClasspath io.netty:netty-transport:4.1.77.Final=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath io.netty:netty-transport:4.1.86.Final=latestDepTestRuntimeClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath @@ -209,13 +209,13 @@ software.amazon.awssdk:annotations:2.19.0=payloadTaggingForkedTestCompileClasspa software.amazon.awssdk:annotations:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:annotations:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:annotations:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:annotations:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:apache-client:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:apache-client:2.19.0=payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:apache-client:2.2.0=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingTestCompileClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingTestCompileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:apache-client:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.25.40=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:apigateway:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:apigateway:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apigateway:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath @@ -226,35 +226,35 @@ software.amazon.awssdk:auth:2.19.0=payloadTaggingForkedTestCompileClasspath,payl software.amazon.awssdk:auth:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:auth:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:auth:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:aws-cbor-protocol:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-cbor-protocol:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-core:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:aws-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-core:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.18.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:checksums:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:checksums:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:crt-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:dynamodb:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:dynamodb:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -264,57 +264,57 @@ software.amazon.awssdk:endpoints-spi:2.18.40=dsmForkedTestCompileClasspath,dsmFo software.amazon.awssdk:endpoints-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.7.4=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:http-client-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:json-utils:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:json-utils:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:json-utils:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:kinesis:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:kinesis:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:kinesis:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:kinesis:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:kinesis:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.19.0=payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.2.0=testRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.20.33=latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.25.40=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:profiles:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:profiles:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:profiles:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:profiles:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:profiles:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:protocol-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:rds:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:rds:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath @@ -322,9 +322,9 @@ software.amazon.awssdk:regions:2.19.0=payloadTaggingForkedTestCompileClasspath,p software.amazon.awssdk:regions:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:regions:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:regions:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:retries:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:s3:2.18.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:s3:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:s3:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -333,12 +333,12 @@ software.amazon.awssdk:sdk-core:2.19.0=payloadTaggingForkedTestCompileClasspath, software.amazon.awssdk:sdk-core:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sdk-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:sns:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:sns:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sns:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:sns:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:sns:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:sqs:2.18.40=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:sqs:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sqs:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -347,17 +347,17 @@ software.amazon.awssdk:third-party-jackson-core:2.18.40=dsmForkedTestCompileClas software.amazon.awssdk:third-party-jackson-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:utils:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:utils:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:utils:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:utils:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:utils:2.44.0=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon:flow:1.7=compileClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile index 25bd83ccb80..d5f8f0f762b 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile @@ -59,25 +59,25 @@ commons-io:commons-io:2.20.0=spotbugs commons-logging:commons-logging:1.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.53.Final=testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.53.Final=testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.53.Final=testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.53.Final=testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.53.Final=testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.53.Final=testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.53.Final=testRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.53.Final=testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.53.Final=testRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.53.Final=testRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -162,45 +162,45 @@ org.tabletest:tabletest-parser:1.2.0=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.15.35=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:checksums:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.15.35=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sfn:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sfn:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sfn:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile index 7e941e390f1..19427a65fd6 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile @@ -55,25 +55,25 @@ commons-logging:commons-logging:1.2=latestDepForkedTestRuntimeClasspath,latestDe de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.108.Final=testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.108.Final=testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.108.Final=testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.108.Final=testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.108.Final=testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.108.Final=testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.108.Final=testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.108.Final=testRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.108.Final=testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.108.Final=testRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs @@ -156,56 +156,56 @@ org.testcontainers:localstack:1.21.4=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.25.40=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.25.40=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.25.40=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sns:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sns:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sqs:2.25.40=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/datadog/profiling/enable-wallclock-profiling/gradle.lockfile b/dd-java-agent/instrumentation/datadog/profiling/enable-wallclock-profiling/gradle.lockfile index c2d375bf513..295fb8c6c0a 100644 --- a/dd-java-agent/instrumentation/datadog/profiling/enable-wallclock-profiling/gradle.lockfile +++ b/dd-java-agent/instrumentation/datadog/profiling/enable-wallclock-profiling/gradle.lockfile @@ -49,7 +49,7 @@ de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDep4TestCompileClasspath,l io.leangen.geantyref:geantyref:1.3.16=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-all:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.108.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-haproxy:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-http2:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -63,7 +63,7 @@ io.netty:netty-codec-stomp:4.1.108.Final=latestDep4TestCompileClasspath,latestDe io.netty:netty-codec-xml:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.1.108.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-handler-ssl-ocsp:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-handler:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -71,7 +71,7 @@ io.netty:netty-resolver-dns-classes-macos:4.1.108.Final=latestDep4TestCompileCla io.netty:netty-resolver-dns-native-macos:4.1.108.Final=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-resolver-dns:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-resolver:4.1.108.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-transport-classes-kqueue:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.108.Final=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath @@ -81,7 +81,7 @@ io.netty:netty-transport-rxtx:4.1.108.Final=latestDep4TestCompileClasspath,lates io.netty:netty-transport-sctp:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-transport-udt:4.1.108.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-transport:4.1.108.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs diff --git a/dd-java-agent/instrumentation/google-pubsub-1.116/gradle.lockfile b/dd-java-agent/instrumentation/google-pubsub-1.116/gradle.lockfile index 5122adb403e..d1fc5a90cec 100644 --- a/dd-java-agent/instrumentation/google-pubsub-1.116/gradle.lockfile +++ b/dd-java-agent/instrumentation/google-pubsub-1.116/gradle.lockfile @@ -29,22 +29,22 @@ com.github.spotbugs:spotbugs-annotations:4.9.8=compileClasspath,latestDepForkedT com.github.spotbugs:spotbugs:4.9.8=spotbugs com.github.stephenc.jcip:jcip-annotations:1.0-1=spotbugs com.google.android:annotations:4.1.1.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -com.google.api.grpc:proto-google-cloud-pubsub-v1:1.132.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.api.grpc:proto-google-cloud-pubsub-v1:1.132.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.api.grpc:proto-google-cloud-pubsub-v1:1.98.0=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.api.grpc:proto-google-common-protos:2.7.4=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.google.api.grpc:proto-google-common-protos:2.70.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.71.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.api.grpc:proto-google-iam-v1:1.2.6=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.google.api.grpc:proto-google-iam-v1:1.65.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.api.grpc:proto-google-iam-v1:1.66.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.api:api-common:2.1.4=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.google.api:api-common:2.62.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.api:api-common:2.63.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.api:gax-grpc:2.12.2=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.google.api:gax-grpc:2.79.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -com.google.api:gax-httpjson:2.79.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.api:gax-grpc:2.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.api:gax-httpjson:2.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.api:gax:2.12.2=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.google.api:gax:2.79.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -com.google.auth:google-auth-library-credentials:1.46.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.api:gax:2.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.auth:google-auth-library-credentials:1.47.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.auth:google-auth-library-credentials:1.5.3=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.google.auth:google-auth-library-oauth2-http:1.46.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.auth:google-auth-library-oauth2-http:1.47.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.auth:google-auth-library-oauth2-http:1.5.3=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.auto.service:auto-service-annotations:1.1.1=annotationProcessor,compileClasspath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,testAnnotationProcessor,testCompileClasspath com.google.auto.service:auto-service:1.1.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor @@ -52,15 +52,14 @@ com.google.auto.value:auto-value-annotations:1.11.0=latestDepForkedTestCompileCl com.google.auto.value:auto-value-annotations:1.9=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.auto:auto-common:1.2.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.cloud:google-cloud-pubsub:1.116.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.google.cloud:google-cloud-pubsub:1.150.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.cloud:google-cloud-pubsub:1.150.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,compileClasspath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath -com.google.code.gson:gson:2.12.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -com.google.code.gson:gson:2.13.2=spotbugs +com.google.code.gson:gson:2.13.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs com.google.code.gson:gson:2.9.0=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.errorprone:error_prone_annotations:2.11.0=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.errorprone:error_prone_annotations:2.41.0=spotbugs -com.google.errorprone:error_prone_annotations:2.45.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.48.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.guava:failureaccess:1.0.1=annotationProcessor,compileClasspath,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath com.google.guava:failureaccess:1.0.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.guava:guava:31.0.1-jre=compileClasspath,testCompileClasspath,testRuntimeClasspath @@ -93,39 +92,40 @@ commons-io:commons-io:2.20.0=spotbugs commons-logging:commons-logging:1.2=compileClasspath,testCompileClasspath,testRuntimeClasspath de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.grpc:grpc-alts:1.44.1=testRuntimeClasspath -io.grpc:grpc-alts:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-alts:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-api:1.44.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.grpc:grpc-api:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-api:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-auth:1.44.1=testRuntimeClasspath -io.grpc:grpc-auth:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-auth:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-context:1.44.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.grpc:grpc-context:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-context:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-core:1.44.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.grpc:grpc-core:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.grpc:grpc-googleapis:1.80.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-core:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-googleapis:1.81.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-grpclb:1.44.1=testRuntimeClasspath -io.grpc:grpc-inprocess:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-inprocess:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-netty-shaded:1.44.1=testRuntimeClasspath -io.grpc:grpc-netty-shaded:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-netty-shaded:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-protobuf-lite:1.44.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.grpc:grpc-protobuf-lite:1.80.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.81.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-protobuf:1.44.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.grpc:grpc-protobuf:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-protobuf:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-services:1.44.1=testRuntimeClasspath -io.grpc:grpc-services:1.80.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-services:1.81.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-stub:1.44.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.grpc:grpc-stub:1.80.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath -io.grpc:grpc-util:1.80.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-stub:1.81.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-util:1.81.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.grpc:grpc-xds:1.44.1=testRuntimeClasspath -io.grpc:grpc-xds:1.80.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.grpc:grpc-xds:1.81.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.opencensus:opencensus-api:0.31.0=compileClasspath,testCompileClasspath,testRuntimeClasspath io.opencensus:opencensus-api:0.31.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.opencensus:opencensus-contrib-http-util:0.31.0=compileClasspath,testCompileClasspath,testRuntimeClasspath io.opencensus:opencensus-contrib-http-util:0.31.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.opencensus:opencensus-proto:0.2.0=testRuntimeClasspath -io.opentelemetry:opentelemetry-api:1.51.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-context:1.51.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-api:1.57.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-common:1.57.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-context:1.57.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.perfmark:perfmark-api:0.23.0=testRuntimeClasspath io.perfmark:perfmark-api:0.27.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath @@ -165,7 +165,7 @@ org.codehaus.groovy:groovy-xml:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.25=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.21=testRuntimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.26=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.27=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath org.codenarc:CodeNarc:3.7.0=codenarc org.conscrypt:conscrypt-openjdk-uber:2.5.1=testRuntimeClasspath org.conscrypt:conscrypt-openjdk-uber:2.5.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-classloading-1.8/gradle.lockfile b/dd-java-agent/instrumentation/java/java-lang/java-lang-classloading-1.8/gradle.lockfile index f4ae2594c29..56f274684c2 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-classloading-1.8/gradle.lockfile +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-classloading-1.8/gradle.lockfile @@ -64,28 +64,28 @@ org.apache.commons:commons-text:1.14.0=spotbugs org.apache.felix:org.apache.felix.framework:6.0.2=classloadingOsgiTestCompileClasspath,classloadingOsgiTestRuntimeClasspath org.apache.logging.log4j:log4j-api:2.25.2=spotbugs org.apache.logging.log4j:log4j-core:2.25.2=spotbugs -org.apache.tomcat:tomcat-annotations-api:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-annotations-api:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-annotations-api:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-api:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-api:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-api:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-catalina:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-catalina:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-catalina:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-coyote:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-coyote:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-coyote:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-el-api:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-el-api:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-el-api:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-jaspic-api:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath -org.apache.tomcat:tomcat-jni:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-jaspic-api:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-jni:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-jni:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-jsp-api:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-jsp-api:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-jsp-api:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-juli:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-juli:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-juli:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-servlet-api:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-servlet-api:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-servlet-api:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-util-scan:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-util-scan:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-util-scan:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath -org.apache.tomcat:tomcat-util:11.0.21=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-util:11.0.22=classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatLatestDepTestRuntimeClasspath org.apache.tomcat:tomcat-util:8.0.14=classloadingTomcatTestCompileClasspath,classloadingTomcatTestRuntimeClasspath org.apiguardian:apiguardian-api:1.1.2=classloadingJbossTestCompileClasspath,classloadingJsr14TestCompileClasspath,classloadingOsgiTestCompileClasspath,classloadingTomcatLatestDepTestCompileClasspath,classloadingTomcatTestCompileClasspath,testCompileClasspath org.checkerframework:checker-qual:3.33.0=annotationProcessor,classloadingJbossTestAnnotationProcessor,classloadingJsr14TestAnnotationProcessor,classloadingOsgiTestAnnotationProcessor,classloadingTomcatLatestDepTestAnnotationProcessor,classloadingTomcatTestAnnotationProcessor,testAnnotationProcessor diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/gradle.lockfile b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/gradle.lockfile index e9cc9c8e343..f2f60f843d9 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/gradle.lockfile @@ -76,18 +76,18 @@ org.codehaus.groovy:groovy:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.25=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.codenarc:CodeNarc:3.7.0=codenarc org.dom4j:dom4j:2.2.0=spotbugs -org.eclipse.jetty.compression:jetty-compression-common:12.1.8=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.eclipse.jetty.compression:jetty-compression-gzip:12.1.8=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty.compression:jetty-compression-common:12.1.9=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty.compression:jetty-compression-gzip:12.1.9=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-alpn-client:12.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-alpn-client:12.1.8=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-alpn-client:12.1.9=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-client:12.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-client:12.1.8=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-client:12.1.9=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-http:12.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-http:12.1.8=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-http:12.1.9=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-io:12.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-io:12.1.8=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-io:12.1.9=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-util:12.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-util:12.1.8=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-util:12.1.9=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.gmetrics:GMetrics:2.1.0=codenarc org.hamcrest:hamcrest-core:1.3=latestDepTestRuntimeClasspath,testRuntimeClasspath org.hamcrest:hamcrest:3.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile index 99af171e106..42a393bd944 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile @@ -94,98 +94,98 @@ org.codehaus.groovy:groovy:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.25=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.codenarc:CodeNarc:3.7.0=codenarc org.dom4j:dom4j:2.2.0=spotbugs -org.eclipse.jetty.compression:jetty-compression-common:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath -org.eclipse.jetty.compression:jetty-compression-gzip:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.compression:jetty-compression-common:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.compression:jetty-compression-gzip:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-client:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-client:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-client:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-common:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-common:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-common:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-server:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-server:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-server:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-servlet:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-servlet:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-servlet:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10:jetty-ee10-annotations:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10:jetty-ee10-annotations:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10:jetty-ee10-annotations:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10:jetty-ee10-plus:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10:jetty-ee10-plus:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10:jetty-ee10-plus:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10:jetty-ee10-servlet:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10:jetty-ee10-servlet:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee10:jetty-ee10-webapp:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath -org.eclipse.jetty.ee10:jetty-ee10-webapp:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee10:jetty-ee10-webapp:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-client:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-client:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-client:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-common:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-common:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-common:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-server:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-server:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-javax-server:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-servlet:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-servlet:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-servlet:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8:jetty-ee8-annotations:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8:jetty-ee8-annotations:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8:jetty-ee8-annotations:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8:jetty-ee8-nested:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8:jetty-ee8-nested:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8:jetty-ee8-nested:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8:jetty-ee8-plus:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8:jetty-ee8-plus:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8:jetty-ee8-plus:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8:jetty-ee8-security:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8:jetty-ee8-security:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8:jetty-ee8-security:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8:jetty-ee8-servlet:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8:jetty-ee8-servlet:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8:jetty-ee8-servlet:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee8:jetty-ee8-webapp:12.0.0=ee8TestCompileClasspath,ee8TestRuntimeClasspath -org.eclipse.jetty.ee8:jetty-ee8-webapp:12.1.8=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee8:jetty-ee8-webapp:12.1.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-client:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-client:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-client:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-common:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-common:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-common:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-server:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-server:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-jakarta-server:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-servlet:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-servlet:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9.websocket:jetty-ee9-websocket-servlet:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9:jetty-ee9-annotations:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9:jetty-ee9-annotations:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9:jetty-ee9-annotations:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9:jetty-ee9-nested:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9:jetty-ee9-nested:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9:jetty-ee9-nested:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9:jetty-ee9-plus:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9:jetty-ee9-plus:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9:jetty-ee9-plus:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9:jetty-ee9-security:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9:jetty-ee9-security:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9:jetty-ee9-security:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9:jetty-ee9-servlet:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9:jetty-ee9-servlet:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9:jetty-ee9-servlet:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.ee9:jetty-ee9-webapp:12.0.0=ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.ee9:jetty-ee9-webapp:12.1.8=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath -org.eclipse.jetty.ee:jetty-ee-webapp:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee9:jetty-ee9-webapp:12.1.9=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.ee:jetty-ee-webapp:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath org.eclipse.jetty.toolchain:jetty-jakarta-websocket-api:2.0.0=ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath org.eclipse.jetty.toolchain:jetty-javax-websocket-api:1.1.2=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6=ee8TestCompileClasspath,ee8TestRuntimeClasspath org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.9=ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath org.eclipse.jetty.websocket:jetty-websocket-core-client:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.websocket:jetty-websocket-core-client:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.websocket:jetty-websocket-core-client:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.websocket:jetty-websocket-core-common:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.websocket:jetty-websocket-core-common:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.websocket:jetty-websocket-core-common:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty.websocket:jetty-websocket-core-server:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty.websocket:jetty-websocket-core-server:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty.websocket:jetty-websocket-core-server:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty:jetty-alpn-client:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty:jetty-alpn-client:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath -org.eclipse.jetty:jetty-annotations:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-alpn-client:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-annotations:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty:jetty-client:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty:jetty-client:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-client:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty:jetty-http:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-http:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-http:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-io:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-io:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-io:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-jndi:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty:jetty-jndi:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath -org.eclipse.jetty:jetty-plus:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-jndi:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-plus:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty:jetty-security:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty:jetty-security:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-security:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.eclipse.jetty:jetty-server:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-server:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-server:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-session:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,main_java17CompileClasspath -org.eclipse.jetty:jetty-session:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-session:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-util:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -org.eclipse.jetty:jetty-util:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-util:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.eclipse.jetty:jetty-xml:12.0.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath -org.eclipse.jetty:jetty-xml:12.1.8=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath +org.eclipse.jetty:jetty-xml:12.1.9=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath org.gmetrics:GMetrics:2.1.0=codenarc org.hamcrest:hamcrest-core:1.3=ee10ForkedTestRuntimeClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestRuntimeClasspath,ee10TestRuntimeClasspath,ee8LatestDepTestRuntimeClasspath,ee8TestRuntimeClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.hamcrest:hamcrest:3.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/gradle.lockfile b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/gradle.lockfile index 4f3f08f49a7..63959209eee 100644 --- a/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/micronaut/micronaut-http-server-netty/micronaut-http-server-netty-4.0/gradle.lockfile @@ -62,56 +62,56 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath io.micronaut:micronaut-aop:4.0.0=latestDepTestAnnotationProcessor,main_java17CompileClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-aop:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-aop:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-buffer-netty:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-buffer-netty:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-buffer-netty:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-context-propagation:4.0.0=testRuntimeClasspath -io.micronaut:micronaut-context-propagation:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-context-propagation:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-context:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-context:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-context:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-core-processor:4.0.0=latestDepTestAnnotationProcessor,testAnnotationProcessor io.micronaut:micronaut-core-reactive:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-core-reactive:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-core-reactive:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-core:4.0.0=latestDepTestAnnotationProcessor,main_java17CompileClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-core:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-core:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-http-netty:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-http-netty:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-http-netty:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-http-server-netty:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-http-server-netty:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-http-server-netty:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-http-server:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-http-server:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-http-server:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-http:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-http:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-http:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-inject-java:4.0.0=latestDepTestAnnotationProcessor,testAnnotationProcessor io.micronaut:micronaut-inject:4.0.0=latestDepTestAnnotationProcessor,main_java17CompileClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-inject:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-inject:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-jackson-core:4.0.0=testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-jackson-core:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-jackson-core:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-jackson-databind:4.0.0=testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-jackson-databind:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-jackson-databind:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-json-core:4.0.0=testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-json-core:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-json-core:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.micronaut:micronaut-router:4.0.0=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.micronaut:micronaut-router:4.10.22=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micronaut:micronaut-router:4.10.23=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-base:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-compression:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-compression:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.94.Final=main_java17CompileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor:reactor-core:3.5.7=latestDepTestCompileClasspath,testCompileClasspath,testRuntimeClasspath io.projectreactor:reactor-core:3.7.12=latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepTestRuntimeClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile b/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile index db74492a541..9c7c5af825e 100644 --- a/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile +++ b/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile @@ -522,7 +522,7 @@ org.mule.runtime:mule-extensions-mime-types:1.10.5=latestDepForkedTestCompileCla org.mule.runtime:mule-extensions-mime-types:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-extensions-soap-api:1.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-extensions-soap-api:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-extensions-soap-api:1.8.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-extensions-soap-api:1.8.13=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-features-api:4.10.5=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-jar-handling-utils:4.10.5=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-jar-handling-utils:4.5.0=testCompileClasspath,testRuntimeClasspath @@ -615,7 +615,7 @@ org.mule.runtime:mule-module-http-policy-api:1.6.0=mule46ForkedTestCompileClassp org.mule.runtime:mule-module-http-support:4.10.5=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-javaee:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-javaee:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-javaee:4.8.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-javaee:4.8.13=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-jpms-utils:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-jpms-utils:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-module-launcher:4.10.5=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath @@ -722,7 +722,7 @@ org.mule.sdk:mule-sdk-compatibility-api:1.0.0=latestDepForkedTestCompileClasspat org.mule.services:mule-netty-http-service:0.3.5=latestMuleServices org.mule.services:mule-service-http:1.12.5=latestMuleServices org.mule.services:mule-service-http:1.5.21=mule46Services,muleServices -org.mule.services:mule-service-scheduler:1.11.3=latestMuleServices +org.mule.services:mule-service-scheduler:1.11.4=latestMuleServices org.mule.services:mule-service-scheduler:1.5.0=mule46Services,muleServices org.mule.services:mule-service-weave:2.5.0=mule46Services,muleServices org.mule.services:mule-service-weave:2.8.1=latestMuleServices diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile b/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile index 1b6fba4f598..9145df7dcbf 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile +++ b/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile @@ -52,45 +52,45 @@ de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepTestCompileClasspath,la io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.0.Final=compileClasspath io.netty:netty-buffer:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-base:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-compression:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-compression:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.19.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-http2:4.1.0.Final=compileClasspath io.netty:netty-codec-http2:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.0.Final=compileClasspath io.netty:netty-codec-http:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-marshalling:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-protobuf:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-marshalling:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-protobuf:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-socks:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.0.Final=compileClasspath io.netty:netty-codec:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.0.Final=compileClasspath io.netty:netty-common:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.29.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-handler:4.1.0.Final=compileClasspath io.netty:netty-handler:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.19.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-resolver:4.1.0.Final=compileClasspath io.netty:netty-resolver:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-kqueue:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.29.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-transport-native-kqueue:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.0.Final=compileClasspath io.netty:netty-transport:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport:4.2.12.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor.netty:reactor-netty:0.8.0.RELEASE=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.projectreactor:reactor-core:3.2.0.RELEASE=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepTestRuntimeClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/netty/netty-buffer-4.0/gradle.lockfile b/dd-java-agent/instrumentation/netty/netty-buffer-4.0/gradle.lockfile index 662c8305010..1716caff56c 100644 --- a/dd-java-agent/instrumentation/netty/netty-buffer-4.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/netty/netty-buffer-4.0/gradle.lockfile @@ -48,10 +48,10 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.0.0.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath io.netty:netty-buffer:5.0.0.Alpha2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.0.0.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath io.netty:netty-common:5.0.0.Alpha2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/gradle.lockfile b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/gradle.lockfile index a73968fd079..05bf28c1c6e 100644 --- a/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/netty/netty-concurrent-4.0/gradle.lockfile @@ -48,7 +48,7 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-common:4.0.0.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs diff --git a/dd-java-agent/instrumentation/netty/netty-promise-4.0/gradle.lockfile b/dd-java-agent/instrumentation/netty/netty-promise-4.0/gradle.lockfile index b5e14b36b27..6803f27a73a 100644 --- a/dd-java-agent/instrumentation/netty/netty-promise-4.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/netty/netty-promise-4.0/gradle.lockfile @@ -48,7 +48,7 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-common:4.0.0.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath io.netty:netty-common:5.0.0.Alpha2=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDep4TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDep4TestCompileClasspath,latestDep4TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile index 6dad7e6e792..f4c04212179 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile @@ -50,14 +50,14 @@ com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=anno com.google.j2objc:j2objc-annotations:2.8=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.re2j:re2j:1.7=latestDepTestRuntimeClasspath,testRuntimeClasspath com.openai:openai-java-client-okhttp:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.openai:openai-java-client-okhttp:4.33.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.openai:openai-java-client-okhttp:4.35.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.openai:openai-java-core:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.openai:openai-java-core:4.33.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.openai:openai-java-core:4.35.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.openai:openai-java:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.openai:openai-java:4.33.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.openai:openai-java:4.35.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.squareup.moshi:moshi:1.11.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepTestCompileClasspath,testCompileClasspath -com.squareup.okhttp3:logging-interceptor:4.12.0=latestDepTestRuntimeClasspath,testRuntimeClasspath +com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath +com.squareup.okhttp3:logging-interceptor:4.12.0=testRuntimeClasspath com.squareup.okhttp3:okhttp:3.12.12=latestDepTestCompileClasspath,testCompileClasspath com.squareup.okhttp3:okhttp:4.12.0=latestDepTestRuntimeClasspath,testRuntimeClasspath com.squareup.okio:okio-jvm:3.6.0=latestDepTestRuntimeClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/OpenAiTest.groovy b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/OpenAiTest.groovy index b23ef80aeb3..9d3b8c4ec01 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/OpenAiTest.groovy +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/OpenAiTest.groovy @@ -42,6 +42,7 @@ abstract class OpenAiTest extends InstrumentationSpecification { // openai token - will use real openai backend and record request/responses to use later in the mock mode // empty or null - will use mockOpenAiBackend and read recorded request/responses static final String OPENAI_TOKEN = "" + static final String MOCK_OPENAI_TOKEN = "mock-openai-token" private static final Path RECORDS_DIR = Paths.get("src/test/resources/http-records") private static final String API_VERSION = "v1" @@ -94,7 +95,7 @@ abstract class OpenAiTest extends InstrumentationSpecification { OpenAIOkHttpClient.Builder b = OpenAIOkHttpClient.builder() openAiBaseApi = "${mockOpenAiBackend.address.toURL()}/$API_VERSION" b.baseUrl(openAiBaseApi) - b.credential(BearerTokenCredential.create("")) + b.credential(BearerTokenCredential.create(MOCK_OPENAI_TOKEN)) openAiClient = b.build() } else { // real openai backend, with custom httpClient to capture and save request/response records diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy index 1c11808cd33..51b770f704b 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/test/groovy/ResponseServiceTest.groovy @@ -353,7 +353,7 @@ class ResponseServiceTest extends OpenAiTest { } def errorClient = OpenAIOkHttpClient.builder() .baseUrl("${errorBackend.address.toURL()}/v1") - .credential(BearerTokenCredential.create("")) + .credential(BearerTokenCredential.create(MOCK_OPENAI_TOKEN)) .maxRetries(0) .build() diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.27/gradle.lockfile b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.27/gradle.lockfile index 39b762b75e0..65564ecb4c5 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.27/gradle.lockfile +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.27/gradle.lockfile @@ -49,10 +49,10 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath io.opentelemetry:opentelemetry-api:1.27.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-api:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-common:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-api:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-common:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.opentelemetry:opentelemetry-context:1.27.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-context:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-context:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile index cb5cb41cd02..2f2ca9ededc 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile @@ -50,10 +50,10 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath io.opentelemetry:opentelemetry-api:1.4.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-api:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-common:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-api:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-common:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.opentelemetry:opentelemetry-context:1.4.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-context:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-context:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/gradle.lockfile b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/gradle.lockfile index 9eedfa7fe07..3a222b09c38 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/gradle.lockfile +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/gradle.lockfile @@ -49,10 +49,10 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath io.opentelemetry:opentelemetry-api:1.47.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-api:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-common:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-api:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-common:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.opentelemetry:opentelemetry-context:1.47.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-context:1.61.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-context:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile index 59afdb2dc1a..daea1ed999f 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile @@ -73,14 +73,14 @@ org.apache.commons:commons-text:1.14.0=spotbugs org.apache.logging.log4j:log4j-api:2.25.2=spotbugs org.apache.logging.log4j:log4j-core:2.25.2=spotbugs org.apache.tomcat.embed:tomcat-embed-core:10.1.54=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-core:11.0.21=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-core:11.0.22=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-core:9.0.117=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-websocket:10.1.54=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-websocket:11.0.21=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-websocket:11.0.22=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-websocket:9.0.117=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath org.apache.tomcat:jakartaee-migration:1.0.10=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.tomcat:tomcat-annotations-api:10.1.54=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath -org.apache.tomcat:tomcat-annotations-api:11.0.21=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-annotations-api:11.0.22=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.tomcat:tomcat-annotations-api:9.0.117=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath org.apache.tomcat:tomcat-websocket-api:8.0.1=compileClasspath org.apache.tomcat:tomcat-websocket:8.0.1=compileClasspath diff --git a/dd-java-agent/instrumentation/twilio-0.0.1/gradle.lockfile b/dd-java-agent/instrumentation/twilio-0.0.1/gradle.lockfile index 35f43020508..2b08345e274 100644 --- a/dd-java-agent/instrumentation/twilio-0.0.1/gradle.lockfile +++ b/dd-java-agent/instrumentation/twilio-0.0.1/gradle.lockfile @@ -56,7 +56,7 @@ com.squareup.okhttp3:okhttp:3.12.12=latestDepTestCompileClasspath,latestDepTestR com.squareup.okio:okio:1.17.5=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.thoughtworks.qdox:qdox:1.12.1=codenarc com.twilio.sdk:twilio:0.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.twilio.sdk:twilio:12.0.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.twilio.sdk:twilio:12.1.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath commons-codec:commons-codec:1.15=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath commons-codec:commons-codec:1.9=compileClasspath,testCompileClasspath,testRuntimeClasspath commons-fileupload:commons-fileupload:1.5=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/gradle.lockfile b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/gradle.lockfile index 36b3c38562e..c5b77526c4e 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/gradle.lockfile @@ -56,38 +56,38 @@ commons-io:commons-io:2.11.0=latestDepForkedTestCompileClasspath,latestDepForked commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-socks:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler-proxy:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.vertx:vertx-core:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-core:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-core:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-mysql-client:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-mysql-client:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-mysql-client:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-sql-client:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-sql-client:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-sql-client:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs junit:junit:4.13.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/gradle.lockfile b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/gradle.lockfile index d826bb3df22..9bb7d483686 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/gradle.lockfile @@ -63,38 +63,38 @@ commons-io:commons-io:2.11.0=latestDepForkedTestCompileClasspath,latestDepForked commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-socks:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler-proxy:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.65.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.vertx:vertx-core:4.1.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-core:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-core:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-pg-client:4.1.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-pg-client:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-pg-client:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-sql-client:4.1.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-sql-client:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-sql-client:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs junit:junit:4.13.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/gradle.lockfile b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/gradle.lockfile index fcf9fe15bc0..7ef82f251e4 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/gradle.lockfile +++ b/dd-java-agent/instrumentation/vertx/vertx-redis-client/vertx-redis-client-3.9/gradle.lockfile @@ -66,41 +66,41 @@ commons-io:commons-io:2.11.0=latestDepForkedTestCompileClasspath,latestDepForked commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestRuntimeClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-codec-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-dns:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-http2:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-http:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-codec-socks:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-socks:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-handler-proxy:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-handler-proxy:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-handler:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-resolver-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-resolver-dns:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-resolver:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.48.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-transport:4.1.49.Final=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath io.reactivex.rxjava2:rxjava:2.2.12=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -108,21 +108,21 @@ io.reactivex.rxjava2:rxjava:2.2.21=latestDepForkedTestCompileClasspath,latestDep io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestRuntimeClasspath,testRuntimeClasspath io.vertx:vertx-codegen:3.9.0=testCompileClasspath,testRuntimeClasspath io.vertx:vertx-codegen:4.0.0=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.vertx:vertx-codegen:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-codegen:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-core:3.9.0=compileClasspath,testCompileClasspath,testRuntimeClasspath io.vertx:vertx-core:4.0.0=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.vertx:vertx-core:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-core:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-redis-client:3.9.0=compileClasspath,testCompileClasspath,testRuntimeClasspath io.vertx:vertx-redis-client:4.0.0=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.vertx:vertx-redis-client:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-redis-client:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-rx-gen:3.9.0=testCompileClasspath,testRuntimeClasspath io.vertx:vertx-rx-gen:4.0.0=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.vertx:vertx-rx-gen:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-rx-gen:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-rx-java2-gen:4.0.0=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.vertx:vertx-rx-java2-gen:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-rx-java2-gen:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-rx-java2:3.9.0=testCompileClasspath,testRuntimeClasspath io.vertx:vertx-rx-java2:4.0.0=redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath -io.vertx:vertx-rx-java2:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-rx-java2:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs junit:junit:4.13.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,redis4xForkedTestCompileClasspath,redis4xForkedTestRuntimeClasspath,redis4xTestCompileClasspath,redis4xTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/gradle.lockfile b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/gradle.lockfile index 132d43833dc..94478c52bfd 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/gradle.lockfile @@ -50,45 +50,45 @@ commons-io:commons-io:2.11.0=latestDepForkedTestCompileClasspath,latestDepForked commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-socks:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-common:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler-proxy:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport:4.1.132.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.1.133.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.49.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.vertx:vertx-auth-common:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-auth-common:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-auth-common:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-bridge-common:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-bridge-common:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-bridge-common:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-core:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-core:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.vertx:vertx-uri-template:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-core:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-uri-template:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-web-client:4.0.0=testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-web-client:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-web-client:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-web-common:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-web-common:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-web-common:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-web:4.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-web:4.5.26=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-web:4.5.27=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs junit:junit:4.13.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/gradle.lockfile b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/gradle.lockfile index cd9e6db887f..f2d152f9c97 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/gradle.lockfile @@ -52,53 +52,53 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-base:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-base:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-compression:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-compression:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-compression:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-dns:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-marshalling:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-protobuf:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-codec-socks:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-socks:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler-proxy:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.2.0.RC1=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.vertx:vertx-auth-common:5.0.0.CR3=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-auth-common:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-auth-common:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-bridge-common:5.0.0.CR3=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-bridge-common:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-bridge-common:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-core-logging:5.0.0.CR3=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-core-logging:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-core-logging:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-core:5.0.0.CR3=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-core:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-core:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-uri-template:5.0.0.CR3=testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-uri-template:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-uri-template:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-web-client:5.0.0.CR3=testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-web-client:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-web-client:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-web-common:5.0.0.CR3=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-web-common:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-web-common:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.vertx:vertx-web:5.0.0.CR3=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.vertx:vertx-web:5.0.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.vertx:vertx-web:5.0.12=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs junit:junit:4.13.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath diff --git a/dd-smoke-tests/appsec/springboot/gradle.lockfile b/dd-smoke-tests/appsec/springboot/gradle.lockfile index f52ae77cfd8..5deeb6f40b3 100644 --- a/dd-smoke-tests/appsec/springboot/gradle.lockfile +++ b/dd-smoke-tests/appsec/springboot/gradle.lockfile @@ -56,6 +56,9 @@ commons-lang:commons-lang:1.0.1=compileClasspath,runtimeClasspath,testCompileCla commons-logging:commons-logging:1.1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath de.thetaphi:forbiddenapis:3.10=compileClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath +io.opentracing:opentracing-api:0.32.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.opentracing:opentracing-noop:0.32.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.opentracing:opentracing-util:0.32.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath jakarta.annotation:jakarta.annotation-api:1.3.5=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs diff --git a/dd-smoke-tests/log-injection/gradle.lockfile b/dd-smoke-tests/log-injection/gradle.lockfile index 929fc2dd6f4..1c552e4df54 100644 --- a/dd-smoke-tests/log-injection/gradle.lockfile +++ b/dd-smoke-tests/log-injection/gradle.lockfile @@ -82,23 +82,23 @@ org.apache.ant:ant-junit:1.10.14=codenarc org.apache.bcel:bcel:6.11.0=spotbugs org.apache.commons:commons-lang3:3.19.0=spotbugs org.apache.commons:commons-text:1.14.0=spotbugs -org.apache.logging.log4j:log4j-1.2-api:2.25.4=log4j1Log4j2BridgeLatest +org.apache.logging.log4j:log4j-1.2-api:2.26.0=log4j1Log4j2BridgeLatest org.apache.logging.log4j:log4j-1.2-api:2.7=log4j1Log4j2Bridge org.apache.logging.log4j:log4j-api:2.14.0=compileClasspath org.apache.logging.log4j:log4j-api:2.25.2=spotbugs -org.apache.logging.log4j:log4j-api:2.25.4=jclLog4j2BridgeLatest,julLog4j2BridgeLatest,log4j1Log4j2BridgeLatest,log4j2Latest,log4j2Slf4jBridgeLatest,slf4jLog4j2BridgeLatest +org.apache.logging.log4j:log4j-api:2.26.0=jclLog4j2BridgeLatest,julLog4j2BridgeLatest,log4j1Log4j2BridgeLatest,log4j2Latest,log4j2Slf4jBridgeLatest,slf4jLog4j2BridgeLatest org.apache.logging.log4j:log4j-api:2.7=jclLog4j2Bridge,julLog4j2Bridge,log4j1Log4j2Bridge,log4j2,log4j2Slf4jBridge,slf4jLog4j2Bridge org.apache.logging.log4j:log4j-core:2.14.0=compileClasspath org.apache.logging.log4j:log4j-core:2.25.2=spotbugs -org.apache.logging.log4j:log4j-core:2.25.4=log4j2Latest,slf4jLog4j2BridgeLatest +org.apache.logging.log4j:log4j-core:2.26.0=log4j2Latest,slf4jLog4j2BridgeLatest org.apache.logging.log4j:log4j-core:2.7=log4j1Log4j2Bridge,log4j2 -org.apache.logging.log4j:log4j-jcl:2.25.4=jclLog4j2BridgeLatest +org.apache.logging.log4j:log4j-jcl:2.26.0=jclLog4j2BridgeLatest org.apache.logging.log4j:log4j-jcl:2.7=jclLog4j2Bridge -org.apache.logging.log4j:log4j-jul:2.25.4=julLog4j2BridgeLatest +org.apache.logging.log4j:log4j-jul:2.26.0=julLog4j2BridgeLatest org.apache.logging.log4j:log4j-jul:2.7=julLog4j2Bridge -org.apache.logging.log4j:log4j-slf4j-impl:2.25.4=slf4jLog4j2BridgeLatest +org.apache.logging.log4j:log4j-slf4j-impl:2.26.0=slf4jLog4j2BridgeLatest org.apache.logging.log4j:log4j-slf4j-impl:2.7=slf4jLog4j2Bridge -org.apache.logging.log4j:log4j-to-slf4j:2.25.4=log4j2Slf4jBridgeLatest +org.apache.logging.log4j:log4j-to-slf4j:2.26.0=log4j2Slf4jBridgeLatest org.apache.logging.log4j:log4j-to-slf4j:2.7=log4j2Slf4jBridge org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath org.checkerframework:checker-compat-qual:2.5.3=compileClasspath,floggerInterface,floggerJULBackend,floggerSlf4jBackend From 86eece6de8ca69e267073a1bf5da5bfae5649dd5 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Bempel Date: Fri, 15 May 2026 14:15:53 +0200 Subject: [PATCH 024/478] Migrate dd-trace-core groovy files to java part 6 (#11362) Migrate dd-trace-core groovy files to java part 6 we migrate 6 tests - PendingTracerBufferTest - PendingTraceStrictWriteTest - PendingTraceTest - PendingTraceTestBase - TraceInterceptorTest - TracingConfigPollerTest address comments Co-authored-by: devflow.devflow-routing-intake --- .../trace/common/writer/ListWriter.java | 4 + .../java/datadog/trace/core/CoreTracer.java | 5 + .../main/java/datadog/trace/core/DDSpan.java | 8 +- .../java/datadog/trace/core/PendingTrace.java | 23 +- .../trace/core/PendingTraceBuffer.java | 10 + .../trace/core/PendingTraceBufferTest.groovy | 629 ------------------ .../core/PendingTraceStrictWriteTest.groovy | 65 -- .../trace/core/PendingTraceTest.groovy | 177 ----- .../trace/core/PendingTraceTestBase.groovy | 267 -------- .../trace/core/TraceInterceptorTest.groovy | 221 ------ .../trace/core/TracingConfigPollerTest.groovy | 291 -------- .../trace/core/PendingTraceBufferTest.java | 608 +++++++++++++++++ .../core/PendingTraceStrictWriteTest.java | 63 ++ .../datadog/trace/core/PendingTraceTest.java | 221 ++++++ .../trace/core/PendingTraceTestBase.java | 285 ++++++++ .../trace/core/TraceInterceptorTest.java | 251 +++++++ .../trace/core/TracingConfigPollerTest.java | 301 +++++++++ 17 files changed, 1777 insertions(+), 1652 deletions(-) delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceStrictWriteTest.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy delete mode 100644 dd-trace-core/src/test/groovy/datadog/trace/core/TracingConfigPollerTest.groovy create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/TraceInterceptorTest.java create mode 100644 dd-trace-core/src/test/java/datadog/trace/core/TracingConfigPollerTest.java diff --git a/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java b/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java index dec3a8eb9e5..7c151dab5c4 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java @@ -33,6 +33,10 @@ public List firstTrace() { return get(0); } + public int getTraceCount() { + return traceCount.get(); + } + @SuppressFBWarnings("NN_NAKED_NOTIFY") @Override public void write(List trace) { diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index 6c5efb4a0d1..55db6962976 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -1391,6 +1391,11 @@ public String getSpanId(AgentSpan span) { return "0"; } + // @VisibleForTesting + TraceInterceptors getInterceptors() { + return interceptors; + } + @Override public boolean addTraceInterceptor(final TraceInterceptor interceptor) { TraceInterceptor conflictingInterceptor = interceptors.add(interceptor); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java index 6949ddf31de..2c62819e97a 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java @@ -125,7 +125,8 @@ static DDSpan create( * @param timestampMicro if greater than zero, use this time instead of the current time * @param context the context used for the span */ - private DDSpan( + // @VisibleForTesting + DDSpan( @Nonnull String instrumentationName, final long timestampMicro, @Nonnull DDSpanContext context, @@ -680,6 +681,11 @@ public long getDurationNano() { return durationNano; } + // @VisibleForTesting + void setDurationNano(long duration) { + DURATION_NANO_UPDATER.set(this, duration); + } + @Override public String getServiceName() { return context.getServiceName(); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java b/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java index 776c30870dc..5a0d1e992a4 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java @@ -139,7 +139,8 @@ public PendingTrace create(@Nonnull DDTraceId traceId, ConfigSnapshot traceConfi private static final AtomicLongFieldUpdater LAST_REFERENCED = AtomicLongFieldUpdater.newUpdater(PendingTrace.class, "lastReferenced"); - private PendingTrace( + // @VisibleForTesting + PendingTrace( @Nonnull CoreTracer tracer, @Nonnull DDTraceId traceId, @Nonnull PendingTraceBuffer pendingTraceBuffer, @@ -238,6 +239,26 @@ int getPendingReferenceCount() { return pendingReferenceCount; } + // @VisibleForTesting + PendingTraceBuffer getPendingTraceBuffer() { + return pendingTraceBuffer; + } + + // @VisibleForTesting + DDTraceId getTraceId() { + return traceId; + } + + // @VisibleForTesting + boolean isRootSpanWritten() { + return rootSpanWritten; + } + + // @VisibleForTesting + int getIsEnqueued() { + return isEnqueued; + } + boolean empty() { return 0 >= COMPLETED_SPAN_COUNT.get(this) + PENDING_REFERENCE_COUNT.get(this); } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/PendingTraceBuffer.java b/dd-trace-core/src/main/java/datadog/trace/core/PendingTraceBuffer.java index ad89c996d90..9cd7f73eb2e 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/PendingTraceBuffer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/PendingTraceBuffer.java @@ -308,6 +308,16 @@ public DelayingPendingTraceBuffer( LongRunningTracesTracker getRunningTracesTracker() { return runningTracesTracker; } + + // @VisibleForTesting + Thread getWorker() { + return worker; + } + + // @VisibleForTesting + MessagePassingBlockingQueue getQueue() { + return queue; + } } static class DiscardingPendingTraceBuffer extends PendingTraceBuffer { diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy deleted file mode 100644 index 62738a2ff0a..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy +++ /dev/null @@ -1,629 +0,0 @@ -package datadog.trace.core - -import datadog.environment.JavaVirtualMachine -import datadog.metrics.api.Monitoring -import datadog.trace.api.Config -import datadog.trace.SamplingPriorityMetadataChecker -import datadog.trace.api.DDSpanId -import datadog.trace.api.DDTraceId -import datadog.trace.api.flare.TracerFlare -import datadog.trace.api.time.SystemTimeSource -import datadog.trace.api.datastreams.NoopPathwayContext -import datadog.trace.context.TraceScope -import datadog.trace.core.monitor.HealthMetrics -import datadog.trace.core.propagation.PropagationTags -import datadog.trace.core.scopemanager.ContinuableScopeManager -import datadog.trace.test.util.DDSpecification -import groovy.json.JsonSlurper -import spock.lang.IgnoreIf -import spock.lang.Subject -import spock.lang.Timeout -import spock.util.concurrent.PollingConditions -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit -import java.util.concurrent.atomic.AtomicInteger -import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream - -import static datadog.trace.api.sampling.PrioritySampling.UNSET -import static datadog.trace.api.sampling.PrioritySampling.USER_KEEP -import static datadog.trace.core.PendingTraceBuffer.BUFFER_SIZE -import static java.nio.charset.StandardCharsets.UTF_8 - -@IgnoreIf(reason = """ -Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly -extract method parameters without args, when the code is compiled on a later JDK (targeting 8). -This can manifest when creating mocks. -""", value = { - JavaVirtualMachine.isOracleJDK8() -}) -@Timeout(5) -class PendingTraceBufferTest extends DDSpecification { - @Subject - def buffer = PendingTraceBuffer.delaying(SystemTimeSource.INSTANCE, Mock(Config), null, null) - def bufferSpy = Spy(buffer) - - def tracer = Mock(CoreTracer) - def traceConfig = Mock(CoreTracer.ConfigSnapshot) - def scopeManager = new ContinuableScopeManager(10, true) - def factory = new PendingTrace.Factory(tracer, bufferSpy, SystemTimeSource.INSTANCE, false, HealthMetrics.NO_OP) - List continuations = [] - - def setup() { - tracer.captureTraceConfig() >> traceConfig - traceConfig.getServiceMapping() >> [:] - } - - def cleanup() { - buffer.close() - buffer.worker.join(1000) - } - - def "test buffer lifecycle"() { - expect: - !buffer.worker.alive - - when: - buffer.start() - - then: - buffer.worker.alive - buffer.worker.daemon - - when: "start called again" - buffer.start() - - then: - thrown IllegalThreadStateException - buffer.worker.alive - buffer.worker.daemon - - when: - buffer.close() - buffer.worker.join(1000) - - then: - !buffer.worker.alive - } - - def "continuation buffers root"() { - setup: - def trace = factory.create(DDTraceId.ONE) - def span = newSpanOf(trace) - - expect: - !trace.rootSpanWritten - - when: - addContinuation(span) - span.finish() // This should enqueue - - then: - continuations.size() == 1 - trace.pendingReferenceCount == 1 - 1 * bufferSpy.longRunningSpansEnabled() - 1 * bufferSpy.enqueue(trace) - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - 1 * tracer.getTimeWithNanoTicks(_) - 1 * tracer.onRootSpanPublished(span) - 0 * _ - - when: - continuations[0].cancel() - - then: - trace.pendingReferenceCount == 0 - 1 * tracer.write({ it.size() == 1 }) - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - _ * tracer.getPartialFlushMinSpans() >> 10 - 0 * _ - } - - def "unfinished child buffers root"() { - setup: - def trace = factory.create(DDTraceId.ONE) - def parent = newSpanOf(trace) - def child = newSpanOf(parent) - - expect: - !trace.rootSpanWritten - - when: - parent.finish() // This should enqueue - - then: - trace.size() == 1 - trace.pendingReferenceCount == 1 - 1 * bufferSpy.enqueue(trace) - _ * bufferSpy.longRunningSpansEnabled() - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - 1 * tracer.getTimeWithNanoTicks(_) - 1 * tracer.onRootSpanPublished(parent) - 0 * _ - - when: - child.finish() - - then: - trace.size() == 0 - trace.pendingReferenceCount == 0 - _ * bufferSpy.longRunningSpansEnabled() - 1 * tracer.write({ it.size() == 2 }) - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - 1 * tracer.getTimeWithNanoTicks(_) - 0 * _ - } - - def "priority sampling is always sent"() { - setup: - def parent = addContinuation(newSpanOf(factory.create(DDTraceId.ONE), USER_KEEP, 0)) - def metadataChecker = new SamplingPriorityMetadataChecker() - - when: "Fill the buffer - Only children - Priority taken from root" - - for (int i = 0; i < 11; i++) { - newSpanOf(parent).finish() - } - - then: - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - _ * traceConfig.getServiceMapping() >> [:] - _ * tracer.getTimeWithNanoTicks(_) - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - _ * bufferSpy.longRunningSpansEnabled() - 1 * tracer.write(_) >> { List> spans -> - spans.first().first().processTagsAndBaggage(metadataChecker) - } - 0 * _ - metadataChecker.hasSamplingPriority - } - - def "buffer full yields immediate write"() { - setup: - // Don't start the buffer thread - - when: "Fill the buffer" - for (i in 1..buffer.queue.capacity()) { - addContinuation(newSpanOf(factory.create(DDTraceId.ONE))).finish() - } - - then: - _ * tracer.captureTraceConfig() >> traceConfig - buffer.queue.size() == BUFFER_SIZE - buffer.queue.capacity() * bufferSpy.enqueue(_) - _ * bufferSpy.longRunningSpansEnabled() - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - _ * traceConfig.getServiceMapping() >> [:] - _ * tracer.getTimeWithNanoTicks(_) - buffer.queue.capacity() * tracer.onRootSpanPublished(_) - 0 * _ - - when: - def pendingTrace = factory.create(DDTraceId.ONE) - addContinuation(newSpanOf(pendingTrace)).finish() - - then: - 1 * tracer.captureTraceConfig() >> traceConfig - 1 * bufferSpy.enqueue(_) - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - _ * bufferSpy.longRunningSpansEnabled() - 1 * tracer.write({ it.size() == 1 }) - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - _ * traceConfig.getServiceMapping() >> [:] - 2 * tracer.getTimeWithNanoTicks(_) - 1 * tracer.onRootSpanPublished(_) - 0 * _ - pendingTrace.isEnqueued == 0 - } - - def "long-running trace: buffer full does not trigger write"() { - setup: - // Don't start the buffer thread - - when: "Fill the buffer" - for (i in 1..buffer.queue.capacity()) { - addContinuation(newSpanOf(factory.create(DDTraceId.ONE))).finish() - } - - then: - _ * tracer.captureTraceConfig() >> traceConfig - buffer.queue.size() == BUFFER_SIZE - buffer.queue.capacity() * bufferSpy.enqueue(_) - _ * bufferSpy.longRunningSpansEnabled() - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - _ * traceConfig.getServiceMapping() >> [:] - _ * tracer.getTimeWithNanoTicks(_) - buffer.queue.capacity() * tracer.onRootSpanPublished(_) - 0 * _ - - when: - def pendingTrace = factory.create(DDTraceId.ONE) - pendingTrace.longRunningTrackedState = LongRunningTracesTracker.TO_TRACK - addContinuation(newSpanOf(pendingTrace)).finish() - - then: - 1 * tracer.captureTraceConfig() >> traceConfig - 1 * bufferSpy.enqueue(_) - _ * bufferSpy.longRunningSpansEnabled() - 0 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - _ * bufferSpy.longRunningSpansEnabled() - 0 * tracer.write({ it.size() == 1 }) - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - _ * traceConfig.getServiceMapping() >> [:] - _ * tracer.getTimeWithNanoTicks(_) - 1 * tracer.onRootSpanPublished(_) - 0 * _ - - pendingTrace.isEnqueued == 0 - } - - def "continuation allows adding after root finished"() { - setup: - def trace = factory.create(DDTraceId.ONE) - def parent = addContinuation(newSpanOf(trace)) - TraceScope.Continuation continuation = continuations[0] - - expect: - continuations.size() == 1 - - when: - parent.finish() // This should enqueue - - then: - trace.size() == 1 - trace.pendingReferenceCount == 1 - !trace.rootSpanWritten - _ * bufferSpy.longRunningSpansEnabled() - 1 * bufferSpy.enqueue(trace) - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - 1 * tracer.getTimeWithNanoTicks(_) - 1 * tracer.onRootSpanPublished(parent) - 0 * _ - - when: - def child = newSpanOf(parent) - child.finish() - - then: - trace.size() == 2 - trace.pendingReferenceCount == 1 - !trace.rootSpanWritten - - when: - // Don't start the buffer thread here. When the continuation is cancelled, - // pendingReferenceCount drops to 0 with rootSpanWritten still false, so - // write() is called synchronously on this thread. Starting the buffer - // would introduce a race where the worker thread could process the - // enqueued trace before continuation.cancel(), causing extra mock - // invocations (TooManyInvocationsError). - continuation.cancel() - - then: - trace.size() == 0 - trace.pendingReferenceCount == 0 - trace.rootSpanWritten - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - 1 * tracer.write({ it.size() == 2 }) - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - 0 * _ - } - - def "late arrival span requeues pending trace"() { - setup: - buffer.start() - def parentLatch = new CountDownLatch(1) - def childLatch = new CountDownLatch(1) - - def trace = factory.create(DDTraceId.ONE) - def parent = newSpanOf(trace) - - when: - parent.finish() // This should enqueue - parentLatch.await() - - then: - trace.size() == 0 - trace.pendingReferenceCount == 0 - trace.rootSpanWritten - _ * bufferSpy.longRunningSpansEnabled() - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - 1 * tracer.write({ it.size() == 1 }) >> { - parentLatch.countDown() - } - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - 1 * tracer.getTimeWithNanoTicks(_) - 1 * tracer.onRootSpanPublished(parent) - 0 * _ - - when: - def child = newSpanOf(parent) - child.finish() - childLatch.await() - - then: - trace.size() == 0 - trace.pendingReferenceCount == 0 - trace.rootSpanWritten - 1 * bufferSpy.enqueue(trace) - _ * bufferSpy.longRunningSpansEnabled() - _ * tracer.getPartialFlushMinSpans() >> 10 - _ * tracer.getTagInterceptor() - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - 1 * tracer.write({ it.size() == 1 }) >> { - childLatch.countDown() - } - _ * traceConfig.getServiceMapping() >> [:] - _ * tracer.getTimeWithNanoTicks(_) - _ * bufferSpy.longRunningSpansEnabled() - 0 * _ - } - - def "flush clears the buffer"() { - setup: - buffer.start() - def counter = new AtomicInteger(0) - // Create a fake element that newer gets written - def element = new PendingTraceBuffer.Element() { - @Override - long oldestFinishedTime() { - return TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()) - } - - @Override - boolean lastReferencedNanosAgo(long nanos) { - return false - } - - @Override - void write() { - counter.incrementAndGet() - } - - @Override - DDSpan getRootSpan() { - return null - } - - @Override - boolean setEnqueued(boolean enqueued) { - return true - } - @Override - boolean writeOnBufferFull() { - return true - } - } - - when: - buffer.enqueue(element) - buffer.enqueue(element) - buffer.enqueue(element) - - then: - counter.get() == 0 - - when: - buffer.flush() - - then: - counter.get() == 3 - } - - def "the same pending trace is not enqueued multiple times"() { - setup: - // Don't start the buffer thread - - when: "finish the root span" - def pendingTrace = factory.create(DDTraceId.ONE) - def span = newSpanOf(pendingTrace) - span.finish() - - then: - 1 * tracer.captureTraceConfig() >> traceConfig - pendingTrace.rootSpanWritten - pendingTrace.isEnqueued == 0 - buffer.queue.size() == 0 - _ * bufferSpy.longRunningSpansEnabled() - 1 * tracer.writeTimer() >> Monitoring.DISABLED.newTimer("") - 1 * tracer.write({ it.size() == 1 }) - 1 * tracer.getPartialFlushMinSpans() >> 10000 - _ * tracer.getTagInterceptor() - 1 * traceConfig.getServiceMapping() >> [:] - 2 * tracer.getTimeWithNanoTicks(_) - 1 * tracer.onRootSpanPublished(_) - 0 * _ - - when: "fail to fill the buffer" - for (i in 1..buffer.queue.capacity()) { - addContinuation(newSpanOf(span)).finish() - } - - then: - pendingTrace.isEnqueued == 1 - buffer.queue.size() == 1 - buffer.queue.capacity() * bufferSpy.enqueue(_) - _ * bufferSpy.longRunningSpansEnabled() - _ * tracer.getPartialFlushMinSpans() >> 10000 - _ * tracer.getTagInterceptor() - _ * traceConfig.getServiceMapping() >> [:] - _ * tracer.getTimeWithNanoTicks(_) - 0 * _ - - when: "process the buffer" - buffer.start() - - then: - new PollingConditions(timeout: 3, initialDelay: 0, delay: 0.5, factor: 1).eventually { - assert pendingTrace.isEnqueued == 0 - } - } - - def "testing tracer flare dump with multiple traces"() { - setup: - TracerFlare.addReporter {} // exercises default methods - def dumpReporter = Mock(PendingTraceBuffer.TracerDump) - TracerFlare.addReporter(dumpReporter) - def trace1 = factory.create(DDTraceId.ONE) - def parent1 = newSpanOf(trace1, UNSET, System.currentTimeMillis() * 1000) - def child1 = newSpanOf(parent1) - def trace2 = factory.create(DDTraceId.from(2)) - def parent2 = newSpanOf(trace2, UNSET, System.currentTimeMillis() * 2000) - def child2 = newSpanOf(parent2) - - when: "first flare dump with two traces" - parent1.finish() - parent2.finish() - buffer.start() - def entries1 = buildAndExtractZip() - - then: - 1 * dumpReporter.prepareForFlare() - 1 * dumpReporter.addReportToFlare(_) - 1 * dumpReporter.cleanupAfterFlare() - entries1.size() == 1 - def pendingTraceText1 = entries1["pending_traces.txt"] as String - pendingTraceText1.startsWith('[{"service":"fakeService","name":"fakeOperation","resource":"fakeResource","trace_id":1,"span_id":1,"parent_id":0') // Rest of dump is timestamp specific - - def parsedTraces1 = pendingTraceText1.split('\n').collect { new JsonSlurper().parseText(it) }.flatten() - parsedTraces1.size() == 2 - parsedTraces1[0]["trace_id"] == 1 //Asserting both traces exist - parsedTraces1[1]["trace_id"] == 2 - parsedTraces1[0]["start"] < parsedTraces1[1]["start"] //Asserting the dump has the oldest trace first - - // New pending traces are needed here because generating the first flare takes long enough that the - // earlier pending traces are flushed (within 500ms). - when: "second flare dump with new pending traces" - // Finish the first set of traces - child1.finish() - child2.finish() - // Create new pending traces - def trace3 = factory.create(DDTraceId.from(3)) - def parent3 = newSpanOf(trace3, UNSET, System.currentTimeMillis() * 3000) - def child3 = newSpanOf(parent3) - def trace4 = factory.create(DDTraceId.from(4)) - def parent4 = newSpanOf(trace4, UNSET, System.currentTimeMillis() * 4000) - def child4 = newSpanOf(parent4) - parent3.finish() - parent4.finish() - def entries2 = buildAndExtractZip() - - then: - 1 * dumpReporter.prepareForFlare() - 1 * dumpReporter.addReportToFlare(_) - 1 * dumpReporter.cleanupAfterFlare() - entries2.size() == 1 - def pendingTraceText2 = entries2["pending_traces.txt"] as String - def parsedTraces2 = pendingTraceText2.split('\n').collect { new JsonSlurper().parseText(it) }.flatten() - parsedTraces2.size() == 2 - - then: - child3.finish() - child4.finish() - - then: - trace1.size() == 0 - trace1.pendingReferenceCount == 0 - trace2.size() == 0 - trace2.pendingReferenceCount == 0 - trace3.size() == 0 - trace3.pendingReferenceCount == 0 - trace4.size() == 0 - trace4.pendingReferenceCount == 0 - } - - - def addContinuation(DDSpan span) { - def scope = scopeManager.activateSpan(span) - continuations << scopeManager.captureSpan(span) - scope.close() - return span - } - - static DDSpan newSpanOf(PendingTrace trace) { - return newSpanOf(trace, UNSET, 0) - } - - static DDSpan newSpanOf(PendingTrace trace, int samplingPriority, long timestampMicro) { - def context = new DDSpanContext( - trace.traceId, - 1, - DDSpanId.ZERO, - null, - "fakeService", - "fakeOperation", - "fakeResource", - samplingPriority, - null, - Collections.emptyMap(), - false, - "fakeType", - 0, - trace, - null, - null, - NoopPathwayContext.INSTANCE, - false, - PropagationTags.factory().empty()) - return DDSpan.create("test", timestampMicro, context, null) - } - - static DDSpan newSpanOf(DDSpan parent) { - def traceCollector = parent.context().traceCollector - def context = new DDSpanContext( - traceCollector.traceId, - 2, - parent.context().spanId, - null, - "fakeService", - "fakeOperation", - "fakeResource", - UNSET, - null, - Collections.emptyMap(), - false, - "fakeType", - 0, - traceCollector, - null, - null, - NoopPathwayContext.INSTANCE, - false, - PropagationTags.factory().empty()) - return DDSpan.create("test", 0, context, null) - } - - def buildAndExtractZip() { - TracerFlare.prepareForFlare() - def out = new ByteArrayOutputStream() - try (ZipOutputStream zip = new ZipOutputStream(out)) { - TracerFlare.addReportsToFlare(zip) - } finally { - TracerFlare.cleanupAfterFlare() - } - - def entries = [:] - - def zip = new ZipInputStream(new ByteArrayInputStream(out.toByteArray())) - def entry - while (entry = zip.nextEntry) { - def bytes = new ByteArrayOutputStream() - bytes << zip - entries.put(entry.name, entry.name.endsWith(".bin") - ? bytes.toByteArray() : new String(bytes.toByteArray(), UTF_8)) - } - - return entries - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceStrictWriteTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceStrictWriteTest.groovy deleted file mode 100644 index 0a51d6f2ead..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceStrictWriteTest.groovy +++ /dev/null @@ -1,65 +0,0 @@ -package datadog.trace.core - -class PendingTraceStrictWriteTest extends PendingTraceTestBase { - - def "trace is not reported until unfinished continuation is closed"() { - when: - def scope = tracer.activateSpan(rootSpan) - def continuation = tracer.captureActiveSpan() - scope.close() - rootSpan.finish() - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.asList() == [rootSpan] - writer == [] - - when: "root span buffer delay expires" - writer.waitForTracesMax(1, 1) - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.asList() == [rootSpan] - writer == [] - writer.traceCount.get() == 0 - - when: "continuation is closed" - continuation.cancel() - - then: - traceCollector.pendingReferenceCount == 0 - traceCollector.spans.isEmpty() - writer == [[rootSpan]] - writer.traceCount.get() == 1 - } - - def "negative reference count throws an exception"() { - when: - def scope = tracer.activateSpan(rootSpan) - def continuation = tracer.captureActiveSpan() - scope.close() - rootSpan.finish() - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.asList() == [rootSpan] - writer == [] - - when: "continuation is finished the first time" - continuation.cancel() - - then: - traceCollector.pendingReferenceCount == 0 - traceCollector.spans.isEmpty() - writer == [[rootSpan]] - writer.traceCount.get() == 1 - - when: "continuation is finished the second time" - // Yes this should be guarded by the used flag in the continuation, - // so remove it anyway to trigger the exception - traceCollector.removeContinuation(continuation) - - then: - thrown IllegalStateException - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy deleted file mode 100644 index 20ccaaeb680..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy +++ /dev/null @@ -1,177 +0,0 @@ -package datadog.trace.core - -import datadog.environment.JavaVirtualMachine -import datadog.trace.api.DDTraceId -import datadog.trace.api.sampling.PrioritySampling -import datadog.trace.api.time.TimeSource -import datadog.trace.api.datastreams.NoopPathwayContext -import datadog.trace.core.monitor.HealthMetrics -import datadog.trace.core.propagation.PropagationTags -import spock.lang.IgnoreIf -import spock.lang.Timeout - -import java.util.concurrent.TimeUnit - -@IgnoreIf(reason = """ -Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly -extract method parameters without args, when the code is compiled on a later JDK (targeting 8). -This can manifest when creating mocks. -""", value = { - JavaVirtualMachine.isOracleJDK8() -}) -class PendingTraceTest extends PendingTraceTestBase { - - @Override - protected boolean useStrictTraceWrites() { - // This tests the behavior of the relaxed pending trace implementation - return false - } - protected DDSpan createSimpleSpan(PendingTrace trace){ - return createSimpleSpanWithID(trace,1) - } - - protected DDSpan createSimpleSpanWithID(PendingTrace trace, long id){ - return new DDSpan("test", 0L, new DDSpanContext( - DDTraceId.from(1), - id, - 0, - null, - "", - "", - "", - PrioritySampling.UNSET, - "", - [:], - false, - "", - 0, - trace, - null, - null, - NoopPathwayContext.INSTANCE, - false, - PropagationTags.factory().empty()), - null) - } - - @Timeout(value = 60, unit = TimeUnit.SECONDS) - def "trace is still reported when unfinished continuation discarded"() { - when: - def scope = tracer.activateSpan(rootSpan) - tracer.captureActiveSpan() - scope.close() - rootSpan.finish() - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.asList() == [rootSpan] - writer == [] - - when: "root span buffer delay expires" - writer.waitForTraces(1) - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.isEmpty() - writer == [[rootSpan]] - writer.traceCount.get() == 1 - } - def "verify healthmetrics called"() { - setup: - def tracer = Stub(CoreTracer) - def traceConfig = Stub(CoreTracer.ConfigSnapshot) - def buffer = Stub(PendingTraceBuffer) - def healthMetrics = Mock(HealthMetrics) - tracer.captureTraceConfig() >> traceConfig - traceConfig.getServiceMapping() >> [:] - PendingTrace trace = new PendingTrace(tracer, DDTraceId.from(0), buffer, Mock(TimeSource), null, false, healthMetrics) - - when: - rootSpan = createSimpleSpan(trace) - trace.registerSpan(rootSpan) - - then: - 1 * healthMetrics.onCreateSpan() - - when: - rootSpan.finish() - - then: - 1 * healthMetrics.onCreateTrace() - } - - def "write when writeRunningSpans is disabled: only completed spans are written"() { - setup: - def tracer = Stub(CoreTracer) - def traceConfig = Stub(CoreTracer.ConfigSnapshot) - def buffer = Stub(PendingTraceBuffer) - def healthMetrics = Stub(HealthMetrics) - tracer.captureTraceConfig() >> traceConfig - traceConfig.getServiceMapping() >> [:] - PendingTrace trace = new PendingTrace(tracer, DDTraceId.from(0), buffer, Mock(TimeSource), null, false, healthMetrics) - buffer.longRunningSpansEnabled() >> true - - def span1 = createSimpleSpanWithID(trace,39) - span1.durationNano = 31 - span1.samplingPriority = PrioritySampling.USER_KEEP - trace.registerSpan(span1) - - def unfinishedSpan = createSimpleSpanWithID(trace, 191) - trace.registerSpan(unfinishedSpan) - - def span2 = createSimpleSpanWithID(trace, 9999) - span2.durationNano = 9191 - trace.registerSpan(span2) - def traceToWrite = new ArrayList<>(0) - - when: - def completedSpans = trace.enqueueSpansToWrite(traceToWrite, false) - - then: - completedSpans == 2 - traceToWrite.size() == 2 - traceToWrite.containsAll([span1, span2]) - trace.spans.size() == 1 - trace.spans.pop() == unfinishedSpan - } - - def "write when writeRunningSpans is enabled: complete and running spans are written"() { - setup: - def tracer = Stub(CoreTracer) - def traceConfig = Stub(CoreTracer.ConfigSnapshot) - def buffer = Stub(PendingTraceBuffer) - def healthMetrics = Stub(HealthMetrics) - tracer.captureTraceConfig() >> traceConfig - traceConfig.getServiceMapping() >> [:] - PendingTrace trace = new PendingTrace(tracer, DDTraceId.from(0), buffer, Mock(TimeSource), null, false, healthMetrics) - buffer.longRunningSpansEnabled() >> true - - def span1 = createSimpleSpanWithID(trace,39) - span1.durationNano = 31 - span1.samplingPriority = PrioritySampling.USER_KEEP - trace.registerSpan(span1) - - def unfinishedSpan = createSimpleSpanWithID(trace, 191) - trace.registerSpan(unfinishedSpan) - - def span2 = createSimpleSpanWithID(trace, 9999) - span2.setServiceName("9191") - span2.durationNano = 9191 - trace.registerSpan(span2) - - def unfinishedSpan2 = createSimpleSpanWithID(trace, 77771) - trace.registerSpan(unfinishedSpan2) - - def traceToWrite = new ArrayList<>(0) - - when: - def completedSpans = trace.enqueueSpansToWrite(traceToWrite, true) - - then: - completedSpans == 2 - traceToWrite.size() == 4 - traceToWrite.containsAll([span1, span2, unfinishedSpan, unfinishedSpan2]) - trace.spans.size() == 2 - trace.spans.containsAll([unfinishedSpan, unfinishedSpan2]) - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy deleted file mode 100644 index 14926e83919..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTestBase.groovy +++ /dev/null @@ -1,267 +0,0 @@ -package datadog.trace.core - -import ch.qos.logback.classic.Level -import ch.qos.logback.classic.Logger -import datadog.trace.common.writer.ListWriter -import datadog.trace.core.test.DDCoreSpecification -import org.slf4j.LoggerFactory - -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit - -import static datadog.trace.api.config.TracerConfig.PARTIAL_FLUSH_MIN_SPANS - -abstract class PendingTraceTestBase extends DDCoreSpecification { - - def writer = new ListWriter() - def tracer = tracerBuilder().writer(writer).build() - - DDSpan rootSpan = tracer.buildSpan("datadog", "fakeOperation").start() - PendingTrace traceCollector = rootSpan.context().traceCollector - - def setup() { - assert traceCollector.size() == 0 - assert traceCollector.pendingReferenceCount == 1 - assert traceCollector.rootSpanWritten == false - } - - def cleanup() { - tracer?.close() - } - - def "single span gets added to trace and written when finished"() { - when: - rootSpan.finish() - writer.waitForTraces(1) - - then: - traceCollector.spans.isEmpty() - writer == [[rootSpan]] - writer.traceCount.get() == 1 - } - - def "child finishes before parent"() { - when: - def child = tracer.buildSpan("datadog", "child").asChildOf(rootSpan).start() - - then: - traceCollector.pendingReferenceCount == 2 - - when: - child.finish() - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.asList() == [child] - writer == [] - - when: - rootSpan.finish() - writer.waitForTraces(1) - - then: - traceCollector.pendingReferenceCount == 0 - traceCollector.spans.isEmpty() - writer == [[rootSpan, child]] - writer.traceCount.get() == 1 - } - - def "parent finishes before child which holds up trace"() { - when: - def child = tracer.buildSpan("datadog", "child").asChildOf(rootSpan).start() - - then: - traceCollector.pendingReferenceCount == 2 - - when: - rootSpan.finish() - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.asList() == [rootSpan] - writer == [] - - when: - child.finish() - writer.waitForTraces(1) - - then: - traceCollector.pendingReferenceCount == 0 - traceCollector.spans.isEmpty() - writer == [[child, rootSpan]] - writer.traceCount.get() == 1 - } - - def "child spans created after trace written reported separately"() { - setup: - rootSpan.finish() - // this shouldn't happen, but it's possible users of the api - // may incorrectly add spans after the trace is reported. - // in those cases we should still decrement the pending trace count - DDSpan childSpan = tracer.buildSpan("datadog", "child").asChildOf(rootSpan).start() - childSpan.finish() - writer.waitForTraces(2) - - expect: - traceCollector.pendingReferenceCount == 0 - traceCollector.spans.isEmpty() - writer == [[rootSpan], [childSpan]] - } - - def "test getCurrentTimeNano"() { - expect: - // Generous 5 seconds to execute this test - Math.abs(TimeUnit.NANOSECONDS.toSeconds(traceCollector.currentTimeNano) - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) < 5 - } - - def "partial flush"() { - when: - injectSysConfig(PARTIAL_FLUSH_MIN_SPANS, "2") - def quickTracer = tracerBuilder().writer(writer).build() - def rootSpan = quickTracer.buildSpan("datadog", "root").start() - def traceCollector = rootSpan.context().traceCollector - def child1 = quickTracer.buildSpan("datadog", "child1").asChildOf(rootSpan).start() - def child2 = quickTracer.buildSpan("datadog", "child2").asChildOf(rootSpan).start() - - then: - traceCollector.pendingReferenceCount == 3 - - when: - child2.finish() - - then: - traceCollector.pendingReferenceCount == 2 - traceCollector.spans.asList() == [child2] - writer == [] - writer.traceCount.get() == 0 - - when: - child1.finish() - writer.waitForTraces(1) - - then: - traceCollector.pendingReferenceCount == 1 - traceCollector.spans.asList() == [] - writer == [[child1, child2]] - writer.traceCount.get() == 1 - - when: - rootSpan.finish() - writer.waitForTraces(2) - - then: - traceCollector.pendingReferenceCount == 0 - traceCollector.spans.isEmpty() - writer == [[child1, child2], [rootSpan]] - writer.traceCount.get() == 2 - - cleanup: - quickTracer.close() - } - - def "partial flush with root span closed last"() { - when: - injectSysConfig(PARTIAL_FLUSH_MIN_SPANS, "2") - def quickTracer = tracerBuilder().writer(writer).build() - def rootSpan = quickTracer.buildSpan("datadog", "root").start() - def trace = rootSpan.context().traceCollector - def child1 = quickTracer.buildSpan("datadog", "child1").asChildOf(rootSpan).start() - def child2 = quickTracer.buildSpan("datadog", "child2").asChildOf(rootSpan).start() - - then: - trace.pendingReferenceCount == 3 - - when: - child1.finish() - - then: - trace.pendingReferenceCount == 2 - trace.spans.asList() == [child1] - writer == [] - writer.traceCount.get() == 0 - - when: - child2.finish() - writer.waitForTraces(1) - - then: - trace.pendingReferenceCount == 1 - trace.spans.isEmpty() - writer == [[child2, child1]] - writer.traceCount.get() == 1 - - when: - rootSpan.finish() - writer.waitForTraces(2) - - then: - trace.pendingReferenceCount == 0 - trace.spans.isEmpty() - writer == [[child2, child1], [rootSpan]] - writer.traceCount.get() == 2 - - cleanup: - quickTracer.close() - } - - def "partial flush concurrency test"() { - // reduce logging noise - def logger = (Logger) LoggerFactory.getLogger("datadog.trace") - def previousLevel = logger.level - logger.setLevel(Level.OFF) - - setup: - def latch = new CountDownLatch(1) - def rootSpan = tracer.buildSpan("test", "root").start() - PendingTrace traceCollector = rootSpan.context().traceCollector - def exceptions = [] - def threads = (1..threadCount).collect { - Thread.start { - try { - latch.await() - def spans = (1..spanCount).collect { - tracer.startSpan("test", "child", rootSpan.context()) - } - spans.each { - it.finish() - } - } catch (Throwable ex) { - exceptions << ex - } - } - } - - when: - // Finish root span so other spans are queued automatically - rootSpan.finish() - - then: - writer.waitForTraces(1) - - when: - latch.countDown() - threads.each { - it.join() - } - traceCollector.pendingTraceBuffer.flush() - logger.setLevel(previousLevel) - - then: - exceptions.isEmpty() - traceCollector.pendingReferenceCount == 0 - writer.sum { it.size() } == threadCount * spanCount + 1 - - cleanup: - logger.setLevel(previousLevel) - - where: - threadCount | spanCount - 1 | 1 - 2 | 1 - 1 | 2 - // Sufficiently large to fill the buffer: - 5 | 2000 - 10 | 1000 - 50 | 500 - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy deleted file mode 100644 index 04fbccf41d8..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/TraceInterceptorTest.groovy +++ /dev/null @@ -1,221 +0,0 @@ -package datadog.trace.core - -import datadog.trace.TestInterceptor -import datadog.trace.api.GlobalTracer -import datadog.trace.api.config.TracerConfig -import datadog.trace.api.interceptor.MutableSpan -import datadog.trace.api.interceptor.TraceInterceptor -import datadog.trace.common.writer.ListWriter -import datadog.trace.core.test.DDCoreSpecification -import spock.lang.Timeout - -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit -import java.util.concurrent.atomic.AtomicBoolean - -@Timeout(10) -class TraceInterceptorTest extends DDCoreSpecification { - - def writer = new ListWriter() - def tracer - - def setup() { - injectSysConfig(TracerConfig.TRACE_GIT_METADATA_ENABLED, "false") - tracer = tracerBuilder().writer(writer).build() - } - - def cleanup() { - tracer?.close() - } - - def "interceptor is registered as a service"() { - expect: - tracer.interceptors.interceptors()[0] instanceof TestInterceptor - } - - def "interceptors with the same priority replaced"() { - setup: - int priority = 999 - ((TestInterceptor) tracer.interceptors.interceptors()[0]).priority = priority - tracer.interceptors.add(new TraceInterceptor() { - @Override - Collection onTraceComplete(Collection trace) { - return [] - } - - @Override - int priority() { - return priority - } - }) - - when: - def interceptors = tracer.interceptors.interceptors() - - then: - interceptors.length == 1 - interceptors[0] instanceof TestInterceptor - } - - def "interceptors with different priority sorted"() { - setup: - def priority = score - def existingInterceptor = tracer.interceptors.interceptors()[0] - def newInterceptor = new TraceInterceptor() { - @Override - Collection onTraceComplete(Collection trace) { - return [] - } - - @Override - int priority() { - return priority - } - } - tracer.interceptors.add(newInterceptor) - - expect: - Arrays.asList(tracer.interceptors.interceptors()) == reverse ? [newInterceptor, existingInterceptor]: [existingInterceptor, newInterceptor] - - where: - score | reverse - -1 | false - 1 | true - } - - def "interceptor can discard a trace (p=#score)"() { - setup: - def called = new AtomicBoolean(false) - def latch = new CountDownLatch(1) - def priority = score - tracer.interceptors.add(new TraceInterceptor() { - @Override - Collection onTraceComplete(Collection trace) { - called.set(true) - latch.countDown() - return [] - } - - @Override - int priority() { - return priority - } - }) - tracer.buildSpan("datadog", "test " + score).start().finish() - if (score == TestInterceptor.priority) { - // the interceptor didn't get added, so latch will never be released. - writer.waitForTraces(1) - } else { - latch.await(5, TimeUnit.SECONDS) - } - - when: - def interceptors = tracer.interceptors.interceptors() - - then: - interceptors.length == expectedSize - (called.get()) == (score != TestInterceptor.priority) - (writer == []) == (score != TestInterceptor.priority) - - where: - score | expectedSize| _ - TestInterceptor.priority-1 | 2| _ - TestInterceptor.priority | 1| _ // This conflicts with TestInterceptor, so it won't be added. - TestInterceptor.priority+1 | 2| _ - } - - def "interceptor can modify a span"() { - setup: - tracer.interceptors.add(new TraceInterceptor() { - @Override - Collection onTraceComplete(Collection trace) { - for (MutableSpan span : trace) { - span - .setOperationName("modifiedON-" + span.getOperationName()) - .setServiceName("modifiedSN-" + span.getServiceName()) - .setResourceName("modifiedRN-" + span.getResourceName()) - .setSpanType("modifiedST-" + span.getSpanType()) - .setTag("boolean-tag", true) - .setTag("number-tag", 5.0) - .setTag("string-tag", "howdy") - .setError(true) - } - return trace - } - - @Override - int priority() { - return 1 - } - }) - tracer.buildSpan("datadog", "test").start().finish() - writer.waitForTraces(1) - - expect: - def trace = writer.firstTrace() - trace.size() == 1 - - def span = trace[0] - - span.context().operationName == "modifiedON-test" - span.serviceName.startsWith("modifiedSN-") - span.resourceName.toString() == "modifiedRN-modifiedON-test" - span.type == "modifiedST-null" - span.context().getErrorFlag() - - def tags = span.context().tags - - tags["boolean-tag"] == true - tags["number-tag"] == 5.0 - tags["string-tag"] == "howdy" - - tags["thread.name"] != null - tags["thread.id"] != null - tags["runtime-id"] != null - tags["language"] != null - tags.size() >= 7 - } - - def "should be robust when interceptor return a null trace"() { - setup: - tracer.interceptors.add(new TraceInterceptor() { - @Override - Collection onTraceComplete(Collection trace) { - null - } - - @Override - int priority() { - return 0 - } - }) - - when: - DDSpan span = (DDSpan) tracer.startSpan("test", "test") - span.phasedFinish() - tracer.write(SpanList.of(span)) - - then: - notThrown(Throwable) - } - - def "register interceptor through bridge"() { - setup: - GlobalTracer.registerIfAbsent(tracer) - def interceptor = new TraceInterceptor() { - @Override - Collection onTraceComplete(Collection trace) { - return trace - } - - @Override - int priority() { - return 38 - } - } - - expect: - GlobalTracer.get().addTraceInterceptor(interceptor) - Arrays.asList(tracer.interceptors.interceptors()).contains(interceptor) - } -} diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/TracingConfigPollerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/TracingConfigPollerTest.groovy deleted file mode 100644 index 2858fa61f4f..00000000000 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/TracingConfigPollerTest.groovy +++ /dev/null @@ -1,291 +0,0 @@ -package datadog.trace.core - -import datadog.communication.ddagent.DDAgentFeaturesDiscovery -import datadog.communication.ddagent.SharedCommunicationObjects -import datadog.metrics.api.Monitoring -import datadog.remoteconfig.ConfigurationPoller -import datadog.remoteconfig.Product -import datadog.remoteconfig.state.ParsedConfigKey -import datadog.remoteconfig.state.ProductListener -import datadog.trace.api.datastreams.DataStreamsTransactionExtractor -import datadog.trace.core.test.DDCoreSpecification -import java.nio.charset.StandardCharsets -import okhttp3.HttpUrl -import okhttp3.OkHttpClient -import spock.lang.Timeout - -@Timeout(10) -class TracingConfigPollerTest extends DDCoreSpecification { - - def "test mergeLibConfigs with null and non-null values"() { - setup: - def config1 = new TracingConfigPoller.LibConfig() // all nulls - def config2 = new TracingConfigPoller.LibConfig( - tracingEnabled: true, - debugEnabled: false, - runtimeMetricsEnabled: true, - logsInjectionEnabled: false, - dataStreamsEnabled: true, - traceSampleRate: 0.5, - dynamicInstrumentationEnabled: true, - exceptionReplayEnabled: false, - codeOriginEnabled: true, - liveDebuggingEnabled: false - ) - def config3 = new TracingConfigPoller.LibConfig( - tracingEnabled: false, - debugEnabled: true, - runtimeMetricsEnabled: false, - logsInjectionEnabled: true, - dataStreamsEnabled: false, - traceSampleRate: 0.8, - dynamicInstrumentationEnabled: false, - exceptionReplayEnabled: true, - codeOriginEnabled: false, - liveDebuggingEnabled: true - ) - - when: - def merged = TracingConfigPoller.LibConfig.mergeLibConfigs([config1, config2, config3]) - - then: - merged != null - // Should take first non-null values from config2 - merged.tracingEnabled == true - merged.debugEnabled == false - merged.runtimeMetricsEnabled == true - merged.logsInjectionEnabled == false - merged.dataStreamsEnabled == true - merged.traceSampleRate == 0.5 - merged.dynamicInstrumentationEnabled == true - merged.exceptionReplayEnabled == false - merged.codeOriginEnabled == true - merged.liveDebuggingEnabled == false - } - - def "test config priority calculation"() { - setup: - def configOverrides = new TracingConfigPoller.ConfigOverrides() - if (service != null || env != null) { - configOverrides.serviceTarget = new TracingConfigPoller.ServiceTarget( - service: service, - env: env, - ) - } - if (clusterName != null) { - configOverrides.k8sTargetV2 = new TracingConfigPoller.K8sTargetV2( - clusterTargets: [ - new TracingConfigPoller.ClusterTarget( - clusterName: clusterName, - enabled: true, - ) - ] - ) - } - configOverrides.libConfig = new TracingConfigPoller.LibConfig() - - when: - def priority = configOverrides.getOverridePriority() - - then: - priority == expectedPriority - - where: - service | env | clusterName | expectedPriority - "test-service" | "staging" | null | 5 - "test-service" | "*" | null | 4 - "*" | "staging" | null | 3 - null | null | "test-cluster" | 2 - "*" | "*" | null | 1 - } - - - def "test actual config commit with service and org level configs"() { - setup: - def orgKey = ParsedConfigKey.parse("datadog/2/APM_TRACING/org_config/config") - def serviceKey = ParsedConfigKey.parse("datadog/2/APM_TRACING/service_config/config") - def poller = Mock(ConfigurationPoller) - def sco = new SharedCommunicationObjects( - agentHttpClient: Mock(OkHttpClient), - monitoring: Mock(Monitoring), - agentUrl: HttpUrl.get('https://example.com'), - featuresDiscovery: Mock(DDAgentFeaturesDiscovery), - configurationPoller: poller - ) - - def updater - - when: - def tracer = CoreTracer.builder() - .sharedCommunicationObjects(sco) - .pollForTracingConfiguration() - .build() - - then: - 1 * poller.addListener(Product.APM_TRACING, _ as ProductListener) >> { - updater = it[1] // capture config updater for further testing - } - and: - tracer.captureTraceConfig().serviceMapping == [:] - tracer.captureTraceConfig().traceSampleRate == null - - when: - // Add org level config (priority 1) - should set service mapping - updater.accept(orgKey, """ - { - "service_target": { - "service": "*", - "env": "*" - }, - "lib_config": { - "tracing_service_mapping": [ - { - "from_key": "org-service", - "to_name": "org-mapped" - } - ], - "tracing_sampling_rate": 0.7 - } - } - """.getBytes(StandardCharsets.UTF_8), null) - - // Add service level config (priority 4) - should override service mapping and add header tags - updater.accept(serviceKey, """ - { - "service_target": { - "service": "test-service", - "env": "*" - }, - "lib_config": { - "tracing_service_mapping": [ - { - "from_key": "service-specific", - "to_name": "service-mapped" - } - ], - "tracing_header_tags": [ - { - "header": "X-Custom-Header", - "tag_name": "custom.header" - } - ], - "tracing_sampling_rate": 1.3, - "data_streams_transaction_extractors": [ - { - "name": "test", - "type": "unknown", - "value": "value" - } - ] - } - } - """.getBytes(StandardCharsets.UTF_8), null) - - // Commit both configs - updater.commit() - - then: - // Service level config should take precedence due to higher priority (4 vs 1) - tracer.captureTraceConfig().serviceMapping == ["service-specific": "service-mapped"] - tracer.captureTraceConfig().traceSampleRate == 1.0 // should be clamped to 1.0 - tracer.captureTraceConfig().requestHeaderTags == ["x-custom-header": "custom.header"] - tracer.captureTraceConfig().responseHeaderTags == ["x-custom-header": "custom.header"] - tracer.captureTraceConfig().getDataStreamsTransactionExtractors().size() == 1 - tracer.captureTraceConfig().getDataStreamsTransactionExtractors()[0].name == "test" - tracer.captureTraceConfig().getDataStreamsTransactionExtractors()[0].type == DataStreamsTransactionExtractor.Type.UNKNOWN - tracer.captureTraceConfig().getDataStreamsTransactionExtractors()[0].value == "value" - - when: - // Remove service level config - updater.remove(serviceKey, null) - updater.commit() - - then: - // Should fall back to org level config - tracer.captureTraceConfig().serviceMapping == ["org-service": "org-mapped"] - tracer.captureTraceConfig().traceSampleRate == 0.7 - tracer.captureTraceConfig().requestHeaderTags == [:] - tracer.captureTraceConfig().responseHeaderTags == [:] - - when: - // Remove org level config - updater.remove(orgKey, null) - updater.commit() - - then: - // Should have no configs - tracer.captureTraceConfig().serviceMapping == [:] - tracer.captureTraceConfig().traceSampleRate == null - - cleanup: - tracer?.close() - } - - def "test two org levels config setting different flags works"() { - setup: - def orgConfig1Key = ParsedConfigKey.parse("datadog/2/APM_TRACING/org_config/config1") - def orgConfig2Key = ParsedConfigKey.parse("datadog/2/APM_TRACING/org_config/config2") - def poller = Mock(ConfigurationPoller) - def sco = new SharedCommunicationObjects( - agentHttpClient: Mock(OkHttpClient), - monitoring: Mock(Monitoring), - agentUrl: HttpUrl.get('https://example.com'), - featuresDiscovery: Mock(DDAgentFeaturesDiscovery), - configurationPoller: poller - ) - - def updater - - when: - def tracer = CoreTracer.builder() - .sharedCommunicationObjects(sco) - .pollForTracingConfiguration() - .build() - - then: - 1 * poller.addListener(Product.APM_TRACING, _ as ProductListener) >> { - updater = it[1] // capture config updater for further testing - } - and: - tracer.captureTraceConfig().isTraceEnabled() == true - tracer.captureTraceConfig().isDataStreamsEnabled() == false - - when: - // Add org level config with ApmTracing enabled - updater.accept(orgConfig1Key, """ - { - "service_target": { - "service": "*", - "env": "*" - }, - "lib_config": { - "tracing_enabled": true - } - } - """.getBytes(StandardCharsets.UTF_8), null) - - // Add second org level config with DataStreams enabled - updater.accept(orgConfig2Key, """ - { - "service_target": { - "service": "*", - "env": "*" - }, - "lib_config": { - "data_streams_enabled": true - } - } - """.getBytes(StandardCharsets.UTF_8), null) - - // Commit both configs - updater.commit() - - then: - // Both org level configs should be merged, with data streams enabled - tracer.captureTraceConfig().isTraceEnabled() == true - tracer.captureTraceConfig().isDataStreamsEnabled() == true - - cleanup: - tracer?.close() - } -} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java new file mode 100644 index 00000000000..2e15f97a6ff --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java @@ -0,0 +1,608 @@ +package datadog.trace.core; + +import static datadog.trace.api.sampling.PrioritySampling.UNSET; +import static datadog.trace.api.sampling.PrioritySampling.USER_KEEP; +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.clearInvocations; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import datadog.environment.JavaVirtualMachine; +import datadog.metrics.api.Monitoring; +import datadog.trace.SamplingPriorityMetadataChecker; +import datadog.trace.api.Config; +import datadog.trace.api.DDSpanId; +import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.NoopPathwayContext; +import datadog.trace.api.flare.TracerFlare; +import datadog.trace.api.time.SystemTimeSource; +import datadog.trace.context.TraceScope; +import datadog.trace.core.monitor.HealthMetrics; +import datadog.trace.core.propagation.PropagationTags; +import datadog.trace.core.scopemanager.ContinuableScopeManager; +import datadog.trace.test.util.DDJavaSpecification; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; + +@Timeout(5) +public class PendingTraceBufferTest extends DDJavaSpecification { + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private PendingTraceBuffer buffer; + private PendingTraceBuffer bufferSpy; + private PendingTraceBuffer.DelayingPendingTraceBuffer delayingBuffer; + private CoreTracer tracer; + private CoreTracer.ConfigSnapshot traceConfig; + private ContinuableScopeManager scopeManager; + private PendingTrace.Factory factory; + private List continuations; + + @BeforeAll + static void checkJvm() { + Assumptions.assumeFalse( + JavaVirtualMachine.isOracleJDK8(), + "Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to" + + " correctly extract method parameters without args, when the code is compiled on a" + + " later JDK (targeting 8). This can manifest when creating mocks."); + } + + @BeforeEach + void setup() { + tracer = mock(CoreTracer.class); + traceConfig = mock(CoreTracer.ConfigSnapshot.class); + buffer = PendingTraceBuffer.delaying(SystemTimeSource.INSTANCE, mock(Config.class), null, null); + bufferSpy = spy(buffer); + delayingBuffer = (PendingTraceBuffer.DelayingPendingTraceBuffer) buffer; + scopeManager = new ContinuableScopeManager(10, true); + factory = + new PendingTrace.Factory( + tracer, bufferSpy, SystemTimeSource.INSTANCE, false, HealthMetrics.NO_OP); + continuations = new ArrayList<>(); + + when(tracer.captureTraceConfig()).thenReturn(traceConfig); + when(traceConfig.getServiceMapping()).thenReturn(Collections.emptyMap()); + when(tracer.getPartialFlushMinSpans()).thenReturn(10); + when(tracer.writeTimer()).thenReturn(Monitoring.DISABLED.newTimer("")); + when(tracer.getTimeWithNanoTicks(anyLong())).thenAnswer(inv -> inv.getArgument(0)); + } + + @AfterEach + void cleanup() throws InterruptedException { + buffer.close(); + delayingBuffer.getWorker().join(1000); + } + + @Test + void testBufferLifecycle() throws InterruptedException { + assertFalse(delayingBuffer.getWorker().isAlive()); + + buffer.start(); + + assertTrue(delayingBuffer.getWorker().isAlive()); + assertTrue(delayingBuffer.getWorker().isDaemon()); + + assertThrows(IllegalThreadStateException.class, () -> buffer.start()); + assertTrue(delayingBuffer.getWorker().isAlive()); + assertTrue(delayingBuffer.getWorker().isDaemon()); + + buffer.close(); + delayingBuffer.getWorker().join(1000); + + assertFalse(delayingBuffer.getWorker().isAlive()); + } + + @Test + void continuationBuffersRoot() { + PendingTrace trace = factory.create(DDTraceId.ONE); + DDSpan span = newSpanOf(trace); + + assertFalse(trace.isRootSpanWritten()); + + addContinuation(span); + span.finish(); // This should enqueue + + assertEquals(1, continuations.size()); + assertEquals(1, trace.getPendingReferenceCount()); + verify(bufferSpy).enqueue(trace); + verify(tracer).onRootSpanPublished(span); + + clearInvocations(bufferSpy, tracer, traceConfig); + + continuations.get(0).cancel(); + + assertEquals(0, trace.getPendingReferenceCount()); + verify(tracer).write(argThat(it -> it.size() == 1)); + verify(tracer).writeTimer(); + } + + @Test + void unfinishedChildBuffersRoot() { + PendingTrace trace = factory.create(DDTraceId.ONE); + DDSpan parent = newSpanOf(trace); + DDSpan child = newSpanOf(parent); + + assertFalse(trace.isRootSpanWritten()); + + parent.finish(); // This should enqueue + + assertEquals(1, trace.size()); + assertEquals(1, trace.getPendingReferenceCount()); + verify(bufferSpy).enqueue(trace); + verify(tracer).onRootSpanPublished(parent); + + clearInvocations(bufferSpy, tracer); + + child.finish(); + + assertEquals(0, trace.size()); + assertEquals(0, trace.getPendingReferenceCount()); + verify(tracer).write(argThat(it -> it.size() == 2)); + verify(tracer).writeTimer(); + } + + @Test + void prioritySamplingIsAlwaysSent() { + SamplingPriorityMetadataChecker metadataChecker = new SamplingPriorityMetadataChecker(); + doAnswer( + invocation -> { + List spans = invocation.getArgument(0); + spans.get(0).processTagsAndBaggage(metadataChecker); + return null; + }) + .when(tracer) + .write(any()); + + DDSpan parent = addContinuation(newSpanOf(factory.create(DDTraceId.ONE), USER_KEEP, 0)); + // Fill the buffer - Only children - Priority taken from root + for (int i = 0; i < 11; i++) { + newSpanOf(parent).finish(); + } + + verify(tracer).write(any()); + assertTrue(metadataChecker.hasSamplingPriority); + } + + @Test + void bufferFullYieldsImmediateWrite() { + int capacity = delayingBuffer.getQueue().capacity(); + + // Fill the buffer + for (int i = 0; i < capacity; i++) { + addContinuation(newSpanOf(factory.create(DDTraceId.ONE))).finish(); + } + + assertEquals(capacity, delayingBuffer.getQueue().size()); + verify(bufferSpy, times(capacity)).enqueue(any()); + verify(tracer, times(capacity)).onRootSpanPublished(any()); + + clearInvocations(bufferSpy, tracer, traceConfig); + + PendingTrace pendingTrace = factory.create(DDTraceId.ONE); + addContinuation(newSpanOf(pendingTrace)).finish(); + + verify(bufferSpy).enqueue(any()); + verify(tracer).write(argThat(it -> it.size() == 1)); + verify(tracer).onRootSpanPublished(any()); + assertEquals(0, pendingTrace.getIsEnqueued()); + } + + @Test + void longRunningTraceBufferFullDoesNotTriggerWrite() { + int capacity = delayingBuffer.getQueue().capacity(); + + // Fill the buffer + for (int i = 0; i < capacity; i++) { + addContinuation(newSpanOf(factory.create(DDTraceId.ONE))).finish(); + } + + assertEquals(capacity, delayingBuffer.getQueue().size()); + verify(bufferSpy, times(capacity)).enqueue(any()); + verify(tracer, times(capacity)).onRootSpanPublished(any()); + + clearInvocations(bufferSpy, tracer, traceConfig); + + PendingTrace pendingTrace = factory.create(DDTraceId.ONE); + pendingTrace.setLongRunningTrackedState(LongRunningTracesTracker.TO_TRACK); + addContinuation(newSpanOf(pendingTrace)).finish(); + + verify(tracer).captureTraceConfig(); + verify(bufferSpy).enqueue(any()); + verify(tracer, never()).writeTimer(); + verify(tracer, never()).write(argThat(it -> it.size() == 1)); + verify(tracer).onRootSpanPublished(any()); + assertEquals(0, pendingTrace.getIsEnqueued()); + } + + @Test + void continuationAllowsAddingAfterRootFinished() { + PendingTrace trace = factory.create(DDTraceId.ONE); + DDSpan parent = addContinuation(newSpanOf(trace)); + TraceScope.Continuation continuation = continuations.get(0); + + assertEquals(1, continuations.size()); + + parent.finish(); // This should enqueue + + assertEquals(1, trace.size()); + assertEquals(1, trace.getPendingReferenceCount()); + assertFalse(trace.isRootSpanWritten()); + verify(bufferSpy).enqueue(trace); + verify(tracer).onRootSpanPublished(parent); + + clearInvocations(bufferSpy, tracer); + + DDSpan child = newSpanOf(parent); + child.finish(); + + assertEquals(2, trace.size()); + assertEquals(1, trace.getPendingReferenceCount()); + assertFalse(trace.isRootSpanWritten()); + + // Don't start the buffer thread here. When the continuation is cancelled, + // pendingReferenceCount drops to 0 with rootSpanWritten still false, so + // write() is called synchronously on this thread. Starting the buffer + // would introduce a race where the worker thread could process the + // enqueued trace before continuation.cancel(), causing unexpected interactions. + continuation.cancel(); + + assertEquals(0, trace.size()); + assertEquals(0, trace.getPendingReferenceCount()); + assertTrue(trace.isRootSpanWritten()); + verify(tracer).write(argThat(it -> it.size() == 2)); + verify(tracer).writeTimer(); + } + + @Test + void lateArrivalSpanRequeuesPendingTrace() throws InterruptedException { + buffer.start(); + CountDownLatch parentLatch = new CountDownLatch(1); + CountDownLatch childLatch = new CountDownLatch(1); + + PendingTrace trace = factory.create(DDTraceId.ONE); + DDSpan parent = newSpanOf(trace); + + doAnswer( + invocation -> { + parentLatch.countDown(); + return null; + }) + .doAnswer( + invocation -> { + childLatch.countDown(); + return null; + }) + .when(tracer) + .write(any()); + + parent.finish(); // This should enqueue + assertTrue(parentLatch.await(3, TimeUnit.SECONDS)); + + assertEquals(0, trace.size()); + assertEquals(0, trace.getPendingReferenceCount()); + assertTrue(trace.isRootSpanWritten()); + verify(tracer).write(argThat(it -> it.size() == 1)); + verify(tracer).onRootSpanPublished(parent); + + clearInvocations(bufferSpy, tracer, traceConfig); + + DDSpan child = newSpanOf(parent); + child.finish(); + assertTrue(childLatch.await(3, TimeUnit.SECONDS)); + + assertEquals(0, trace.size()); + assertEquals(0, trace.getPendingReferenceCount()); + assertTrue(trace.isRootSpanWritten()); + verify(bufferSpy).enqueue(trace); + verify(tracer).write(argThat(it -> it.size() == 1)); + } + + @Test + void flushClearsTheBuffer() throws InterruptedException { + buffer.start(); + AtomicInteger counter = new AtomicInteger(0); + // Create a fake element that newer gets written + PendingTraceBuffer.Element element = + new PendingTraceBuffer.Element() { + @Override + public long oldestFinishedTime() { + return TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()); + } + + @Override + public boolean lastReferencedNanosAgo(long nanos) { + return false; + } + + @Override + public void write() { + counter.incrementAndGet(); + } + + @Override + public DDSpan getRootSpan() { + return null; + } + + @Override + public boolean setEnqueued(boolean enqueued) { + return true; + } + + @Override + public boolean writeOnBufferFull() { + return true; + } + }; + + bufferSpy.enqueue(element); + bufferSpy.enqueue(element); + bufferSpy.enqueue(element); + + assertEquals(0, counter.get()); + + buffer.flush(); + + assertEquals(3, counter.get()); + } + + @Test + void samePendingTraceIsNotEnqueuedMultipleTimes() { + when(tracer.getPartialFlushMinSpans()).thenReturn(10000); + + PendingTrace pendingTrace = factory.create(DDTraceId.ONE); + DDSpan span = newSpanOf(pendingTrace); + span.finish(); + + assertTrue(pendingTrace.isRootSpanWritten()); + assertEquals(0, pendingTrace.getIsEnqueued()); + assertEquals(0, delayingBuffer.getQueue().size()); + verify(tracer).write(argThat(it -> it.size() == 1)); + + clearInvocations(bufferSpy, tracer, traceConfig); + + int capacity = delayingBuffer.getQueue().capacity(); + // fail to fill the buffer + for (int i = 0; i < capacity; i++) { + addContinuation(newSpanOf(span)).finish(); + } + + assertEquals(1, pendingTrace.getIsEnqueued()); + assertEquals(1, delayingBuffer.getQueue().size()); + verify(bufferSpy, times(capacity)).enqueue(any()); + + // process the buffer + buffer.start(); + + long deadline = System.currentTimeMillis() + 3000; + while (pendingTrace.getIsEnqueued() != 0 && System.currentTimeMillis() < deadline) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + assertEquals(0, pendingTrace.getIsEnqueued()); + } + + @Test + void testingTracerFlareDumpWithMultipleTraces() throws IOException, InterruptedException { + TracerFlare.addReporter(zip -> {}); // exercises default methods + TracerFlare.Reporter dumpReporter = mock(TracerFlare.Reporter.class); + TracerFlare.addReporter(dumpReporter); + + PendingTrace trace1 = factory.create(DDTraceId.ONE); + DDSpan parent1 = newSpanOf(trace1, UNSET, System.currentTimeMillis() * 1000); + DDSpan child1 = newSpanOf(parent1); + PendingTrace trace2 = factory.create(DDTraceId.from(2)); + DDSpan parent2 = newSpanOf(trace2, UNSET, System.currentTimeMillis() * 2000); + DDSpan child2 = newSpanOf(parent2); + // first flare dump with two traces + parent1.finish(); + parent2.finish(); + buffer.start(); + Map entries1 = buildAndExtractZip(); + + verify(dumpReporter).prepareForFlare(); + verify(dumpReporter).addReportToFlare(any()); + verify(dumpReporter).cleanupAfterFlare(); + + assertEquals(1, entries1.size()); + String pendingTraceText1 = (String) entries1.get("pending_traces.txt"); + assertTrue( + pendingTraceText1.startsWith( + "[{\"service\":\"fakeService\",\"name\":\"fakeOperation\",\"resource\":\"fakeResource\",\"trace_id\":1,\"span_id\":1,\"parent_id\":0")); + + List> parsedTraces1 = parseTraceLines(pendingTraceText1); + assertEquals(2, parsedTraces1.size()); + assertEquals(1L, ((Number) parsedTraces1.get(0).get("trace_id")).longValue()); + assertEquals(2L, ((Number) parsedTraces1.get(1).get("trace_id")).longValue()); + assertTrue( + ((Number) parsedTraces1.get(0).get("start")).longValue() + < ((Number) parsedTraces1.get(1).get("start")).longValue()); + + clearInvocations(dumpReporter); + + // New pending traces are needed here because generating the first flare takes long enough that + // the + // earlier pending traces are flushed (within 500ms). + // second flare dump with new pending traces + // Finish the first set of traces + child1.finish(); + child2.finish(); + // Create new pending traces + PendingTrace trace3 = factory.create(DDTraceId.from(3)); + DDSpan parent3 = newSpanOf(trace3, UNSET, System.currentTimeMillis() * 3000); + DDSpan child3 = newSpanOf(parent3); + PendingTrace trace4 = factory.create(DDTraceId.from(4)); + DDSpan parent4 = newSpanOf(trace4, UNSET, System.currentTimeMillis() * 4000); + DDSpan child4 = newSpanOf(parent4); + parent3.finish(); + parent4.finish(); + Map entries2 = buildAndExtractZip(); + + verify(dumpReporter).prepareForFlare(); + verify(dumpReporter).addReportToFlare(any()); + verify(dumpReporter).cleanupAfterFlare(); + + assertEquals(1, entries2.size()); + String pendingTraceText2 = (String) entries2.get("pending_traces.txt"); + List> parsedTraces2 = parseTraceLines(pendingTraceText2); + assertEquals(2, parsedTraces2.size()); + + child3.finish(); + child4.finish(); + + long deadline = System.currentTimeMillis() + 3000; + while ((trace1.size() != 0 || trace2.size() != 0 || trace3.size() != 0 || trace4.size() != 0) + && System.currentTimeMillis() < deadline) { + Thread.sleep(50); + } + + assertEquals(0, trace1.size()); + assertEquals(0, trace1.getPendingReferenceCount()); + assertEquals(0, trace2.size()); + assertEquals(0, trace2.getPendingReferenceCount()); + assertEquals(0, trace3.size()); + assertEquals(0, trace3.getPendingReferenceCount()); + assertEquals(0, trace4.size()); + assertEquals(0, trace4.getPendingReferenceCount()); + } + + private DDSpan addContinuation(DDSpan span) { + TraceScope scope = scopeManager.activateSpan(span); + continuations.add(scopeManager.captureSpan(span)); + scope.close(); + return span; + } + + private static DDSpan newSpanOf(PendingTrace trace) { + return newSpanOf(trace, UNSET, 0); + } + + private static DDSpan newSpanOf(PendingTrace trace, int samplingPriority, long timestampMicro) { + DDSpanContext context = + new DDSpanContext( + trace.getTraceId(), + 1, + DDSpanId.ZERO, + null, + "fakeService", + "fakeOperation", + "fakeResource", + samplingPriority, + null, + Collections.emptyMap(), + false, + "fakeType", + 0, + trace, + null, + null, + NoopPathwayContext.INSTANCE, + false, + PropagationTags.factory().empty()); + return DDSpan.create("test", timestampMicro, context, null); + } + + private static DDSpan newSpanOf(DDSpan parent) { + TraceCollector traceCollector = parent.context().getTraceCollector(); + DDSpanContext context = + new DDSpanContext( + parent.context().getTraceId(), + 2, + parent.context().getSpanId(), + null, + "fakeService", + "fakeOperation", + "fakeResource", + UNSET, + null, + Collections.emptyMap(), + false, + "fakeType", + 0, + traceCollector, + null, + null, + NoopPathwayContext.INSTANCE, + false, + PropagationTags.factory().empty()); + return DDSpan.create("test", 0, context, null); + } + + private Map buildAndExtractZip() throws IOException { + TracerFlare.prepareForFlare(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try (ZipOutputStream zip = new ZipOutputStream(out)) { + TracerFlare.addReportsToFlare(zip); + } finally { + TracerFlare.cleanupAfterFlare(); + } + + Map entries = new LinkedHashMap<>(); + try (ZipInputStream zip = new ZipInputStream(new ByteArrayInputStream(out.toByteArray()))) { + ZipEntry entry; + byte[] buf = new byte[4096]; + while ((entry = zip.getNextEntry()) != null) { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + int read; + while ((read = zip.read(buf)) != -1) { + bytes.write(buf, 0, read); + } + String name = entry.getName(); + if (name.endsWith(".bin")) { + entries.put(name, bytes.toByteArray()); + } else { + entries.put(name, new String(bytes.toByteArray(), UTF_8)); + } + } + } + return entries; + } + + private static List> parseTraceLines(String text) throws IOException { + List> allSpans = new ArrayList<>(); + for (String line : text.split("\n")) { + if (!line.isEmpty()) { + List> lineSpans = + OBJECT_MAPPER.readValue(line, new TypeReference>>() {}); + allSpans.addAll(lineSpans); + } + } + return allSpans; + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java new file mode 100644 index 00000000000..47cc41da7a0 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceStrictWriteTest.java @@ -0,0 +1,63 @@ +package datadog.trace.core; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import java.util.ArrayList; +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +public class PendingTraceStrictWriteTest extends PendingTraceTestBase { + + @Test + void traceNotReportedUntilContinuationClosed() throws InterruptedException { + AgentScope scope = tracer.activateSpan(rootSpan); + AgentScope.Continuation continuation = tracer.captureActiveSpan(); + scope.close(); + rootSpan.finish(); + + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertEquals(Arrays.asList(rootSpan), new ArrayList<>(traceCollector.getSpans())); + assertTrue(writer.isEmpty()); + // root span buffer delay expires + writer.waitForTracesMax(1, 1); + + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertEquals(Arrays.asList(rootSpan), new ArrayList<>(traceCollector.getSpans())); + assertTrue(writer.isEmpty()); + assertEquals(0, writer.getTraceCount()); + // continuation is closed + continuation.cancel(); + + assertEquals(0, traceCollector.getPendingReferenceCount()); + assertTrue(traceCollector.getSpans().isEmpty()); + assertEquals(Arrays.asList(Arrays.asList(rootSpan)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + } + + @Test + void negativeReferenceCountThrowsException() { + AgentScope scope = tracer.activateSpan(rootSpan); + AgentScope.Continuation continuation = tracer.captureActiveSpan(); + scope.close(); + rootSpan.finish(); + + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertEquals(Arrays.asList(rootSpan), new ArrayList<>(traceCollector.getSpans())); + assertTrue(writer.isEmpty()); + // continuation is finished the first time + continuation.cancel(); + + assertEquals(0, traceCollector.getPendingReferenceCount()); + assertTrue(traceCollector.getSpans().isEmpty()); + assertEquals(Arrays.asList(Arrays.asList(rootSpan)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + // continuation is finished the second time + // Yes this should be guarded by the used flag in the continuation, + // so remove it anyway to trigger the exception + assertThrows( + IllegalStateException.class, () -> traceCollector.removeContinuation(continuation)); + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java new file mode 100644 index 00000000000..0020fa3a157 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTest.java @@ -0,0 +1,221 @@ +package datadog.trace.core; + +import static datadog.trace.api.sampling.PrioritySampling.UNSET; +import static datadog.trace.api.sampling.PrioritySampling.USER_KEEP; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import datadog.environment.JavaVirtualMachine; +import datadog.trace.api.DDTraceId; +import datadog.trace.api.datastreams.NoopPathwayContext; +import datadog.trace.api.time.TimeSource; +import datadog.trace.bootstrap.instrumentation.api.AgentScope; +import datadog.trace.core.monitor.HealthMetrics; +import datadog.trace.core.propagation.PropagationTags; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeoutException; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; + +@Timeout(60) +public class PendingTraceTest extends PendingTraceTestBase { + + @BeforeAll + static void checkJvm() { + Assumptions.assumeFalse( + JavaVirtualMachine.isOracleJDK8(), + "Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to" + + " correctly extract method parameters without args, when the code is compiled on a" + + " later JDK (targeting 8). This can manifest when creating mocks."); + } + + @Override + protected boolean useStrictTraceWrites() { + // This tests the behavior of the relaxed pending trace implementation + return false; + } + + private DDSpan createSimpleSpan(PendingTrace trace) { + return createSimpleSpanWithID(trace, 1); + } + + private DDSpan createSimpleSpanWithID(PendingTrace trace, long id) { + return new DDSpan( + "test", + 0L, + new DDSpanContext( + DDTraceId.from(1), + id, + 0, + null, + "", + "", + "", + UNSET, + "", + Collections.emptyMap(), + false, + "", + 0, + trace, + null, + null, + NoopPathwayContext.INSTANCE, + false, + PropagationTags.factory().empty()), + null); + } + + @Test + void traceStillReportedWhenUnfinishedContinuationDiscarded() + throws InterruptedException, TimeoutException { + AgentScope scope = tracer.activateSpan(rootSpan); + tracer.captureActiveSpan(); + scope.close(); + + rootSpan.finish(); + + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertEquals(Arrays.asList(rootSpan), new ArrayList<>(traceCollector.getSpans())); + assertTrue(writer.isEmpty()); + // root span buffer delay expires + writer.waitForTraces(1); + + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertTrue(traceCollector.getSpans().isEmpty()); + assertEquals(Arrays.asList(Arrays.asList(rootSpan)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + } + + @Test + void verifyHealthMetricsCalled() { + CoreTracer stubTracer = mock(CoreTracer.class); + CoreTracer.ConfigSnapshot traceConfig = mock(CoreTracer.ConfigSnapshot.class); + PendingTraceBuffer buffer = mock(PendingTraceBuffer.class); + HealthMetrics healthMetrics = mock(HealthMetrics.class); + + when(stubTracer.captureTraceConfig()).thenReturn(traceConfig); + when(traceConfig.getServiceMapping()).thenReturn(Collections.emptyMap()); + + PendingTrace trace = + new PendingTrace( + stubTracer, + DDTraceId.from(0), + buffer, + mock(TimeSource.class), + null, + false, + healthMetrics); + + DDSpan span = createSimpleSpan(trace); + trace.registerSpan(span); + + verify(healthMetrics, times(1)).onCreateSpan(); + + span.finish(); + + verify(healthMetrics, times(1)).onCreateTrace(); + } + + @Test + void writeWhenRunningSpansDisabledOnlyCompletedSpansWritten() { + CoreTracer stubTracer = mock(CoreTracer.class); + CoreTracer.ConfigSnapshot traceConfig = mock(CoreTracer.ConfigSnapshot.class); + PendingTraceBuffer buffer = mock(PendingTraceBuffer.class); + HealthMetrics healthMetrics = mock(HealthMetrics.class); + + when(stubTracer.captureTraceConfig()).thenReturn(traceConfig); + when(traceConfig.getServiceMapping()).thenReturn(Collections.emptyMap()); + when(buffer.longRunningSpansEnabled()).thenReturn(true); + + PendingTrace trace = + new PendingTrace( + stubTracer, + DDTraceId.from(0), + buffer, + mock(TimeSource.class), + null, + false, + healthMetrics); + + DDSpan span1 = createSimpleSpanWithID(trace, 39); + span1.setDurationNano(31); + span1.setSamplingPriority(USER_KEEP); + trace.registerSpan(span1); + + DDSpan unfinishedSpan = createSimpleSpanWithID(trace, 191); + trace.registerSpan(unfinishedSpan); + + DDSpan span2 = createSimpleSpanWithID(trace, 9999); + span2.setDurationNano(9191); + trace.registerSpan(span2); + + List traceToWrite = new ArrayList<>(0); + int completedSpans = trace.enqueueSpansToWrite(traceToWrite, false); + + assertEquals(2, completedSpans); + assertEquals(2, traceToWrite.size()); + assertTrue(traceToWrite.containsAll(Arrays.asList(span1, span2))); + assertEquals(1, trace.getSpans().size()); + assertEquals(unfinishedSpan, trace.getSpans().iterator().next()); + } + + @Test + void writeWhenRunningSpansEnabledCompleteAndRunningSpansWritten() { + CoreTracer stubTracer = mock(CoreTracer.class); + CoreTracer.ConfigSnapshot traceConfig = mock(CoreTracer.ConfigSnapshot.class); + PendingTraceBuffer buffer = mock(PendingTraceBuffer.class); + HealthMetrics healthMetrics = mock(HealthMetrics.class); + + when(stubTracer.captureTraceConfig()).thenReturn(traceConfig); + when(traceConfig.getServiceMapping()).thenReturn(Collections.emptyMap()); + when(buffer.longRunningSpansEnabled()).thenReturn(true); + + PendingTrace trace = + new PendingTrace( + stubTracer, + DDTraceId.from(0), + buffer, + mock(TimeSource.class), + null, + false, + healthMetrics); + + DDSpan span1 = createSimpleSpanWithID(trace, 39); + span1.setDurationNano(31); + span1.setSamplingPriority(USER_KEEP); + trace.registerSpan(span1); + + DDSpan unfinishedSpan = createSimpleSpanWithID(trace, 191); + trace.registerSpan(unfinishedSpan); + + DDSpan span2 = createSimpleSpanWithID(trace, 9999); + span2.setServiceName("9191"); + span2.setDurationNano(9191); + trace.registerSpan(span2); + + DDSpan unfinishedSpan2 = createSimpleSpanWithID(trace, 77771); + trace.registerSpan(unfinishedSpan2); + + List traceToWrite = new ArrayList<>(0); + int completedSpans = trace.enqueueSpansToWrite(traceToWrite, true); + + assertEquals(2, completedSpans); + assertEquals(4, traceToWrite.size()); + assertTrue( + traceToWrite.containsAll(Arrays.asList(span1, span2, unfinishedSpan, unfinishedSpan2))); + assertEquals(2, trace.getSpans().size()); + assertTrue( + new ArrayList<>(trace.getSpans()) + .containsAll(Arrays.asList(unfinishedSpan, unfinishedSpan2))); + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java new file mode 100644 index 00000000000..c6b5f5a54af --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceTestBase.java @@ -0,0 +1,285 @@ +package datadog.trace.core; + +import static datadog.trace.api.config.TracerConfig.PARTIAL_FLUSH_MIN_SPANS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import datadog.trace.common.writer.ListWriter; +import datadog.trace.junit.utils.config.WithConfig; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; +import org.tabletest.junit.TableTest; + +public abstract class PendingTraceTestBase extends DDCoreJavaSpecification { + + protected ListWriter writer; + protected CoreTracer tracer; + protected DDSpan rootSpan; + protected PendingTrace traceCollector; + + @BeforeEach + void setup() throws Exception { + writer = new ListWriter(); + tracer = tracerBuilder().writer(writer).build(); + rootSpan = (DDSpan) tracer.buildSpan("datadog", "fakeOperation").start(); + traceCollector = (PendingTrace) rootSpan.context().getTraceCollector(); + + assertEquals(0, traceCollector.size()); + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertFalse(traceCollector.isRootSpanWritten()); + } + + @AfterEach + void cleanup() { + if (tracer != null) { + tracer.close(); + } + } + + @Test + void singleSpanWrittenWhenFinished() throws InterruptedException, TimeoutException { + rootSpan.finish(); + writer.waitForTraces(1); + + assertTrue(traceCollector.getSpans().isEmpty()); + assertEquals(Arrays.asList(Arrays.asList(rootSpan)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + } + + @Test + void childFinishesBeforeParent() throws InterruptedException, TimeoutException { + DDSpan child = + (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(rootSpan.context()).start(); + + assertEquals(2, traceCollector.getPendingReferenceCount()); + + child.finish(); + + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertEquals(Arrays.asList(child), new ArrayList<>(traceCollector.getSpans())); + assertTrue(writer.isEmpty()); + + rootSpan.finish(); + writer.waitForTraces(1); + + assertEquals(0, traceCollector.getPendingReferenceCount()); + assertTrue(traceCollector.getSpans().isEmpty()); + assertEquals(Arrays.asList(Arrays.asList(rootSpan, child)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + } + + @Test + void parentFinishesBeforeChild() throws InterruptedException, TimeoutException { + DDSpan child = + (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(rootSpan.context()).start(); + + assertEquals(2, traceCollector.getPendingReferenceCount()); + + rootSpan.finish(); + + assertEquals(1, traceCollector.getPendingReferenceCount()); + assertEquals(Arrays.asList(rootSpan), new ArrayList<>(traceCollector.getSpans())); + assertTrue(writer.isEmpty()); + + child.finish(); + writer.waitForTraces(1); + + assertEquals(0, traceCollector.getPendingReferenceCount()); + assertTrue(traceCollector.getSpans().isEmpty()); + assertEquals(Arrays.asList(Arrays.asList(child, rootSpan)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + } + + @Test + void childSpansCreatedAfterWrittenReportedSeparately() + throws InterruptedException, TimeoutException { + rootSpan.finish(); + // this shouldn't happen, but it's possible users of the api + // may incorrectly add spans after the trace is reported. + // in those cases we should still decrement the pending trace count + DDSpan childSpan = + (DDSpan) tracer.buildSpan("datadog", "child").asChildOf(rootSpan.context()).start(); + childSpan.finish(); + writer.waitForTraces(2); + + assertEquals(0, traceCollector.getPendingReferenceCount()); + assertTrue(traceCollector.getSpans().isEmpty()); + assertEquals( + Arrays.asList(Arrays.asList(rootSpan), Arrays.asList(childSpan)), new ArrayList<>(writer)); + } + + @Test + void testGetCurrentTimeNano() { + long diffSeconds = + Math.abs( + TimeUnit.NANOSECONDS.toSeconds(traceCollector.getCurrentTimeNano()) + - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())); + // Generous 5 seconds to execute this test + assertTrue(diffSeconds < 5, "Expected time difference < 5 seconds, got: " + diffSeconds); + } + + @Test + @WithConfig(key = PARTIAL_FLUSH_MIN_SPANS, value = "2") + void partialFlush() throws InterruptedException, TimeoutException { + CoreTracer quickTracer = tracerBuilder().writer(writer).build(); + try { + DDSpan localRoot = (DDSpan) quickTracer.buildSpan("datadog", "root").start(); + PendingTrace trace = (PendingTrace) localRoot.context().getTraceCollector(); + DDSpan child1 = + (DDSpan) + quickTracer.buildSpan("datadog", "child1").asChildOf(localRoot.context()).start(); + DDSpan child2 = + (DDSpan) + quickTracer.buildSpan("datadog", "child2").asChildOf(localRoot.context()).start(); + + assertEquals(3, trace.getPendingReferenceCount()); + + child2.finish(); + + assertEquals(2, trace.getPendingReferenceCount()); + assertEquals(Arrays.asList(child2), new ArrayList<>(trace.getSpans())); + assertTrue(writer.isEmpty()); + assertEquals(0, writer.getTraceCount()); + + child1.finish(); + writer.waitForTraces(1); + + assertEquals(1, trace.getPendingReferenceCount()); + assertEquals(Arrays.asList(), new ArrayList<>(trace.getSpans())); + assertEquals(Arrays.asList(Arrays.asList(child1, child2)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + + localRoot.finish(); + writer.waitForTraces(2); + + assertEquals(0, trace.getPendingReferenceCount()); + assertTrue(trace.getSpans().isEmpty()); + assertEquals( + Arrays.asList(Arrays.asList(child1, child2), Arrays.asList(localRoot)), + new ArrayList<>(writer)); + assertEquals(2, writer.getTraceCount()); + } finally { + quickTracer.close(); + } + } + + @Test + @WithConfig(key = PARTIAL_FLUSH_MIN_SPANS, value = "2") + void partialFlushWithRootSpanClosedLast() throws InterruptedException, TimeoutException { + CoreTracer quickTracer = tracerBuilder().writer(writer).build(); + try { + DDSpan localRoot = (DDSpan) quickTracer.buildSpan("datadog", "root").start(); + PendingTrace trace = (PendingTrace) localRoot.context().getTraceCollector(); + DDSpan child1 = + (DDSpan) + quickTracer.buildSpan("datadog", "child1").asChildOf(localRoot.context()).start(); + DDSpan child2 = + (DDSpan) + quickTracer.buildSpan("datadog", "child2").asChildOf(localRoot.context()).start(); + + assertEquals(3, trace.getPendingReferenceCount()); + + child1.finish(); + + assertEquals(2, trace.getPendingReferenceCount()); + assertEquals(Arrays.asList(child1), new ArrayList<>(trace.getSpans())); + assertTrue(writer.isEmpty()); + assertEquals(0, writer.getTraceCount()); + + child2.finish(); + writer.waitForTraces(1); + + assertEquals(1, trace.getPendingReferenceCount()); + assertTrue(trace.getSpans().isEmpty()); + assertEquals(Arrays.asList(Arrays.asList(child2, child1)), new ArrayList<>(writer)); + assertEquals(1, writer.getTraceCount()); + + localRoot.finish(); + writer.waitForTraces(2); + + assertEquals(0, trace.getPendingReferenceCount()); + assertTrue(trace.getSpans().isEmpty()); + assertEquals( + Arrays.asList(Arrays.asList(child2, child1), Arrays.asList(localRoot)), + new ArrayList<>(writer)); + assertEquals(2, writer.getTraceCount()); + } finally { + quickTracer.close(); + } + } + + // spotless:off + @TableTest({ + "scenario | threadCount | spanCount", + "1 thread 1 span | 1 | 1 ", + "2 threads 1 span | 2 | 1 ", + "1 thread 2 spans | 1 | 2 ", + // Sufficiently large to fill the buffer: + "5 threads 2000 | 5 | 2000 ", + "10 threads 1000 | 10 | 1000 ", + "50 threads 500 | 50 | 500 " + }) + // spotless:on + void partialFlushConcurrencyTest(int threadCount, int spanCount) + throws InterruptedException, TimeoutException { + // reduce logging noise + Logger logger = (Logger) LoggerFactory.getLogger("datadog.trace"); + Level previousLevel = logger.getLevel(); + logger.setLevel(Level.OFF); + try { + CountDownLatch latch = new CountDownLatch(1); + DDSpan localRoot = (DDSpan) tracer.buildSpan("test", "root").start(); + PendingTrace localTraceCollector = (PendingTrace) localRoot.context().getTraceCollector(); + List exceptions = new ArrayList<>(); + + List threads = new ArrayList<>(threadCount); + for (int t = 0; t < threadCount; t++) { + Thread thread = + new Thread( + () -> { + try { + latch.await(); + List spans = new ArrayList<>(spanCount); + for (int s = 0; s < spanCount; s++) { + spans.add((DDSpan) tracer.startSpan("test", "child", localRoot.context())); + } + for (DDSpan span : spans) { + span.finish(); + } + } catch (Throwable ex) { + exceptions.add(ex); + } + }); + thread.start(); + threads.add(thread); + } + // Finish root span so other spans are queued automatically + localRoot.finish(); + writer.waitForTraces(1); + + latch.countDown(); + for (Thread thread : threads) { + thread.join(); + } + localTraceCollector.getPendingTraceBuffer().flush(); + + assertTrue(exceptions.isEmpty(), "Exceptions in worker threads: " + exceptions); + assertEquals(0, localTraceCollector.getPendingReferenceCount()); + int totalSpans = writer.stream().mapToInt(List::size).sum(); + assertEquals(threadCount * spanCount + 1, totalSpans); + } finally { + logger.setLevel(previousLevel); + } + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/TraceInterceptorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/TraceInterceptorTest.java new file mode 100644 index 00000000000..0d6f6788ca6 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/TraceInterceptorTest.java @@ -0,0 +1,251 @@ +package datadog.trace.core; + +import static java.util.Collections.emptyList; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import datadog.trace.TestInterceptor; +import datadog.trace.api.GlobalTracer; +import datadog.trace.api.TagMap; +import datadog.trace.api.config.TracerConfig; +import datadog.trace.api.interceptor.MutableSpan; +import datadog.trace.api.interceptor.TraceInterceptor; +import datadog.trace.common.writer.ListWriter; +import datadog.trace.junit.utils.config.WithConfig; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +import org.tabletest.junit.TableTest; + +@Timeout(10) +@WithConfig(key = TracerConfig.TRACE_GIT_METADATA_ENABLED, value = "false") +public class TraceInterceptorTest extends DDCoreJavaSpecification { + + private ListWriter writer; + private CoreTracer tracer; + + @BeforeEach + void setup() { + writer = new ListWriter(); + tracer = tracerBuilder().writer(writer).build(); + } + + @AfterEach + void cleanup() { + if (tracer != null) { + tracer.close(); + } + } + + @Test + void interceptorIsRegisteredAsService() { + assertInstanceOf(TestInterceptor.class, tracer.getInterceptors().interceptors()[0]); + } + + @Test + void interceptorsWithSamePriorityReplaced() { + int priority = 999; + TestInterceptor.priority = priority; + tracer + .getInterceptors() + .add( + new TraceInterceptor() { + @Override + public Collection onTraceComplete( + Collection trace) { + return emptyList(); + } + + @Override + public int priority() { + return priority; + } + }); + + TraceInterceptor[] interceptors = tracer.getInterceptors().interceptors(); + assertEquals(1, interceptors.length); + assertInstanceOf(TestInterceptor.class, interceptors[0]); + } + + @TableTest({ + "scenario | score | reverse", + "lower than existing | -1 | false ", + "higher than existing | 1000 | true " + }) + void interceptorsWithDifferentPrioritySorted(int score, boolean reverse) { + TraceInterceptor existingInterceptor = tracer.getInterceptors().interceptors()[0]; + TraceInterceptor newInterceptor = + new TraceInterceptor() { + @Override + public Collection onTraceComplete( + Collection trace) { + return emptyList(); + } + + @Override + public int priority() { + return score; + } + }; + tracer.getInterceptors().add(newInterceptor); + + List sorted = Arrays.asList(tracer.getInterceptors().interceptors()); + assertEquals(2, sorted.size()); + if (reverse) { + assertEquals(existingInterceptor, sorted.get(0)); + assertEquals(newInterceptor, sorted.get(1)); + } else { + assertEquals(newInterceptor, sorted.get(0)); + assertEquals(existingInterceptor, sorted.get(1)); + } + } + + @TableTest({ + "scenario | deltaPriority | expectedSize", + "below priority | -1 | 2 ", + "same priority | 0 | 1 ", + "above priority | 1 | 2 " + }) + void interceptorCanDiscardTrace(int deltaPriority, int expectedSize) + throws InterruptedException, TimeoutException { + int score = TestInterceptor.priority + deltaPriority; + AtomicBoolean called = new AtomicBoolean(false); + CountDownLatch latch = new CountDownLatch(1); + tracer + .getInterceptors() + .add( + new TraceInterceptor() { + @Override + public Collection onTraceComplete( + Collection trace) { + called.set(true); + latch.countDown(); + return emptyList(); + } + + @Override + public int priority() { + return score; + } + }); + + tracer.buildSpan("datadog", "test " + score).start().finish(); + if (score == TestInterceptor.priority) { + writer.waitForTraces(1); + } else { + latch.await(5, TimeUnit.SECONDS); + } + + TraceInterceptor[] interceptors = tracer.getInterceptors().interceptors(); + assertEquals(expectedSize, interceptors.length); + assertEquals(score != TestInterceptor.priority, called.get()); + assertEquals(score != TestInterceptor.priority, writer.isEmpty()); + } + + @Test + void interceptorCanModifySpan() throws InterruptedException, TimeoutException { + tracer + .getInterceptors() + .add( + new TraceInterceptor() { + @Override + public Collection onTraceComplete( + Collection trace) { + for (MutableSpan span : trace) { + span.setOperationName("modifiedON-" + span.getOperationName()) + .setServiceName("modifiedSN-" + span.getServiceName()) + .setResourceName("modifiedRN-" + span.getResourceName()) + .setSpanType("modifiedST-" + span.getSpanType()) + .setTag("boolean-tag", true) + .setTag("number-tag", 5.0) + .setTag("string-tag", "howdy") + .setError(true); + } + return trace; + } + + @Override + public int priority() { + return 1; + } + }); + + tracer.buildSpan("datadog", "test").start().finish(); + writer.waitForTraces(1); + + List trace = writer.firstTrace(); + assertEquals(1, trace.size()); + + DDSpan span = trace.get(0); + assertEquals("modifiedON-test", span.context().getOperationName().toString()); + assertTrue(span.getServiceName().startsWith("modifiedSN-")); + assertEquals("modifiedRN-modifiedON-test", span.getResourceName().toString()); + assertEquals("modifiedST-null", span.getSpanType()); + assertTrue(span.context().getErrorFlag()); + + TagMap tags = span.context().getTags(); + assertEquals(true, tags.get("boolean-tag")); + assertEquals(5.0, tags.get("number-tag")); + assertEquals("howdy", tags.get("string-tag")); + assertNotNull(tags.get("thread.name")); + assertNotNull(tags.get("thread.id")); + assertNotNull(tags.get("runtime-id")); + assertNotNull(tags.get("language")); + assertTrue(tags.size() >= 7); + } + + @Test + void robustWhenInterceptorReturnsNull() { + tracer + .getInterceptors() + .add( + new TraceInterceptor() { + @Override + public Collection onTraceComplete( + Collection trace) { + return null; + } + + @Override + public int priority() { + return 0; + } + }); + + DDSpan span = (DDSpan) tracer.startSpan("test", "test"); + span.phasedFinish(); + assertDoesNotThrow(() -> tracer.write(SpanList.of(span))); + } + + @Test + void registerInterceptorThroughBridge() { + GlobalTracer.registerIfAbsent(tracer); + TraceInterceptor interceptor = + new TraceInterceptor() { + @Override + public Collection onTraceComplete( + Collection trace) { + return trace; + } + + @Override + public int priority() { + return 38; + } + }; + + assertTrue(GlobalTracer.get().addTraceInterceptor(interceptor)); + assertTrue(Arrays.asList(tracer.getInterceptors().interceptors()).contains(interceptor)); + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/TracingConfigPollerTest.java b/dd-trace-core/src/test/java/datadog/trace/core/TracingConfigPollerTest.java new file mode 100644 index 00000000000..a5105d326c9 --- /dev/null +++ b/dd-trace-core/src/test/java/datadog/trace/core/TracingConfigPollerTest.java @@ -0,0 +1,301 @@ +package datadog.trace.core; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import datadog.communication.ddagent.DDAgentFeaturesDiscovery; +import datadog.communication.ddagent.SharedCommunicationObjects; +import datadog.metrics.api.Monitoring; +import datadog.remoteconfig.ConfigurationPoller; +import datadog.remoteconfig.Product; +import datadog.remoteconfig.state.ParsedConfigKey; +import datadog.remoteconfig.state.ProductListener; +import datadog.trace.api.datastreams.DataStreamsTransactionExtractor; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +import org.tabletest.junit.TableTest; + +@Timeout(10) +public class TracingConfigPollerTest extends DDCoreJavaSpecification { + + @Test + void mergeLibConfigsWithNullAndNonNullValues() { + TracingConfigPoller.LibConfig config1 = new TracingConfigPoller.LibConfig(); // all nulls + TracingConfigPoller.LibConfig config2 = new TracingConfigPoller.LibConfig(); + config2.tracingEnabled = true; + config2.debugEnabled = false; + config2.runtimeMetricsEnabled = true; + config2.logsInjectionEnabled = false; + config2.dataStreamsEnabled = true; + config2.traceSampleRate = 0.5; + config2.dynamicInstrumentationEnabled = true; + config2.exceptionReplayEnabled = false; + config2.codeOriginEnabled = true; + config2.liveDebuggingEnabled = false; + + TracingConfigPoller.LibConfig config3 = new TracingConfigPoller.LibConfig(); + config3.tracingEnabled = false; + config3.debugEnabled = true; + config3.runtimeMetricsEnabled = false; + config3.logsInjectionEnabled = true; + config3.dataStreamsEnabled = false; + config3.traceSampleRate = 0.8; + config3.dynamicInstrumentationEnabled = false; + config3.exceptionReplayEnabled = true; + config3.codeOriginEnabled = false; + config3.liveDebuggingEnabled = true; + + TracingConfigPoller.LibConfig merged = + TracingConfigPoller.LibConfig.mergeLibConfigs(Arrays.asList(config1, config2, config3)); + + assertNotNull(merged); + // Should take first non-null values from config2 + assertEquals(Boolean.TRUE, merged.tracingEnabled); + assertEquals(Boolean.FALSE, merged.debugEnabled); + assertEquals(Boolean.TRUE, merged.runtimeMetricsEnabled); + assertEquals(Boolean.FALSE, merged.logsInjectionEnabled); + assertEquals(Boolean.TRUE, merged.dataStreamsEnabled); + assertEquals(0.5, merged.traceSampleRate); + assertEquals(Boolean.TRUE, merged.dynamicInstrumentationEnabled); + assertEquals(Boolean.FALSE, merged.exceptionReplayEnabled); + assertEquals(Boolean.TRUE, merged.codeOriginEnabled); + assertEquals(Boolean.FALSE, merged.liveDebuggingEnabled); + } + + @TableTest({ + "scenario | service | env | clusterName | expectedPriority", + "service and env | test-service | staging | | 5 ", + "service and wildcard | test-service | * | | 4 ", + "wildcard and env | * | staging | | 3 ", + "cluster target | | | test-cluster | 2 ", + "wildcard org level | * | * | | 1 " + }) + void configPriorityCalculation( + String service, String env, String clusterName, int expectedPriority) { + TracingConfigPoller.ConfigOverrides configOverrides = new TracingConfigPoller.ConfigOverrides(); + if (service != null || env != null) { + configOverrides.serviceTarget = new TracingConfigPoller.ServiceTarget(); + configOverrides.serviceTarget.service = service; + configOverrides.serviceTarget.env = env; + } + if (clusterName != null) { + TracingConfigPoller.ClusterTarget clusterTarget = new TracingConfigPoller.ClusterTarget(); + clusterTarget.clusterName = clusterName; + clusterTarget.enabled = true; + configOverrides.k8sTargetV2 = new TracingConfigPoller.K8sTargetV2(); + configOverrides.k8sTargetV2.clusterTargets = Collections.singletonList(clusterTarget); + } + configOverrides.libConfig = new TracingConfigPoller.LibConfig(); + + assertEquals(expectedPriority, configOverrides.getOverridePriority()); + } + + @Test + void actualConfigCommitWithServiceAndOrgLevelConfigs() throws Exception { + ParsedConfigKey orgKey = ParsedConfigKey.parse("datadog/2/APM_TRACING/org_config/config"); + ParsedConfigKey serviceKey = + ParsedConfigKey.parse("datadog/2/APM_TRACING/service_config/config"); + ConfigurationPoller poller = mock(ConfigurationPoller.class); + SharedCommunicationObjects sco = createScoWithPoller(poller); + + ProductListener[] capturedUpdater = {null}; + doAnswer( + inv -> { + // capture config updater for further testing + capturedUpdater[0] = inv.getArgument(1, ProductListener.class); + return null; + }) + .when(poller) + .addListener(eq(Product.APM_TRACING), any(ProductListener.class)); + + CoreTracer tracer = + CoreTracer.builder().sharedCommunicationObjects(sco).pollForTracingConfiguration().build(); + unclosedTracers.add(tracer); + + try { + verify(poller).addListener(eq(Product.APM_TRACING), any(ProductListener.class)); + assertNotNull(capturedUpdater[0]); + assertEquals(Collections.emptyMap(), tracer.captureTraceConfig().getServiceMapping()); + assertNull(tracer.captureTraceConfig().getTraceSampleRate()); + + ProductListener updater = capturedUpdater[0]; + // Add org level config (priority 1) - should set service mapping + updater.accept( + orgKey, + ("{\n" + + " \"service_target\": {\n" + + " \"service\": \"*\",\n" + + " \"env\": \"*\"\n" + + " },\n" + + " \"lib_config\": {\n" + + " \"tracing_service_mapping\": [{\n" + + " \"from_key\": \"org-service\",\n" + + " \"to_name\": \"org-mapped\"\n" + + " }],\n" + + " \"tracing_sampling_rate\": 0.7\n" + + " }\n" + + "}") + .getBytes(StandardCharsets.UTF_8), + null); + // Add service level config (priority 4) - should override service mapping and add header tags + updater.accept( + serviceKey, + ("{\n" + + " \"service_target\": {\n" + + " \"service\": \"test-service\",\n" + + " \"env\": \"*\"\n" + + " },\n" + + " \"lib_config\": {\n" + + " \"tracing_service_mapping\": [{\n" + + " \"from_key\": \"service-specific\",\n" + + " \"to_name\": \"service-mapped\"\n" + + " }],\n" + + " \"tracing_header_tags\": [{\n" + + " \"header\": \"X-Custom-Header\",\n" + + " \"tag_name\": \"custom.header\"\n" + + " }],\n" + + " \"tracing_sampling_rate\": 1.3,\n" + + " \"data_streams_transaction_extractors\": [{\n" + + " \"name\": \"test\",\n" + + " \"type\": \"unknown\",\n" + + " \"value\": \"value\"\n" + + " }]\n" + + " }\n" + + "}") + .getBytes(StandardCharsets.UTF_8), + null); + // Commit both configs + updater.commit(null); + // Service level config should take precedence due to higher priority (4 vs 1) + assertEquals( + Collections.singletonMap("service-specific", "service-mapped"), + tracer.captureTraceConfig().getServiceMapping()); + assertEquals(1.0, tracer.captureTraceConfig().getTraceSampleRate()); + assertEquals( + Collections.singletonMap("x-custom-header", "custom.header"), + tracer.captureTraceConfig().getRequestHeaderTags()); + assertEquals( + Collections.singletonMap("x-custom-header", "custom.header"), + tracer.captureTraceConfig().getResponseHeaderTags()); + List extractors = + tracer.captureTraceConfig().getDataStreamsTransactionExtractors(); + assertEquals(1, extractors.size()); + assertEquals("test", extractors.get(0).getName()); + assertEquals(DataStreamsTransactionExtractor.Type.UNKNOWN, extractors.get(0).getType()); + assertEquals("value", extractors.get(0).getValue()); + // Remove service level config + updater.remove(serviceKey, null); + updater.commit(null); + // Should fall back to org level config + assertEquals( + Collections.singletonMap("org-service", "org-mapped"), + tracer.captureTraceConfig().getServiceMapping()); + assertEquals(0.7, tracer.captureTraceConfig().getTraceSampleRate()); + assertEquals(Collections.emptyMap(), tracer.captureTraceConfig().getRequestHeaderTags()); + assertEquals(Collections.emptyMap(), tracer.captureTraceConfig().getResponseHeaderTags()); + // Remove org level config + updater.remove(orgKey, null); + updater.commit(null); + // Should have no configs + assertEquals(Collections.emptyMap(), tracer.captureTraceConfig().getServiceMapping()); + assertNull(tracer.captureTraceConfig().getTraceSampleRate()); + } finally { + tracer.close(); + } + } + + @Test + void twoOrgLevelsConfigSettingDifferentFlagsWorks() throws Exception { + ParsedConfigKey orgConfig1Key = + ParsedConfigKey.parse("datadog/2/APM_TRACING/org_config/config1"); + ParsedConfigKey orgConfig2Key = + ParsedConfigKey.parse("datadog/2/APM_TRACING/org_config/config2"); + ConfigurationPoller poller = mock(ConfigurationPoller.class); + SharedCommunicationObjects sco = createScoWithPoller(poller); + + ProductListener[] capturedUpdater = {null}; + doAnswer( + inv -> { + // capture config updater for further testing + capturedUpdater[0] = inv.getArgument(1, ProductListener.class); + return null; + }) + .when(poller) + .addListener(eq(Product.APM_TRACING), any(ProductListener.class)); + + CoreTracer tracer = + CoreTracer.builder().sharedCommunicationObjects(sco).pollForTracingConfiguration().build(); + unclosedTracers.add(tracer); + + try { + verify(poller).addListener(eq(Product.APM_TRACING), any(ProductListener.class)); + assertTrue(tracer.captureTraceConfig().isTraceEnabled()); + assertFalse(tracer.captureTraceConfig().isDataStreamsEnabled()); + + ProductListener updater = capturedUpdater[0]; + // Add org level config with ApmTracing enabled + updater.accept( + orgConfig1Key, + ("{\n" + + " \"service_target\": {\n" + + " \"service\": \"*\",\n" + + " \"env\": \"*\"\n" + + " },\n" + + " \"lib_config\": {\n" + + " \"tracing_enabled\": true\n" + + " }\n" + + "}") + .getBytes(StandardCharsets.UTF_8), + null); + // Add second org level config with DataStreams enabled + updater.accept( + orgConfig2Key, + ("{\n" + + " \"service_target\": {\n" + + " \"service\": \"*\",\n" + + " \"env\": \"*\"\n" + + " },\n" + + " \"lib_config\": {\n" + + " \"data_streams_enabled\": true\n" + + " }\n" + + "}") + .getBytes(StandardCharsets.UTF_8), + null); + // Commit both configs + updater.commit(null); + // Both org level configs should be merged, with data streams enabled + assertTrue(tracer.captureTraceConfig().isTraceEnabled()); + assertTrue(tracer.captureTraceConfig().isDataStreamsEnabled()); + } finally { + tracer.close(); + } + } + + private SharedCommunicationObjects createScoWithPoller(ConfigurationPoller poller) + throws Exception { + SharedCommunicationObjects sco = new SharedCommunicationObjects(); + sco.agentHttpClient = mock(OkHttpClient.class); + sco.monitoring = mock(Monitoring.class); + sco.agentUrl = HttpUrl.get("https://example.com"); + sco.setFeaturesDiscovery(mock(DDAgentFeaturesDiscovery.class)); + Field pollerField = SharedCommunicationObjects.class.getDeclaredField("configurationPoller"); + pollerField.setAccessible(true); + pollerField.set(sco, poller); + return sco; + } +} From 0eb88944b019ef628dd3d4bb3cbf52866750fd2c Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Fri, 15 May 2026 11:09:45 -0400 Subject: [PATCH 025/478] fix(muzzle): temporarily excluded broken versions. (#11377) fix(muzzle): temporarily excluded broken versions. Co-authored-by: alexey.kuznetsov --- .../confluent-schema-registry-4.1/build.gradle | 15 ++++++++++++++- .../kafka/kafka-connect-0.11/build.gradle | 14 +++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/build.gradle b/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/build.gradle index 2d4a5765150..20f539f5abf 100644 --- a/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/build.gradle +++ b/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/build.gradle @@ -8,7 +8,20 @@ muzzle { versions = "[4.1.0,)" // broken POMs: depend on non-existent org.eclipse.jetty:jetty-bom:9.4.59 // can be fixed after https://github.com/confluentinc/kafka-connect-storage-common/issues/468 is resolved - skipVersions += ['7.4.14', '7.5.13', '7.6.10', '7.7.8', '7.8.7', '7.9.6'] + skipVersions += [ + '7.4.14', + '7.4.15', + '7.5.13', + '7.5.14', + '7.6.10', + '7.6.11', + '7.7.8', + '7.7.9', + '7.8.7', + '7.8.8', + '7.9.6', + '7.9.7' + ] excludeDependency "org.codehaus.jackson:jackson-mapper-asl" // missing on some releases assertInverse = true } diff --git a/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/build.gradle b/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/build.gradle index ea6a02a9457..dc82a555f28 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/build.gradle +++ b/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/build.gradle @@ -9,16 +9,28 @@ muzzle { skipVersions += [ '7.4.14-ce', '7.4.14-ccs', + '7.4.15-ce', + '7.4.15-ccs', '7.5.13-ce', '7.5.13-ccs', + '7.5.14-ce', + '7.5.14-ccs', '7.6.10-ce', '7.6.10-ccs', + '7.6.11-ce', + '7.6.11-ccs', '7.7.8-ce', '7.7.8-ccs', + '7.7.9-ce', + '7.7.9-ccs', '7.8.7-ce', '7.8.7-ccs', + '7.8.8-ce', + '7.8.8-ccs', '7.9.6-ce', - '7.9.6-ccs' + '7.9.6-ccs', + '7.9.7-ce', + '7.9.7-ccs' ] excludeDependency "io.confluent.cloud:*" excludeDependency "io.confluent.observability:*" From 66eda9ae3e6fc21318b466832eb418a64a1f47c4 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Fri, 15 May 2026 19:09:30 +0200 Subject: [PATCH 026/478] Migrate cross-project test source sharing to java-test-fixtures for Gradle 9.5 compatibility (#11367) build: use java-test-fixtures to share JFR test resources profiling-controller-openjdk used files(project(':...:profiling-controller-jfr').sourceSets.test.output) In Gradle 8 this worked: inside the `dependencies` closure, `project(':foo')` resolved via `Project.project(String)` -- which is a Groovy DSL lookup fallback, since `DependencyHandler` had no `project(String)` method -- returning the real `Project` -- which has the `sourceSets` property. Gradle 9.5 added `DependencyHandler.project(String)` that returns a `ProjectDependency`, which Groovy now resolves first. The instance is a `DefaultProjectDependency`, which has no `sourceSets` property, and as such fails with: ``` > Could not get unknown property 'sourceSets' for project ':dd-java-agent:agent-profiling:profiling-controller-jfr' of type org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency. ``` This commit instead rely on the java-test-fixtures plugin applied to profiling-controller-jfr to share test resources, consumer projects now declare : testFixtures(project(':...:profiling-controller-jfr')). build(mongo): remove broken sourceSets.test.output dependency lines Gradle 9.5 added `DependencyHandler.project(String)` returning a `ProjectDependency`, shadowing `Project.project(String)` in `dependencies` closures. Since `ProjectDependency` implementation do not has a `sourceSets` property it fails the build. The goal of using `files(project(':foo').sourceSets.test.output)` is to share test code in other projects which is supported by the test java-test-fixtures plugin that is already applied to the `:mongo-common` project. Also the nine mongo driver/test consumers already declared the correct `testFixtures(project(':...:mongo-common'))` so this commit drops the now-broken duplicate `sourceSets.test.output` dependency declarations. chore: Avoid jfp file extraction at class init Co-authored-by: brice.dutheil --- .../profiling-controller-jfr/build.gradle | 4 ++ .../controller/jfr/JfpUtilsTest.java | 12 +--- .../controller/jfr/JfpTestResources.java | 62 +++++++++++++++++++ .../overrides-nativemethodsample.jfp | 0 .../resources/overrides-objectallocation.jfp | 0 .../resources/overrides-oldobjectsample.jfp | 0 .../resources/overrides.jfp | 0 .../profiling-controller-openjdk/build.gradle | 2 +- .../openjdk/OpenJdkControllerTest.java | 6 +- .../profiling-controller-oracle/build.gradle | 1 - .../mongo-driver-3.1/build.gradle | 1 - .../mongo-driver-3.4/build.gradle | 1 - .../mongo-driver-3.6/build.gradle | 1 - .../mongo-driver-3.8/build.gradle | 1 - .../mongo-driver-4.0/build.gradle | 1 - .../mongo-test-async-3.3/build.gradle | 1 - .../mongo-test-core-3.1/build.gradle | 1 - .../mongo-test-core-3.7/build.gradle | 1 - .../mongo-test-sync-3.10/build.gradle | 1 - 19 files changed, 72 insertions(+), 24 deletions(-) create mode 100644 dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides-nativemethodsample.jfp (100%) rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides-objectallocation.jfp (100%) rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides-oldobjectsample.jfp (100%) rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides.jfp (100%) diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle index 132d7eb3aa4..de211639c87 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'java-test-fixtures' +} + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java index 00655fd9545..9e4e7c4e5b9 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java @@ -16,15 +16,6 @@ public class JfpUtilsTest { private static final String CONFIG_ENTRY = "jdk.ThreadAllocationStatistics#enabled"; private static final String CONFIG_OVERRIDE_ENTRY = "test.continuous.override#value"; - public static final String OVERRIDES = - JfpUtilsTest.class.getClassLoader().getResource("overrides.jfp").getFile(); - public static final String OVERRIDES_OLD_OBJECT_SAMPLE = - JfpUtilsTest.class.getClassLoader().getResource("overrides-oldobjectsample.jfp").getFile(); - public static final String OVERRIDES_OBJECT_ALLOCATION = - JfpUtilsTest.class.getClassLoader().getResource("overrides-objectallocation.jfp").getFile(); - public static final String OVERRIDES_NATIVE_METHOD_SAMPLE = - JfpUtilsTest.class.getClassLoader().getResource("overrides-nativemethodsample.jfp").getFile(); - @Test public void testLoadingInvalidOverride() throws IOException { final String INVALID_OVERRIDE = "really_non_existent_file.jfp"; @@ -42,7 +33,8 @@ public void testLoadingContinuousConfig() throws IOException { @Test public void testLoadingContinuousConfigWithOverride() throws IOException { - final Map config = JfpUtils.readJfpResources(JfpUtils.DEFAULT_JFP, OVERRIDES); + final Map config = + JfpUtils.readJfpResources(JfpUtils.DEFAULT_JFP, JfpTestResources.overrides()); assertEquals("true", config.get(CONFIG_ENTRY)); assertEquals("200", config.get(CONFIG_OVERRIDE_ENTRY)); } diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java new file mode 100644 index 00000000000..88cd0b6bca7 --- /dev/null +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java @@ -0,0 +1,62 @@ +package com.datadog.profiling.controller.jfr; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.concurrent.atomic.AtomicReference; + +public final class JfpTestResources { + private static final AtomicReference overrides = new AtomicReference<>(); + private static final AtomicReference overridesOldObjectSample = new AtomicReference<>(); + private static final AtomicReference overridesObjectAllocation = new AtomicReference<>(); + private static final AtomicReference overridesNativeMethodSample = + new AtomicReference<>(); + + private JfpTestResources() {} + + public static String overrides() { + return get(overrides, "overrides.jfp"); + } + + public static String overridesOldObjectSample() { + return get(overridesOldObjectSample, "overrides-oldobjectsample.jfp"); + } + + public static String overridesObjectAllocation() { + return get(overridesObjectAllocation, "overrides-objectallocation.jfp"); + } + + public static String overridesNativeMethodSample() { + return get(overridesNativeMethodSample, "overrides-nativemethodsample.jfp"); + } + + private static String get(AtomicReference ref, String resourceName) { + String v = ref.get(); + if (v != null) { + return v; + } + String computed = extract(resourceName); + return ref.compareAndSet(null, computed) ? computed : ref.get(); + } + + // Resources packaged in the testFixtures jar are not directly accessible as filesystem paths. + // Extract to a temp file so callers can use the path with java.io.File. + private static String extract(String resourceName) { + try { + Path temp = Files.createTempFile(resourceName.replace('.', '_'), ".jfp"); + temp.toFile().deleteOnExit(); + try (InputStream is = + JfpTestResources.class.getClassLoader().getResourceAsStream(resourceName)) { + if (is == null) { + throw new IllegalStateException("Test resource not found on classpath: " + resourceName); + } + Files.copy(is, temp, StandardCopyOption.REPLACE_EXISTING); + } + return temp.toAbsolutePath().toString(); + } catch (IOException e) { + throw new RuntimeException("Failed to extract test resource: " + resourceName, e); + } + } +} diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-nativemethodsample.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-nativemethodsample.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-nativemethodsample.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-nativemethodsample.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-objectallocation.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-objectallocation.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-objectallocation.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-objectallocation.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-oldobjectsample.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-oldobjectsample.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-oldobjectsample.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-oldobjectsample.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle index 5de63a998cb..ebe645ce175 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle @@ -28,7 +28,7 @@ dependencies { testImplementation libs.bundles.junit5 testImplementation libs.bundles.mockito - testImplementation files(project(':dd-java-agent:agent-profiling:profiling-controller-jfr').sourceSets.test.output) + testImplementation(testFixtures(project(':dd-java-agent:agent-profiling:profiling-controller-jfr'))) testImplementation project(':dd-java-agent:agent-profiling') } diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java index ef853d07b9a..eee7a2f9638 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java @@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assumptions.assumeFalse; import com.datadog.profiling.controller.ControllerContext; -import com.datadog.profiling.controller.jfr.JfpUtilsTest; +import com.datadog.profiling.controller.jfr.JfpTestResources; import com.datadog.profiling.utils.ProfilingMode; import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.RecordingData; @@ -76,7 +76,7 @@ public void testHeapProfilerIsDisabledOnUnsupportedVersion() throws Exception { @Test public void testHeapProfilerIsStillOverriddenOnUnsupportedVersion() throws Exception { Properties props = getConfigProperties(); - props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpUtilsTest.OVERRIDES_OLD_OBJECT_SAMPLE); + props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpTestResources.overridesOldObjectSample()); ConfigProvider configProvider = ConfigProvider.withPropertiesOverride(props); @@ -158,7 +158,7 @@ public void testAllocationProfilerIsDisabledOnUnsupportedVersion() throws Except @Test public void testAllocationProfilerIsStillOverriddenOnUnsupportedVersion() throws Exception { Properties props = getConfigProperties(); - props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpUtilsTest.OVERRIDES_OBJECT_ALLOCATION); + props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpTestResources.overridesObjectAllocation()); ConfigProvider configProvider = ConfigProvider.withPropertiesOverride(props); OpenJdkController controller = new OpenJdkController(configProvider); diff --git a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle index 8b6d7725eff..1b18f6015ae 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle @@ -21,7 +21,6 @@ dependencies { testImplementation libs.bundles.junit5 testImplementation libs.bundles.mockito - testImplementation files(project(':dd-java-agent:agent-profiling:profiling-controller-jfr').sourceSets.test.output) testImplementation project(':dd-java-agent:agent-profiling') } diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle index 7c9da94525f..72431e4eea4 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle @@ -30,7 +30,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle index 5bbd1a43204..b9d8fb54ce2 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle @@ -37,7 +37,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle index de3d1d0011e..4fa201cbd75 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle @@ -37,7 +37,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle index db1def27b2d..e6001a35fe8 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle @@ -37,7 +37,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle index 928546f28fc..526a239351b 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle @@ -41,7 +41,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() testImplementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '4.0.1' diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle index aa871b76a13..dadcb1afa34 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle @@ -11,7 +11,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle index a0f89a42216..fafc53dd04c 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle @@ -3,7 +3,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') dependencies { - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() // We need to pull in this dependency to get the 'suspend span' instrumentation for spock tests diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle index cdd6948ae80..75faf59a3f9 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle @@ -3,7 +3,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') dependencies { - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() // We need to pull in this dependency to get the 'suspend span' instrumentation for spock tests diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle index 18327f98667..a0fe07f63d3 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle @@ -18,7 +18,6 @@ dependencies { } testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() From ed7e5f3aacc98652eddd0022079500a9e1959acb Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Fri, 15 May 2026 16:28:22 -0400 Subject: [PATCH 027/478] Mark PendingTraceBufferTest tests flaky (#11383) Mark PendingTraceBufferTest tests flaky Co-authored-by: sarah.chen --- .../test/java/datadog/trace/core/PendingTraceBufferTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java index 2e15f97a6ff..fd794bb2231 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java @@ -35,6 +35,7 @@ import datadog.trace.core.propagation.PropagationTags; import datadog.trace.core.scopemanager.ContinuableScopeManager; import datadog.trace.test.util.DDJavaSpecification; +import datadog.trace.test.util.Flaky; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -195,6 +196,7 @@ void prioritySamplingIsAlwaysSent() { assertTrue(metadataChecker.hasSamplingPriority); } + @Flaky("Flaky on ibm8, semeru8, and semeru17 JVMs after migration from Groovy to JUnit") @Test void bufferFullYieldsImmediateWrite() { int capacity = delayingBuffer.getQueue().capacity(); @@ -219,6 +221,7 @@ void bufferFullYieldsImmediateWrite() { assertEquals(0, pendingTrace.getIsEnqueued()); } + @Flaky("Flaky on ibm8, semeru8, and semeru17 JVMs after migration from Groovy to JUnit") @Test void longRunningTraceBufferFullDoesNotTriggerWrite() { int capacity = delayingBuffer.getQueue().capacity(); @@ -378,6 +381,7 @@ public boolean writeOnBufferFull() { assertEquals(3, counter.get()); } + @Flaky("Flaky on semeru17 JVM after migration from Groovy to JUnit") @Test void samePendingTraceIsNotEnqueuedMultipleTimes() { when(tracer.getPartialFlushMinSpans()).thenReturn(10000); From 19ee457c12dde52789a6f69604236cb4867e5074 Mon Sep 17 00:00:00 2001 From: Brian Marks Date: Fri, 15 May 2026 17:13:40 -0400 Subject: [PATCH 028/478] Mark check raw file injection as @Flaky on Zulu 8 (#11375) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mark check raw file injection as @Flaky on Zulu 8 The smoketest fails ~0.25% of the time on Zulu 8 with `logLines.size() == 7` (got 3) — root cause is a JDK 8 race between java.util.logging.LogManager. and ClassLoader.initSystemClassLoader() when a JFR-instrumented class (Zulu 8 backports JFR) loads JUL during agent premain. The Agent.java waitForJUL guard mitigates most cases but leaks ~0.25%. The same failure mode already justifies @Flaky on Oracle JDK 8 (same JFR backport) and IBM 8 (IBMSASL triggers the same race); Zulu 8 belongs alongside them. This adds JavaVirtualMachine.isZulu8() + a test + extends the @Flaky condition. No production code path changes — Zulu 8 users on a custom LogManager (e.g. Log4j2 JUL bridge) are still potentially affected by the underlying agent race; this only suppresses the flaky CI signal. Match isIbm8 ordering: vendor check first, drop redundant javadoc ci: retrigger (muzzle Maven mirror flakes) Merge branch 'master' into brian.marks/flaky-zulu8-log-injection Co-authored-by: devflow.devflow-routing-intake --- .../java/datadog/environment/JavaVirtualMachine.java | 4 ++++ .../datadog/environment/JavaVirtualMachineTest.java | 10 ++++++++++ .../datadog/smoketest/LogInjectionSmokeTest.groovy | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/components/environment/src/main/java/datadog/environment/JavaVirtualMachine.java b/components/environment/src/main/java/datadog/environment/JavaVirtualMachine.java index ed1ec0ae215..a71d66859bc 100644 --- a/components/environment/src/main/java/datadog/environment/JavaVirtualMachine.java +++ b/components/environment/src/main/java/datadog/environment/JavaVirtualMachine.java @@ -116,6 +116,10 @@ public static boolean isIbm8() { return isIbm() && isJavaVersion(8); } + public static boolean isZulu8() { + return runtime.vendor.contains("Azul") && isJavaVersion(8); + } + public static boolean isGraalVM() { return runtime.vendorVersion.toLowerCase().contains("graalvm"); } diff --git a/components/environment/src/test/java/datadog/environment/JavaVirtualMachineTest.java b/components/environment/src/test/java/datadog/environment/JavaVirtualMachineTest.java index 7d540045205..a81c83456f9 100644 --- a/components/environment/src/test/java/datadog/environment/JavaVirtualMachineTest.java +++ b/components/environment/src/test/java/datadog/environment/JavaVirtualMachineTest.java @@ -138,6 +138,16 @@ void onlyOnOracleJDK8() { assertTrue(JavaVirtualMachine.isOracleJDK8()); } + @Test + @EnabledIfSystemProperty(named = "java.vm.vendor", matches = ".*Azul.*") + @EnabledOnJre(JAVA_8) + void onlyOnZulu8() { + assertFalse(JavaVirtualMachine.isGraalVM()); + assertFalse(JavaVirtualMachine.isIbm8()); + assertFalse(JavaVirtualMachine.isOracleJDK8()); + assertTrue(JavaVirtualMachine.isZulu8()); + } + @ParameterizedTest @CsvSource( value = { diff --git a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy index 85e4168605a..5a640da4ae8 100644 --- a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy +++ b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy @@ -416,7 +416,7 @@ abstract class LogInjectionSmokeTest extends AbstractSmokeTest { return unmangled.split(" ")[1..2] } - @Flaky(condition = () -> JavaVirtualMachine.isIbm8() || JavaVirtualMachine.isOracleJDK8()) + @Flaky(condition = () -> JavaVirtualMachine.isIbm8() || JavaVirtualMachine.isOracleJDK8() || JavaVirtualMachine.isZulu8()) def "check raw file injection"() { when: def count = waitForTraceCountAlive(2) From 867bcd4b0f26d51ebc4ce644ecf2ad75c0a48deb Mon Sep 17 00:00:00 2001 From: "dd-octo-sts[bot]" <200755185+dd-octo-sts[bot]@users.noreply.github.com> Date: Mon, 18 May 2026 01:54:49 +0000 Subject: [PATCH 029/478] chore: Update Gradle dependencies (#11390) chore: Update Gradle dependencies Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: alexey.kuznetsov --- dd-java-agent/agent-profiling/gradle.lockfile | 2 +- .../profiling-controller-ddprof/gradle.lockfile | 2 +- .../profiling-controller-jfr/gradle.lockfile | 12 ++++++------ .../profiling-controller-openjdk/gradle.lockfile | 2 +- .../profiling-controller-oracle/gradle.lockfile | 2 +- .../profiling-uploader/gradle.lockfile | 2 +- dd-java-agent/gradle.lockfile | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/dd-java-agent/agent-profiling/gradle.lockfile b/dd-java-agent/agent-profiling/gradle.lockfile index 4ac7b77ffb3..870f6f14a31 100644 --- a/dd-java-agent/agent-profiling/gradle.lockfile +++ b/dd-java-agent/agent-profiling/gradle.lockfile @@ -1,6 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. +at.yawk.lz4:lz4-java:1.11.0=runtimeClasspath,testRuntimeClasspath cafe.cryptography:curve25519-elisabeth:0.1.0=runtimeClasspath,testRuntimeClasspath cafe.cryptography:ed25519-elisabeth:0.1.0=runtimeClasspath,testRuntimeClasspath ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath @@ -74,7 +75,6 @@ org.junit.platform:junit-platform-engine:1.14.1=testCompileClasspath,testRuntime org.junit.platform:junit-platform-launcher:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.0=spotbugs org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath -org.lz4:lz4-java:1.7.1=runtimeClasspath,testRuntimeClasspath org.mockito:mockito-core:4.4.0=testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=testCompileClasspath,testRuntimeClasspath org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/agent-profiling/profiling-controller-ddprof/gradle.lockfile b/dd-java-agent/agent-profiling/profiling-controller-ddprof/gradle.lockfile index 642d2b47786..ba27c207783 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/gradle.lockfile +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/gradle.lockfile @@ -1,6 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. +at.yawk.lz4:lz4-java:1.11.0=testRuntimeClasspath cafe.cryptography:curve25519-elisabeth:0.1.0=testRuntimeClasspath cafe.cryptography:ed25519-elisabeth:0.1.0=testRuntimeClasspath ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath @@ -74,7 +75,6 @@ org.junit.platform:junit-platform-engine:1.14.1=testCompileClasspath,testRuntime org.junit.platform:junit-platform-launcher:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.0=spotbugs org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath -org.lz4:lz4-java:1.7.1=testRuntimeClasspath org.mockito:mockito-core:4.4.0=testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=testCompileClasspath,testRuntimeClasspath org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/gradle.lockfile b/dd-java-agent/agent-profiling/profiling-controller-jfr/gradle.lockfile index 8db69e946db..284f2a72143 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/gradle.lockfile +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/gradle.lockfile @@ -3,7 +3,7 @@ # This file is expected to be part of source control. ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath ch.qos.logback:logback-core:1.2.13=testCompileClasspath,testRuntimeClasspath -com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,runtimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath com.github.javaparser:javaparser-core:3.25.6=codenarc com.github.spotbugs:spotbugs-annotations:4.9.8=compileClasspath,spotbugs,testCompileClasspath,testRuntimeClasspath com.github.spotbugs:spotbugs:4.9.8=spotbugs @@ -53,8 +53,8 @@ org.jacoco:org.jacoco.agent:0.8.14=jacocoAgent,jacocoAnt org.jacoco:org.jacoco.ant:0.8.14=jacocoAnt org.jacoco:org.jacoco.core:0.8.14=jacocoAnt org.jacoco:org.jacoco.report:0.8.14=jacocoAnt -org.jctools:jctools-core-jdk11:4.0.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.jctools:jctools-core:4.0.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.jctools:jctools-core-jdk11:4.0.6=compileClasspath,runtimeClasspath,testCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath +org.jctools:jctools-core:4.0.6=compileClasspath,runtimeClasspath,testCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.14.1=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.14.1=testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.14.1=testCompileClasspath,testRuntimeClasspath @@ -80,14 +80,14 @@ org.owasp.encoder:encoder:1.2.3=testCompileClasspath,testRuntimeClasspath org.slf4j:jcl-over-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath org.slf4j:jul-to-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath org.slf4j:log4j-over-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath -org.slf4j:slf4j-api:1.7.30=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:1.7.30=compileClasspath,runtimeClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath org.slf4j:slf4j-api:1.7.32=testCompileClasspath,testRuntimeClasspath org.slf4j:slf4j-api:2.0.17=spotbugs,spotbugsSlf4j org.slf4j:slf4j-simple:2.0.17=spotbugsSlf4j -org.snakeyaml:snakeyaml-engine:2.9=runtimeClasspath,testRuntimeClasspath +org.snakeyaml:snakeyaml-engine:2.9=runtimeClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath org.spockframework:spock-bom:2.4-groovy-3.0=testCompileClasspath,testRuntimeClasspath org.spockframework:spock-core:2.4-groovy-3.0=testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-junit:1.2.1=testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-parser:1.2.0=testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs -empty=spotbugsPlugins,testAnnotationProcessor +empty=spotbugsPlugins,testAnnotationProcessor,testFixturesAnnotationProcessor diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/gradle.lockfile b/dd-java-agent/agent-profiling/profiling-controller-openjdk/gradle.lockfile index 036e69731db..8a04950c341 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/gradle.lockfile +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/gradle.lockfile @@ -1,6 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. +at.yawk.lz4:lz4-java:1.11.0=testRuntimeClasspath cafe.cryptography:curve25519-elisabeth:0.1.0=testRuntimeClasspath cafe.cryptography:ed25519-elisabeth:0.1.0=testRuntimeClasspath ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath @@ -74,7 +75,6 @@ org.junit.platform:junit-platform-engine:1.14.1=testCompileClasspath,testRuntime org.junit.platform:junit-platform-launcher:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.0=spotbugs org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath -org.lz4:lz4-java:1.7.1=testRuntimeClasspath org.mockito:mockito-core:4.4.0=testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=testCompileClasspath,testRuntimeClasspath org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/agent-profiling/profiling-controller-oracle/gradle.lockfile b/dd-java-agent/agent-profiling/profiling-controller-oracle/gradle.lockfile index 572f4573ac4..b6d834b0892 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-oracle/gradle.lockfile +++ b/dd-java-agent/agent-profiling/profiling-controller-oracle/gradle.lockfile @@ -1,6 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. +at.yawk.lz4:lz4-java:1.11.0=testRuntimeClasspath cafe.cryptography:curve25519-elisabeth:0.1.0=testRuntimeClasspath cafe.cryptography:ed25519-elisabeth:0.1.0=testRuntimeClasspath ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath @@ -74,7 +75,6 @@ org.junit.platform:junit-platform-engine:1.14.1=testCompileClasspath,testRuntime org.junit.platform:junit-platform-launcher:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.0=spotbugs org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath -org.lz4:lz4-java:1.7.1=testRuntimeClasspath org.mockito:mockito-core:4.4.0=testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=testCompileClasspath,testRuntimeClasspath org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/agent-profiling/profiling-uploader/gradle.lockfile b/dd-java-agent/agent-profiling/profiling-uploader/gradle.lockfile index 033be6e0071..7fd0437e76f 100644 --- a/dd-java-agent/agent-profiling/profiling-uploader/gradle.lockfile +++ b/dd-java-agent/agent-profiling/profiling-uploader/gradle.lockfile @@ -1,6 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. +at.yawk.lz4:lz4-java:1.11.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath cafe.cryptography:curve25519-elisabeth:0.1.0=runtimeClasspath,testRuntimeClasspath cafe.cryptography:ed25519-elisabeth:0.1.0=runtimeClasspath,testRuntimeClasspath ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath @@ -83,7 +84,6 @@ org.junit.platform:junit-platform-engine:1.14.1=testCompileClasspath,testRuntime org.junit.platform:junit-platform-launcher:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.0=spotbugs org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath -org.lz4:lz4-java:1.7.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.mockito:mockito-core:4.4.0=testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=testCompileClasspath,testRuntimeClasspath org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/gradle.lockfile b/dd-java-agent/gradle.lockfile index fa8ba4fc43e..116b98f1c09 100644 --- a/dd-java-agent/gradle.lockfile +++ b/dd-java-agent/gradle.lockfile @@ -1,6 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. +at.yawk.lz4:lz4-java:1.11.0=sharedShadowInclude cafe.cryptography:curve25519-elisabeth:0.1.0=sharedShadowInclude,testRuntimeClasspath,traceShadowInclude cafe.cryptography:ed25519-elisabeth:0.1.0=sharedShadowInclude,testRuntimeClasspath,traceShadowInclude ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath @@ -79,7 +80,6 @@ org.junit.platform:junit-platform-engine:1.14.1=testCompileClasspath,testRuntime org.junit.platform:junit-platform-launcher:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.0=spotbugs org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath -org.lz4:lz4-java:1.7.1=sharedShadowInclude org.mockito:mockito-core:4.4.0=testRuntimeClasspath org.msgpack:msgpack-core:0.8.24=testRuntimeClasspath org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath From 8a2aa87564c801c11467ce1120dbd2c27b4a13f0 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Mon, 18 May 2026 08:49:11 +0100 Subject: [PATCH 030/478] Update opentelemetry-api version in reactor example (#11386) Update opentelemetry-api version in reactor example Co-authored-by: devflow.devflow-routing-intake --- docs/reactor/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reactor/pom.xml b/docs/reactor/pom.xml index f67dfdcfc7f..95454bf6879 100644 --- a/docs/reactor/pom.xml +++ b/docs/reactor/pom.xml @@ -34,7 +34,7 @@ io.opentelemetry opentelemetry-api - 1.43.0 + 1.62.0 com.datadoghq From ef9d47c116488167757400bdc00082e33abdb888 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 18 May 2026 13:05:02 +0200 Subject: [PATCH 031/478] Servlet: avoid NPE when headerNames is null (#11394) Servlet: avoid NPE when headerNames is null Co-authored-by: devflow.devflow-routing-intake --- .../instrumentation/servlet3/HttpServletExtractAdapter.java | 3 ++- .../test/server/http/HttpServletRequestExtractAdapter.java | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/HttpServletExtractAdapter.java b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/HttpServletExtractAdapter.java index 75981facf00..6fce09dfdb2 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/HttpServletExtractAdapter.java +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/HttpServletExtractAdapter.java @@ -30,7 +30,8 @@ public static final class Request extends HttpServletExtractAdapter getHeaderNames(HttpServletRequest request) { - return request.getHeaderNames(); + final Enumeration ret = request.getHeaderNames(); + return ret != null ? ret : emptyEnumeration(); } @Override diff --git a/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/server/http/HttpServletRequestExtractAdapter.java b/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/server/http/HttpServletRequestExtractAdapter.java index 6f835ab619a..9fd47af1ab4 100644 --- a/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/server/http/HttpServletRequestExtractAdapter.java +++ b/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/server/http/HttpServletRequestExtractAdapter.java @@ -20,6 +20,9 @@ public class HttpServletRequestExtractAdapter public void forEachKey( final HttpServletRequest carrier, final AgentPropagation.KeyClassifier classifier) { Enumeration headerNames = carrier.getHeaderNames(); + if (headerNames == null) { + return; + } while (headerNames.hasMoreElements()) { final String header = headerNames.nextElement(); if (!classifier.accept(header, carrier.getHeader(header))) { From 5df351459ca10d98ba491396af9c2aecf03517c7 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 18 May 2026 13:14:02 +0200 Subject: [PATCH 032/478] Reactor: avoid attaching context if it's already attached (#11393) Reactor: avoid attaching context if it's already attached Co-authored-by: andrea.marziali --- .../reactivestreams/PublisherInstrumentation.java | 2 +- .../reactivestreams/SubscriberInstrumentation.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/PublisherInstrumentation.java b/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/PublisherInstrumentation.java index 221a9c5c369..8d0d5873eea 100644 --- a/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/PublisherInstrumentation.java +++ b/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/PublisherInstrumentation.java @@ -63,7 +63,7 @@ public static ContextScope onSubscribe( final Context current = InstrumentationContext.get(Subscriber.class, Context.class) .putIfAbsent(s, context != null ? context : activeContext); - if (current != null) { + if (current != null && activeContext != current) { return current.attach(); } diff --git a/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/SubscriberInstrumentation.java b/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/SubscriberInstrumentation.java index d184e80e728..b9874674df5 100644 --- a/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/SubscriberInstrumentation.java +++ b/dd-java-agent/instrumentation/reactive-streams-1.0/src/main/java/datadog/trace/instrumentation/reactivestreams/SubscriberInstrumentation.java @@ -56,7 +56,7 @@ public static ContextScope before(@Advice.This final Subscriber self) { return null; } final Context context = InstrumentationContext.get(Subscriber.class, Context.class).get(self); - return context == null ? null : context.attach(); + return context == null || context == currentContext ? null : context.attach(); } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) From 5b063483e74d9556965221c84158d51fdb8371fd Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 18 May 2026 13:59:18 +0200 Subject: [PATCH 033/478] Avoid extracting the baggage from null values (#11396) Avoid extracting the baggage from null values Co-authored-by: devflow.devflow-routing-intake --- .../java/datadog/trace/core/baggage/BaggagePropagator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java b/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java index f0375af964f..6a601a0e9de 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/baggage/BaggagePropagator.java @@ -209,7 +209,10 @@ private Baggage parseBaggageHeaders(String input) { } @Override - public void accept(String key, String value) { + public void accept(String key, @Nullable String value) { + if (value == null) { + return; + } // Only process tags that are relevant to baggage if (BAGGAGE_KEY.equalsIgnoreCase(key)) { Baggage parsed = parseBaggageHeaders(value); From 7c12554afef631a9d7d08be5b9368c665e5e210d Mon Sep 17 00:00:00 2001 From: "dd-octo-sts[bot]" <200755185+dd-octo-sts[bot]@users.noreply.github.com> Date: Mon, 18 May 2026 13:14:19 +0000 Subject: [PATCH 034/478] chore: Update instrumentation Gradle dependencies (#11391) chore: Update instrumentation Gradle dependencies Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: alexey.kuznetsov --- .../armeria/armeria-grpc-0.84/gradle.lockfile | 99 ++++++++-------- .../armeria-jetty-1.24/gradle.lockfile | 72 +++++------ .../aws-java-dynamodb-2.0/gradle.lockfile | 54 ++++----- .../aws-java-eventbridge-2.0/gradle.lockfile | 54 ++++----- .../aws-java/aws-java-s3-2.0/gradle.lockfile | 60 +++++----- .../aws-java/aws-java-sdk-2.2/gradle.lockfile | 62 +++++----- .../aws-java/aws-java-sfn-2.0/gradle.lockfile | 54 ++++----- .../aws-java/aws-java-sns-2.0/gradle.lockfile | 54 ++++----- .../gradle.lockfile | 10 +- .../jetty-server-12.0/gradle.lockfile | 3 +- .../instrumentation/jsp-2.3/gradle.lockfile | 8 +- .../lettuce/lettuce-5.0/gradle.lockfile | 20 ++-- .../netty/netty-4.1/gradle.lockfile | 14 +-- .../openai-java-3.0/gradle.lockfile | 6 +- .../selenium-3.13/gradle.lockfile | 61 +++++----- .../tomcat/tomcat-5.5/gradle.lockfile | 12 +- .../wildfly-9.0/gradle.lockfile | 112 +++++++++--------- .../gradle.lockfile | 2 +- 18 files changed, 379 insertions(+), 378 deletions(-) diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/gradle.lockfile b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/gradle.lockfile index d821d7fb9a6..faff58f5216 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/gradle.lockfile +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/gradle.lockfile @@ -5,8 +5,8 @@ cafe.cryptography:curve25519-elisabeth:0.1.0=latestDepForkedTestCompileProtoPath cafe.cryptography:ed25519-elisabeth:0.1.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileProtoPath,testRuntimeClasspath ch.qos.logback:logback-classic:1.2.13=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath ch.qos.logback:logback-core:1.2.13=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.aayushatharva.brotli4j:brotli4j:1.22.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -com.aayushatharva.brotli4j:service:1.22.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.aayushatharva.brotli4j:brotli4j:1.23.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.aayushatharva.brotli4j:service:1.23.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.blogspot.mydailyjava:weak-lock-free:0.17=buildTimeInstrumentationPlugin,compileClasspath,compileProtoPath,latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath com.datadoghq.okhttp3:okhttp:3.12.15=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath com.datadoghq.okio:okio:1.17.6=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath @@ -18,14 +18,14 @@ com.fasterxml.jackson.core:jackson-annotations:2.11.2=testCompileClasspath,testC com.fasterxml.jackson.core:jackson-annotations:2.21=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.fasterxml.jackson.core:jackson-annotations:2.9.8=compileClasspath,compileProtoPath com.fasterxml.jackson.core:jackson-core:2.11.2=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-core:2.21.2=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.21.3=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.fasterxml.jackson.core:jackson-core:2.9.8=compileClasspath,compileProtoPath com.fasterxml.jackson.core:jackson-databind:2.11.2=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.21.2=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.21.3=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.fasterxml.jackson.core:jackson-databind:2.9.8=compileClasspath,compileProtoPath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.21.2=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.21.2=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -com.fasterxml.jackson:jackson-bom:2.21.2=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.21.3=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.21.3=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.21.3=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.github.javaparser:javaparser-core:3.25.6=codenarc com.github.jnr:jffi:1.3.14=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileProtoPath,testRuntimeClasspath com.github.jnr:jnr-a64asm:1.0.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileProtoPath,testRuntimeClasspath @@ -41,19 +41,18 @@ com.github.stephenc.jcip:jcip-annotations:1.0-1=spotbugs com.google.android:annotations:4.1.1.4=compileClasspath,compileProtoPath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileProtoPath,testRuntimeClasspath com.google.api.grpc:proto-google-common-protos:1.12.0=compileClasspath,compileProtoPath com.google.api.grpc:proto-google-common-protos:1.17.0=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.google.api.grpc:proto-google-common-protos:2.63.2=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.64.1=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.google.auto.service:auto-service-annotations:1.1.1=annotationProcessor,compileClasspath,compileProtoPath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,testAnnotationProcessor,testCompileClasspath,testCompileProtoPath com.google.auto.service:auto-service:1.1.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.auto:auto-common:1.2.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,compileClasspath,compileProtoPath,latestDepForkedTestAnnotationProcessor,latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,spotbugs,testAnnotationProcessor,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.google.code.gson:gson:2.12.1=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -com.google.code.gson:gson:2.13.2=spotbugs +com.google.code.gson:gson:2.13.2=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,spotbugs com.google.code.gson:gson:2.7=compileClasspath,compileProtoPath com.google.code.gson:gson:2.8.6=testCompileProtoPath,testRuntimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.errorprone:error_prone_annotations:2.3.2=compileClasspath,compileProtoPath com.google.errorprone:error_prone_annotations:2.41.0=spotbugs -com.google.errorprone:error_prone_annotations:2.45.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.48.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.google.errorprone:error_prone_annotations:2.5.1=testCompileClasspath com.google.errorprone:error_prone_annotations:2.9.0=testCompileProtoPath,testRuntimeClasspath com.google.guava:failureaccess:1.0.1=annotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath @@ -78,15 +77,15 @@ com.google.re2j:re2j:1.2=compileClasspath,compileProtoPath com.google.re2j:re2j:1.7=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileProtoPath,testRuntimeClasspath com.linecorp.armeria:armeria-grpc-protocol:0.84.0=compileClasspath,compileProtoPath com.linecorp.armeria:armeria-grpc-protocol:1.0.0=testCompileProtoPath,testRuntimeClasspath -com.linecorp.armeria:armeria-grpc-protocol:1.38.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.linecorp.armeria:armeria-grpc-protocol:1.39.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.linecorp.armeria:armeria-grpc:0.84.0=compileClasspath,compileProtoPath com.linecorp.armeria:armeria-grpc:1.0.0=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.linecorp.armeria:armeria-grpc:1.38.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.linecorp.armeria:armeria-grpc:1.39.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.linecorp.armeria:armeria-junit4:1.0.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.linecorp.armeria:armeria-protobuf:1.38.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.linecorp.armeria:armeria-protobuf:1.39.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.linecorp.armeria:armeria:0.84.0=compileClasspath,compileProtoPath com.linecorp.armeria:armeria:1.0.0=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -com.linecorp.armeria:armeria:1.38.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +com.linecorp.armeria:armeria:1.39.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath com.squareup.moshi:moshi:1.11.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath com.squareup.okhttp3:okhttp:3.12.12=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath @@ -97,87 +96,87 @@ commons-io:commons-io:2.11.0=latestDepForkedTestCompileClasspath,latestDepForked commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,compileProtoPath,latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath io.grpc:grpc-api:1.42.2=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.grpc:grpc-api:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-api:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.grpc:grpc-context:1.20.0=compileClasspath,compileProtoPath io.grpc:grpc-context:1.42.2=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.grpc:grpc-context:1.80.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-context:1.81.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.grpc:grpc-core:1.20.0=compileClasspath,compileProtoPath io.grpc:grpc-core:1.31.1=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.grpc:grpc-core:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-core:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.grpc:grpc-protobuf-lite:1.20.0=compileClasspath,compileProtoPath io.grpc:grpc-protobuf-lite:1.31.1=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.grpc:grpc-protobuf-lite:1.80.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.81.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.grpc:grpc-protobuf:1.20.0=compileClasspath,compileProtoPath io.grpc:grpc-protobuf:1.31.1=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.grpc:grpc-protobuf:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-protobuf:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.grpc:grpc-services:1.20.0=compileClasspath,compileProtoPath io.grpc:grpc-services:1.31.1=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.grpc:grpc-services:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-services:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.grpc:grpc-stub:1.20.0=compileClasspath,compileProtoPath io.grpc:grpc-stub:1.42.2=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.grpc:grpc-stub:1.80.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.grpc:grpc-util:1.80.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-stub:1.81.0=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.grpc:grpc-util:1.81.0=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.grpc:protoc-gen-grpc-java:1.42.2=protobufToolsLocator_grpc io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileProtoPath,testRuntimeClasspath io.micrometer:context-propagation:1.2.1=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.micrometer:micrometer-commons:1.16.4=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-commons:1.16.5=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.micrometer:micrometer-core:1.1.4=compileClasspath,compileProtoPath -io.micrometer:micrometer-core:1.16.4=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-core:1.16.5=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.micrometer:micrometer-core:1.5.4=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.micrometer:micrometer-observation:1.16.4=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-observation:1.16.5=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-buffer:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-buffer:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-codec-base:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-codec-compression:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-codec-compression:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-codec-dns:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-codec-dns:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-codec-haproxy:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-codec-haproxy:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-codec-haproxy:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-codec-haproxy:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-codec-http2:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-codec-http2:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-codec-http:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-codec-http:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.51.Final=testCompileProtoPath,testRuntimeClasspath -io.netty:netty-codec-socks:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-codec:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath io.netty:netty-common:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-common:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-common:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.51.Final=testCompileProtoPath,testRuntimeClasspath -io.netty:netty-handler-proxy:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-handler:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-handler:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-resolver-dns-classes-macos:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-resolver-dns-native-macos:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-classes-macos:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-native-macos:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-resolver-dns:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-resolver-dns:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-resolver:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-resolver:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-tcnative-boringssl-static:2.0.23.Final=compileClasspath,compileProtoPath io.netty:netty-tcnative-boringssl-static:2.0.31.Final=testCompileProtoPath,testRuntimeClasspath -io.netty:netty-tcnative-boringssl-static:2.0.75.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-tcnative-classes:2.0.75.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-transport-classes-kqueue:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-tcnative-boringssl-static:2.0.77.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-tcnative-classes:2.0.77.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-kqueue:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-transport-native-epoll:4.1.51.Final=testCompileProtoPath,testRuntimeClasspath -io.netty:netty-transport-native-epoll:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath -io.netty:netty-transport-native-kqueue:4.2.12.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-epoll:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-kqueue:4.2.13.Final=latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-transport-native-unix-common:4.1.51.Final=testCompileProtoPath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.34.Final=compileClasspath,compileProtoPath io.netty:netty-transport:4.1.51.Final=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath -io.netty:netty-transport:4.2.12.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath io.opencensus:opencensus-api:0.19.2=compileClasspath,compileProtoPath io.opencensus:opencensus-contrib-grpc-metrics:0.19.2=compileClasspath,compileProtoPath io.perfmark:perfmark-api:0.19.0=testCompileProtoPath,testRuntimeClasspath @@ -215,7 +214,7 @@ org.codehaus.groovy:groovy-xml:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.25=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath,testCompileClasspath,testCompileProtoPath,testRuntimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.18=testCompileProtoPath,testRuntimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.26=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.27=latestDepForkedTestCompileClasspath,latestDepForkedTestCompileProtoPath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestCompileProtoPath,latestDepTestRuntimeClasspath org.codenarc:CodeNarc:3.7.0=codenarc org.curioswitch.curiostack:protobuf-jackson:0.3.1=compileClasspath,compileProtoPath org.curioswitch.curiostack:protobuf-jackson:1.1.0=testCompileClasspath,testCompileProtoPath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/gradle.lockfile b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/gradle.lockfile index 3eb74dc764b..99a05543695 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/gradle.lockfile +++ b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/gradle.lockfile @@ -6,9 +6,9 @@ cafe.cryptography:ed25519-elisabeth:0.1.0=jetty11LatestDepTestRuntimeClasspath,j ch.qos.logback:logback-classic:1.2.13=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath ch.qos.logback:logback-core:1.2.13=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.aayushatharva.brotli4j:brotli4j:1.12.0=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -com.aayushatharva.brotli4j:brotli4j:1.22.0=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +com.aayushatharva.brotli4j:brotli4j:1.23.0=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath com.aayushatharva.brotli4j:service:1.12.0=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -com.aayushatharva.brotli4j:service:1.22.0=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +com.aayushatharva.brotli4j:service:1.23.0=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath com.blogspot.mydailyjava:weak-lock-free:0.17=buildTimeInstrumentationPlugin,compileClasspath,jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq.okhttp3:okhttp:3.12.15=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq.okio:okio:1.17.6=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -19,15 +19,15 @@ com.datadoghq:sketches-java:0.8.3=jetty11LatestDepTestRuntimeClasspath,jetty11Te com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath com.fasterxml.jackson.core:jackson-annotations:2.21=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -com.fasterxml.jackson.core:jackson-core:2.21.2=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.21.3=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.21.2=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.21.3=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.21.2=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.21.3=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.21.2=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.21.3=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -com.fasterxml.jackson:jackson-bom:2.21.2=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.21.3=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.github.javaparser:javaparser-core:3.25.6=codenarc com.github.jnr:jffi:1.3.14=jetty11LatestDepTestRuntimeClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath com.github.jnr:jnr-a64asm:1.0.0=jetty11LatestDepTestRuntimeClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath @@ -54,11 +54,11 @@ com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=anno com.google.j2objc:j2objc-annotations:2.8=annotationProcessor,jetty11LatestDepTestAnnotationProcessor,jetty11TestAnnotationProcessor,jetty9LatestDepTestAnnotationProcessor,jetty9TestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.re2j:re2j:1.7=jetty11LatestDepTestRuntimeClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath com.linecorp.armeria:armeria-jetty11:1.24.0=jetty11TestCompileClasspath,jetty11TestRuntimeClasspath -com.linecorp.armeria:armeria-jetty11:1.38.0=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath +com.linecorp.armeria:armeria-jetty11:1.39.0=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath com.linecorp.armeria:armeria-jetty9:1.24.0=compileClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -com.linecorp.armeria:armeria-jetty9:1.38.0=jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +com.linecorp.armeria:armeria-jetty9:1.39.0=jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.linecorp.armeria:armeria:1.24.0=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -com.linecorp.armeria:armeria:1.38.0=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +com.linecorp.armeria:armeria:1.39.0=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath com.squareup.moshi:moshi:1.11.0=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.squareup.okhttp3:logging-interceptor:3.12.12=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.squareup.okhttp3:okhttp:3.12.12=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -71,56 +71,56 @@ de.thetaphi:forbiddenapis:3.10=compileClasspath,jetty11LatestDepTestCompileClass io.leangen.geantyref:geantyref:1.3.16=jetty11LatestDepTestRuntimeClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.micrometer:context-propagation:1.2.1=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.micrometer:micrometer-commons:1.11.1=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.micrometer:micrometer-commons:1.16.4=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.micrometer:micrometer-commons:1.16.5=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.micrometer:micrometer-core:1.11.1=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.micrometer:micrometer-core:1.16.4=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.micrometer:micrometer-core:1.16.5=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.micrometer:micrometer-observation:1.11.1=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.micrometer:micrometer-observation:1.16.4=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.micrometer:micrometer-observation:1.16.5=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-buffer:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath -io.netty:netty-codec-base:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath -io.netty:netty-codec-compression:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-codec-compression:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-codec-dns:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-codec-haproxy:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-codec-haproxy:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-codec-haproxy:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-codec-http2:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-codec-http:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-codec-socks:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-codec:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath io.netty:netty-common:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-common:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-handler-proxy:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-handler:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-handler:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-resolver-dns-classes-macos:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-resolver-dns-classes-macos:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-classes-macos:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-resolver-dns-native-macos:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-resolver-dns-native-macos:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-native-macos:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-resolver-dns:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-resolver:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-tcnative-boringssl-static:2.0.61.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-tcnative-boringssl-static:2.0.75.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-tcnative-boringssl-static:2.0.77.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-tcnative-classes:2.0.61.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-tcnative-classes:2.0.75.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-tcnative-classes:2.0.77.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-transport-classes-kqueue:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-transport-classes-kqueue:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-transport-classes-kqueue:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-transport-native-epoll:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-transport-native-epoll:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-transport-native-kqueue:4.1.93.Final=jetty11TestRuntimeClasspath,jetty9TestRuntimeClasspath -io.netty:netty-transport-native-kqueue:4.2.12.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-transport-native-kqueue:4.2.13.Final=jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.netty:netty-transport:4.1.93.Final=compileClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath -io.netty:netty-transport:4.2.12.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.13.Final=jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=jetty11LatestDepTestRuntimeClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath jakarta.websocket:jakarta.websocket-client-api:2.0.0=jetty11LatestDepTestRuntimeClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=compileClasspath,jetty11LatestDepTestCompileClasspath,jetty11LatestDepTestRuntimeClasspath,jetty11TestCompileClasspath,jetty11TestRuntimeClasspath,jetty9LatestDepTestCompileClasspath,jetty9LatestDepTestRuntimeClasspath,jetty9TestCompileClasspath,jetty9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile index e925c6c2584..2a73e696215 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile @@ -154,57 +154,57 @@ org.testcontainers:localstack:1.21.4=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.30.22=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:dynamodb:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:dynamodb:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:dynamodb:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.30.22=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile index 97137b0d838..d0ce3b46ad0 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile @@ -155,83 +155,83 @@ org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,lat org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.27.19=compileClasspath software.amazon.awssdk:annotations:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.27.23=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.27.19=compileClasspath software.amazon.awssdk:auth:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.27.19=compileClasspath software.amazon.awssdk:aws-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.27.19=compileClasspath software.amazon.awssdk:aws-json-protocol:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:checksums-spi:2.27.19=compileClasspath software.amazon.awssdk:checksums-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.27.19=compileClasspath software.amazon.awssdk:checksums:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.27.19=compileClasspath software.amazon.awssdk:endpoints-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.27.19=compileClasspath software.amazon.awssdk:eventbridge:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:eventbridge:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:eventbridge:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.27.19=compileClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.27.19=compileClasspath software.amazon.awssdk:http-auth-aws:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.27.19=compileClasspath software.amazon.awssdk:http-auth-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.27.19=compileClasspath software.amazon.awssdk:http-auth:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.27.19=compileClasspath software.amazon.awssdk:http-client-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.27.19=compileClasspath software.amazon.awssdk:identity-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.27.19=compileClasspath software.amazon.awssdk:json-utils:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.27.19=compileClasspath software.amazon.awssdk:metrics-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.27.23=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.27.19=compileClasspath software.amazon.awssdk:profiles:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.27.19=compileClasspath software.amazon.awssdk:protocol-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.27.19=compileClasspath software.amazon.awssdk:regions:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.27.19=compileClasspath software.amazon.awssdk:retries-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.27.19=compileClasspath software.amazon.awssdk:retries:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.27.19=compileClasspath software.amazon.awssdk:sdk-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sqs:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.27.19=compileClasspath software.amazon.awssdk:third-party-jackson-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.27.19=compileClasspath software.amazon.awssdk:utils:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile index 1beb23f3618..df6b69136b7 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile @@ -154,63 +154,63 @@ org.testcontainers:localstack:1.21.4=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.29.26=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:arns:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:arns:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:arns:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-xml-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-xml-protocol:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:crt-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:crt-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:crt-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.29.26=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:s3:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:s3:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:s3:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile index c6ca917d606..9189ccb029d 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile @@ -209,13 +209,13 @@ software.amazon.awssdk:annotations:2.19.0=payloadTaggingForkedTestCompileClasspa software.amazon.awssdk:annotations:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:annotations:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:annotations:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:annotations:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:apache-client:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:apache-client:2.19.0=payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:apache-client:2.2.0=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingTestCompileClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingTestCompileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:apache-client:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.25.40=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:apigateway:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:apigateway:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apigateway:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath @@ -226,35 +226,35 @@ software.amazon.awssdk:auth:2.19.0=payloadTaggingForkedTestCompileClasspath,payl software.amazon.awssdk:auth:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:auth:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:auth:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:aws-cbor-protocol:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-cbor-protocol:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-core:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:aws-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-core:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.18.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:checksums:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:checksums:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:crt-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:dynamodb:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:dynamodb:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -264,57 +264,57 @@ software.amazon.awssdk:endpoints-spi:2.18.40=dsmForkedTestCompileClasspath,dsmFo software.amazon.awssdk:endpoints-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.7.4=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:http-client-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:json-utils:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:json-utils:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:json-utils:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:kinesis:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:kinesis:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:kinesis:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:kinesis:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:kinesis:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.19.0=payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.2.0=testRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.20.33=latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.25.40=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:profiles:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:profiles:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:profiles:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:profiles:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:profiles:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:protocol-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:rds:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:rds:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath @@ -322,9 +322,9 @@ software.amazon.awssdk:regions:2.19.0=payloadTaggingForkedTestCompileClasspath,p software.amazon.awssdk:regions:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:regions:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:regions:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:retries:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:s3:2.18.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:s3:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:s3:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -333,12 +333,12 @@ software.amazon.awssdk:sdk-core:2.19.0=payloadTaggingForkedTestCompileClasspath, software.amazon.awssdk:sdk-core:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sdk-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:sns:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:sns:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sns:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:sns:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:sns:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:sqs:2.18.40=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:sqs:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sqs:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -347,17 +347,17 @@ software.amazon.awssdk:third-party-jackson-core:2.18.40=dsmForkedTestCompileClas software.amazon.awssdk:third-party-jackson-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:utils:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:utils:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:utils:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:utils:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:utils:2.44.4=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.7=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon:flow:1.7=compileClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile index d5f8f0f762b..1f312e53760 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile @@ -162,45 +162,45 @@ org.tabletest:tabletest-parser:1.2.0=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.15.35=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.15.35=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sfn:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sfn:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sfn:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile index 19427a65fd6..edec922d386 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile @@ -156,56 +156,56 @@ org.testcontainers:localstack:1.21.4=latestDepForkedTestCompileClasspath,latestD org.testcontainers:testcontainers:1.21.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs software.amazon.awssdk:annotations:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.25.40=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.25.40=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.25.40=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.44.4=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.44.7=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sns:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sns:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sqs:2.25.40=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.44.4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.44.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/gradle.lockfile b/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/gradle.lockfile index 7e1e329b58c..9e7066f4f03 100644 --- a/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/gradle.lockfile +++ b/dd-java-agent/instrumentation/confluent-schema-registry/confluent-schema-registry-4.1/gradle.lockfile @@ -72,14 +72,14 @@ de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepTestCompileClasspath,la io.confluent:common-config:4.1.0=compileClasspath io.confluent:common-utils:4.1.0=compileClasspath io.confluent:common-utils:7.4.0=testCompileClasspath,testRuntimeClasspath -io.confluent:common-utils:8.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.confluent:common-utils:8.2.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.confluent:kafka-avro-serializer:7.4.0=testCompileClasspath,testRuntimeClasspath -io.confluent:kafka-avro-serializer:8.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.confluent:kafka-avro-serializer:8.2.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.confluent:kafka-schema-registry-client:4.1.0=compileClasspath io.confluent:kafka-schema-registry-client:7.4.0=testCompileClasspath,testRuntimeClasspath -io.confluent:kafka-schema-registry-client:8.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.confluent:kafka-schema-registry-client:8.2.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.confluent:kafka-schema-serializer:7.4.0=testCompileClasspath,testRuntimeClasspath -io.confluent:kafka-schema-serializer:8.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.confluent:kafka-schema-serializer:8.2.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.confluent:logredactor-metrics:1.0.11=testCompileClasspath,testRuntimeClasspath io.confluent:logredactor-metrics:1.0.17=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.confluent:logredactor:1.0.11=testCompileClasspath,testRuntimeClasspath @@ -116,7 +116,7 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.3.4=latestDepTestCompileClasspath org.apache.httpcomponents.core5:httpcore5:5.3.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.kafka:kafka-clients:1.1.0-cp1=compileClasspath org.apache.kafka:kafka-clients:7.4.0-ccs=testCompileClasspath,testRuntimeClasspath -org.apache.kafka:kafka-clients:8.2.0-ccs=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.kafka:kafka-clients:8.2.1-ccs=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.logging.log4j:log4j-api:2.25.2=spotbugs org.apache.logging.log4j:log4j-core:2.25.2=spotbugs org.apache.zookeeper:zookeeper:3.4.10=compileClasspath diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile index 42a393bd944..9114bf95f91 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/gradle.lockfile @@ -223,7 +223,8 @@ org.slf4j:jul-to-slf4j:1.7.30=ee10ForkedTestCompileClasspath,ee10ForkedTestRunti org.slf4j:log4j-over-slf4j:1.7.30=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.slf4j:slf4j-api:1.7.30=buildTimeInstrumentationPlugin,compileClasspath,main_java17CompileClasspath,main_java17RuntimeClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath org.slf4j:slf4j-api:1.7.32=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.slf4j:slf4j-api:2.0.17=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs,spotbugsSlf4j +org.slf4j:slf4j-api:2.0.17=spotbugs,spotbugsSlf4j +org.slf4j:slf4j-api:2.0.18=ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.slf4j:slf4j-simple:2.0.17=spotbugsSlf4j org.snakeyaml:snakeyaml-engine:2.9=buildTimeInstrumentationPlugin,ee10ForkedTestRuntimeClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestRuntimeClasspath,ee10TestRuntimeClasspath,ee8LatestDepTestRuntimeClasspath,ee8TestRuntimeClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestRuntimeClasspath,latestDepTestRuntimeClasspath,main_java17RuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath org.spockframework:spock-bom:2.4-groovy-3.0=ee10ForkedTestCompileClasspath,ee10ForkedTestRuntimeClasspath,ee10LatestDepForkedTestCompileClasspath,ee10LatestDepForkedTestRuntimeClasspath,ee10LatestDepTestCompileClasspath,ee10LatestDepTestRuntimeClasspath,ee10TestCompileClasspath,ee10TestRuntimeClasspath,ee8LatestDepTestCompileClasspath,ee8LatestDepTestRuntimeClasspath,ee8TestCompileClasspath,ee8TestRuntimeClasspath,ee9LatestDepTestCompileClasspath,ee9LatestDepTestRuntimeClasspath,ee9TestCompileClasspath,ee9TestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/jsp-2.3/gradle.lockfile b/dd-java-agent/instrumentation/jsp-2.3/gradle.lockfile index f1d91119265..e79546530b4 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/gradle.lockfile +++ b/dd-java-agent/instrumentation/jsp-2.3/gradle.lockfile @@ -67,13 +67,13 @@ org.apache.commons:commons-text:1.14.0=spotbugs org.apache.logging.log4j:log4j-api:2.25.2=spotbugs org.apache.logging.log4j:log4j-core:2.25.2=spotbugs org.apache.tomcat.embed:tomcat-embed-core:7.0.37=testCompileClasspath,testRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-core:9.0.117=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-el:9.0.117=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-core:9.0.118=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-el:9.0.118=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-jasper:7.0.37=testCompileClasspath,testRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-jasper:9.0.117=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-jasper:9.0.118=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-logging-juli:7.0.37=testCompileClasspath,testRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-logging-juli:9.0.0.M6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.apache.tomcat:tomcat-annotations-api:9.0.117=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.apache.tomcat:tomcat-annotations-api:9.0.118=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.apache.tomcat:tomcat-api:7.0.20=compileClasspath org.apache.tomcat:tomcat-el-api:7.0.20=compileClasspath org.apache.tomcat:tomcat-jasper-el:7.0.20=compileClasspath diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/gradle.lockfile b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/gradle.lockfile index a20f940f8bf..9f923baccdf 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/gradle.lockfile @@ -59,22 +59,22 @@ commons-io:commons-io:2.20.0=spotbugs de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.lettuce:lettuce-core:5.0.0.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.lettuce:lettuce-core:7.5.1.RELEASE=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.lettuce:lettuce-core:7.5.2.RELEASE=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-buffer:4.1.15.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-base:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-dns:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.15.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.1.15.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.15.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-resolver-dns:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.15.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.15.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport:4.2.5.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.13.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor:reactor-core:3.1.0.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath io.projectreactor:reactor-core:3.6.6=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile b/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile index 9145df7dcbf..42c2a688c9e 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile +++ b/dd-java-agent/instrumentation/netty/netty-4.1/gradle.lockfile @@ -72,7 +72,7 @@ io.netty:netty-codec:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRun io.netty:netty-common:4.1.0.Final=compileClasspath io.netty:netty-common:4.1.29.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-handler-proxy:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.1.133.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.29.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-handler:4.1.0.Final=compileClasspath io.netty:netty-handler:4.1.29.Final=testCompileClasspath,testRuntimeClasspath @@ -81,11 +81,11 @@ io.netty:netty-resolver-dns:4.1.19.Final=testCompileClasspath,testRuntimeClasspa io.netty:netty-resolver:4.1.0.Final=compileClasspath io.netty:netty-resolver:4.1.29.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-resolver:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport-classes-kqueue:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport-native-epoll:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.1.133.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-kqueue:4.1.133.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-epoll:4.1.133.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.29.Final=testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-kqueue:4.1.121.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-kqueue:4.1.133.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.29.Final=testCompileClasspath,testRuntimeClasspath io.netty:netty-transport-native-unix-common:4.2.13.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.0.Final=compileClasspath @@ -111,9 +111,9 @@ org.apache.logging.log4j:log4j-api:2.25.2=spotbugs org.apache.logging.log4j:log4j-core:2.25.2=spotbugs org.apiguardian:apiguardian-api:1.1.2=latestDepTestCompileClasspath,testCompileClasspath org.asynchttpclient:async-http-client-netty-utils:2.1.0=testCompileClasspath,testRuntimeClasspath -org.asynchttpclient:async-http-client-netty-utils:2.14.5=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.asynchttpclient:async-http-client-netty-utils:2.15.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.asynchttpclient:async-http-client:2.1.0=testCompileClasspath,testRuntimeClasspath -org.asynchttpclient:async-http-client:2.14.5=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.asynchttpclient:async-http-client:2.15.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.checkerframework:checker-qual:3.33.0=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor org.codehaus.groovy:groovy-ant:3.0.23=codenarc org.codehaus.groovy:groovy-docgenerator:3.0.23=codenarc diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile index f4c04212179..46887205275 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/gradle.lockfile @@ -50,11 +50,11 @@ com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=anno com.google.j2objc:j2objc-annotations:2.8=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.re2j:re2j:1.7=latestDepTestRuntimeClasspath,testRuntimeClasspath com.openai:openai-java-client-okhttp:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.openai:openai-java-client-okhttp:4.35.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.openai:openai-java-client-okhttp:4.36.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.openai:openai-java-core:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.openai:openai-java-core:4.35.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.openai:openai-java-core:4.36.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.openai:openai-java:3.0.1=compileClasspath,testCompileClasspath,testRuntimeClasspath -com.openai:openai-java:4.35.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.openai:openai-java:4.36.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.squareup.moshi:moshi:1.11.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath com.squareup.okhttp3:logging-interceptor:4.12.0=testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/selenium-3.13/gradle.lockfile b/dd-java-agent/instrumentation/selenium-3.13/gradle.lockfile index c0462504da8..3053837f9a2 100644 --- a/dd-java-agent/instrumentation/selenium-3.13/gradle.lockfile +++ b/dd-java-agent/instrumentation/selenium-3.13/gradle.lockfile @@ -35,13 +35,14 @@ com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,compileClasspath,lates com.google.code.gson:gson:2.13.2=spotbugs com.google.errorprone:error_prone_annotations:2.1.3=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor -com.google.errorprone:error_prone_annotations:2.41.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs +com.google.errorprone:error_prone_annotations:2.41.0=spotbugs +com.google.errorprone:error_prone_annotations:2.47.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.guava:failureaccess:1.0.1=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor com.google.guava:failureaccess:1.0.3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.guava:guava:20.0=testFixturesCompileClasspath,testFixturesRuntimeClasspath com.google.guava:guava:25.0-jre=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.guava:guava:32.0.1-jre=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor -com.google.guava:guava:33.5.0-jre=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.google.guava:guava:33.6.0-jre=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,latestDepTestAnnotationProcessor,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testAnnotationProcessor com.google.j2objc:j2objc-annotations:1.1=compileClasspath,testCompileClasspath,testRuntimeClasspath com.google.j2objc:j2objc-annotations:2.8=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor @@ -68,17 +69,17 @@ commons-logging:commons-logging:1.3.5=latestDepTestCompileClasspath,latestDepTes commons-net:commons-net:3.9.0=testCompileClasspath,testRuntimeClasspath de.thetaphi:forbiddenapis:3.10=compileClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-api:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-common:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-context:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-exporter-logging:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-sdk-common:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-sdk-logs:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-sdk-metrics:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-sdk-trace:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-sdk:1.60.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-api:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-common:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-context:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-exporter-logging:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-sdk-common:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-sdk-logs:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-sdk-metrics:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-sdk-trace:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-sdk:1.62.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.3.0=latestDepTestRuntimeClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs @@ -178,32 +179,32 @@ org.ow2.asm:asm:9.9.1=buildTimeInstrumentationPlugin,compileClasspath,latestDepT org.seleniumhq.selenium:htmlunit-driver:2.70.0=testCompileClasspath,testRuntimeClasspath org.seleniumhq.selenium:htmlunit3-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-api:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-api:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-api:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-chrome-driver:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-chrome-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.seleniumhq.selenium:selenium-chromium-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.seleniumhq.selenium:selenium-devtools-v145:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.seleniumhq.selenium:selenium-devtools-v146:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.seleniumhq.selenium:selenium-devtools-v147:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-chrome-driver:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-chromium-driver:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-devtools-v146:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-devtools-v147:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-devtools-v148:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-edge-driver:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-edge-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-edge-driver:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-firefox-driver:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-firefox-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.seleniumhq.selenium:selenium-http:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-firefox-driver:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-http:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-ie-driver:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-ie-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-ie-driver:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-java:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-java:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.seleniumhq.selenium:selenium-json:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.seleniumhq.selenium:selenium-manager:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-java:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-json:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-manager:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-opera-driver:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-os:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-os:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-remote-driver:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-remote-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-remote-driver:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-safari-driver:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-safari-driver:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-safari-driver:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.seleniumhq.selenium:selenium-support:3.141.59=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.seleniumhq.selenium:selenium-support:4.43.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.seleniumhq.selenium:selenium-support:4.44.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.skyscreamer:jsonassert:1.5.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath org.slf4j:jcl-over-slf4j:1.7.30=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath org.slf4j:jul-to-slf4j:1.7.30=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile index daea1ed999f..f69c133937f 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/gradle.lockfile @@ -72,16 +72,16 @@ org.apache.commons:commons-lang3:3.19.0=latest10ForkedTestCompileClasspath,lates org.apache.commons:commons-text:1.14.0=spotbugs org.apache.logging.log4j:log4j-api:2.25.2=spotbugs org.apache.logging.log4j:log4j-core:2.25.2=spotbugs -org.apache.tomcat.embed:tomcat-embed-core:10.1.54=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-core:10.1.55=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-core:11.0.22=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-core:9.0.117=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-websocket:10.1.54=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-core:9.0.118=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-websocket:10.1.55=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath org.apache.tomcat.embed:tomcat-embed-websocket:11.0.22=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.apache.tomcat.embed:tomcat-embed-websocket:9.0.117=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath +org.apache.tomcat.embed:tomcat-embed-websocket:9.0.118=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath org.apache.tomcat:jakartaee-migration:1.0.10=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.apache.tomcat:tomcat-annotations-api:10.1.54=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath +org.apache.tomcat:tomcat-annotations-api:10.1.55=latest10ForkedTestCompileClasspath,latest10ForkedTestRuntimeClasspath,latest10TestCompileClasspath,latest10TestRuntimeClasspath org.apache.tomcat:tomcat-annotations-api:11.0.22=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.apache.tomcat:tomcat-annotations-api:9.0.117=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath +org.apache.tomcat:tomcat-annotations-api:9.0.118=tomcat9TestCompileClasspath,tomcat9TestRuntimeClasspath org.apache.tomcat:tomcat-websocket-api:8.0.1=compileClasspath org.apache.tomcat:tomcat-websocket:8.0.1=compileClasspath org.apiguardian:apiguardian-api:1.1.2=latest10ForkedTestCompileClasspath,latest10TestCompileClasspath,latestDepForkedTestCompileClasspath,latestDepTestCompileClasspath,testCompileClasspath,tomcat9TestCompileClasspath diff --git a/dd-java-agent/instrumentation/wildfly-9.0/gradle.lockfile b/dd-java-agent/instrumentation/wildfly-9.0/gradle.lockfile index 7b338bc2c5c..d6862b9e5d7 100644 --- a/dd-java-agent/instrumentation/wildfly-9.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/wildfly-9.0/gradle.lockfile @@ -62,7 +62,7 @@ io.smallrye:jandex:3.5.3=latestDepForkedTestCompileClasspath,latestDepForkedTest io.sqreen:libsqreen:17.3.0=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath io.undertow:undertow-core:1.2.8.Final=compileClasspath io.undertow:undertow-core:2.3.7.Final=testCompileClasspath,testRuntimeClasspath -io.undertow:undertow-core:2.4.0.RC4=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.undertow:undertow-core:2.4.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath jakarta.servlet:jakarta.servlet-api:6.0.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.0=spotbugs @@ -211,132 +211,132 @@ org.wildfly.common:wildfly-common:1.6.0.Final=testCompileClasspath,testRuntimeCl org.wildfly.common:wildfly-common:2.0.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-controller-client:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-controller-client:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-controller-client:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-controller-client:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-controller:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-controller:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-controller:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-controller:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-core-management-client:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-core-management-client:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-core-management-client:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-core-security-api:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-core-security:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-core-security:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-core-security:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-core-security:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-deployment-repository:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-deployment-repository:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-deployment-repository:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-deployment-repository:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-domain-http-interface:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-domain-http-interface:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-domain-http-interface:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-domain-http-interface:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-domain-management:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-domain-management:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-domain-management:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-domain-management:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-embedded:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-embedded:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.wildfly.core:wildfly-io-spi:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-embedded:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-io-spi:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-io:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-io:21.1.0.Final=testCompileClasspath,testRuntimeClasspath org.wildfly.core:wildfly-network:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-network:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-network:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-network:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-platform-mbean:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-platform-mbean:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-platform-mbean:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-platform-mbean:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-process-controller:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-process-controller:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-process-controller:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-process-controller:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-protocol:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-protocol:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-protocol:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-protocol:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-remoting:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-remoting:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-remoting:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-remoting:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-request-controller:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-self-contained:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-server:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-server:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-server:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -org.wildfly.core:wildfly-service:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-server:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-service:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.core:wildfly-version:1.0.0.Final=compileClasspath org.wildfly.core:wildfly-version:21.1.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.core:wildfly-version:32.0.0.Beta7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.core:wildfly-version:32.0.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security.elytron-web:undertow-server:4.0.0.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security.elytron-web:undertow-server:4.1.2.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security.elytron-web:undertow-server:4.2.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-asn1:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-asn1:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-asn1:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-audit:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-audit:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-audit:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-auth-server-deprecated:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-auth-server-deprecated:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-auth-server-deprecated:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-auth-server-http:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-auth-server-http:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-auth-server-http:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-auth-server-sasl:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-auth-server-sasl:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-auth-server-sasl:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-auth-server:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-auth-server:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-auth-server:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-auth-util:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-auth-util:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-auth-util:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-auth:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-auth:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-auth:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-base:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-base:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-base:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-client:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-client:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-client:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-credential-source-impl:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-credential-source-impl:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-credential-source-impl:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-credential-store:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-credential-store:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-credential-store:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-credential:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-credential:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-credential:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-encryption:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-encryption:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-encryption:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-http-util:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-http-util:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-http-util:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-http:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-http:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-http:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-keystore:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-keystore:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-keystore:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-mechanism-digest:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-mechanism-digest:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-mechanism-digest:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-mechanism-gssapi:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-mechanism-gssapi:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-mechanism-gssapi:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-mechanism:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-mechanism:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-mechanism:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-password-impl:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-password-impl:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-password-impl:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-permission:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-permission:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-permission:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-provider-util:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-provider-util:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-provider-util:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-realm:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-realm:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-realm:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-sasl-anonymous:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-sasl-anonymous:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-sasl-anonymous:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-sasl-auth-util:1.20.2.Final=testCompileClasspath,testRuntimeClasspath org.wildfly.security:wildfly-elytron-sasl-auth-util:2.5.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-sasl-digest:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-sasl-digest:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-sasl-digest:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-sasl-localuser:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-sasl-localuser:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-sasl-localuser:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-sasl:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-sasl:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-sasl:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-security-manager-action:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-security-manager-action:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-security-manager-action:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-security-manager:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-security-manager:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-security-manager:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-ssh-util:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-ssh-util:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-ssh-util:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-ssl:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-ssl:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-ssl:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-util:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-util:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-util:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-x500-cert-acme:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-x500-cert-acme:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-x500-cert-acme:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-x500-cert-util:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-x500-cert-util:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-x500-cert-util:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-x500-cert:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-x500-cert:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-x500-cert:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-elytron-x500:2.2.1.Final=testCompileClasspath,testRuntimeClasspath -org.wildfly.security:wildfly-elytron-x500:2.8.4.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.wildfly.security:wildfly-elytron-x500:2.9.0.Final=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.wildfly.security:wildfly-security-manager:1.1.2.Final=compileClasspath org.wildfly:wildfly-dist:21.0.0.Final=wildflyTest org.wildfly:wildfly-dist:40.0.0.Beta1=wildflyLatestDepTest diff --git a/dd-smoke-tests/profiling-integration-tests/gradle.lockfile b/dd-smoke-tests/profiling-integration-tests/gradle.lockfile index 1b857582f84..7f0d2ee4ad9 100644 --- a/dd-smoke-tests/profiling-integration-tests/gradle.lockfile +++ b/dd-smoke-tests/profiling-integration-tests/gradle.lockfile @@ -1,6 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. +at.yawk.lz4:lz4-java:1.11.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath cafe.cryptography:curve25519-elisabeth:0.1.0=testRuntimeClasspath cafe.cryptography:ed25519-elisabeth:0.1.0=testRuntimeClasspath ch.qos.logback:logback-classic:1.2.13=testCompileClasspath,testRuntimeClasspath @@ -97,7 +98,6 @@ org.junit.platform:junit-platform-suite-api:1.14.1=testRuntimeClasspath org.junit.platform:junit-platform-suite-commons:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.0=spotbugs org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath -org.lz4:lz4-java:1.7.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.mockito:mockito-core:4.4.0=testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=testCompileClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.8.24=testRuntimeClasspath From b75a4a6b0bbc38703c5cdf950e2124637425b16c Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Mon, 18 May 2026 10:35:18 -0400 Subject: [PATCH 035/478] Refactored `buildSrc` Gradle-based tests around `GradleFixture` and reduce resource use. (#11370) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improved GradleFixture usage. Moved common code in base class. Improved GradleFixture usage. Moved common code in base class. Merge branch 'master' into alexeyk/refactor-gradle-fixture Refactored to use Kotlin DSL in tests scripts. Share TestKit daemon across GradleFixture tests. The Groovy→Kotlin DSL conversion of test scripts pushed :buildSrc:test from 6 min to ~11 min because every test method killed its TestKit daemon, forcing kotlinc to recompile every .gradle.kts in the next test. Move testKitDir into a JVM-wide companion-object lazy val, remove the per-test stopDaemons() call, and reap daemons once from the shutdown hook. Shared daemons cut :buildSrc:test from 10 min 40 s down to 1 min 36 s on Kotlin DSL (and ~3.8× faster than the original Groovy DSL runtime). Fix MuzzleMavenRepoUtils.MUZZLE_REPOS, which cached MAVEN_REPOSITORY_PROXY in a daemon-static `by lazy` val. With per-test daemons the cache was harmless; with daemon reuse it leaked a stale repo URL into the next test's resolution and caused version-range queries to fail. Replace it with defaultMuzzleRepos(), a function that reads the env on each call. Co-Authored-By: Claude Opus 4.7 (1M context) Fixed review comments Co-authored-by: alexey.kuznetsov --- .../plugin/muzzle/MuzzleMavenRepoUtils.kt | 13 +- .../datadog/gradle/plugin/GradleFixture.kt | 275 ++++++++++----- .../ParseV2SupportedConfigurationsTest.kt | 58 ++- .../csi/CallSiteInstrumentationPluginTest.kt | 100 ++---- .../dump/DumpHangedTestIntegrationTest.kt | 85 ++--- .../BuildTimeInstrumentationPluginTest.kt | 131 +++---- .../muzzle/MuzzlePluginFunctionalTest.kt | 332 ++++++++---------- .../muzzle/MuzzlePluginPerformanceTest.kt | 147 ++++---- .../plugin/muzzle/MuzzlePluginTestFixture.kt | 52 +-- .../gradle/plugin/muzzle/RangeQueryTest.kt | 2 +- .../version/TracerVersionIntegrationTest.kt | 167 ++++----- .../plugin/version/VersionPluginsFixture.kt | 13 +- .../version/WriteVersionFilePluginTest.kt | 89 ++--- 13 files changed, 698 insertions(+), 766 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/muzzle/MuzzleMavenRepoUtils.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/muzzle/MuzzleMavenRepoUtils.kt index 998e0357b18..af25b681f80 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/muzzle/MuzzleMavenRepoUtils.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/muzzle/MuzzleMavenRepoUtils.kt @@ -20,13 +20,16 @@ import java.nio.file.Files internal object MuzzleMavenRepoUtils { /** - * Remote repositories used to query version ranges and fetch dependencies + * Remote repositories used to query version ranges and fetch dependencies. + * + * This intentionally reads the environment on each access: Gradle daemons can + * be reused across builds with different MAVEN_REPOSITORY_PROXY values. */ @JvmStatic - val MUZZLE_REPOS: List by lazy { + fun defaultMuzzleRepos(): List { val central = RemoteRepository.Builder("central", "default", "https://repo1.maven.org/maven2/").build() val mavenProxyUrl = System.getenv("MAVEN_REPOSITORY_PROXY") - if (mavenProxyUrl == null) { + return if (mavenProxyUrl == null) { listOf(central) } else { val proxy = RemoteRepository.Builder("central-proxy", "default", mavenProxyUrl).build() @@ -70,7 +73,7 @@ internal object MuzzleMavenRepoUtils { muzzleDirective: MuzzleDirective, system: RepositorySystem, session: RepositorySystemSession, - defaultRepos: List = MUZZLE_REPOS + defaultRepos: List = defaultMuzzleRepos() ): Set { val allVersionsArtifact = DefaultArtifact( muzzleDirective.group, @@ -124,7 +127,7 @@ internal object MuzzleMavenRepoUtils { muzzleDirective: MuzzleDirective, system: RepositorySystem, session: RepositorySystemSession, - defaultRepos: List = MUZZLE_REPOS + defaultRepos: List = defaultMuzzleRepos() ): VersionRangeResult { val directiveArtifact: Artifact = DefaultArtifact( muzzleDirective.group, diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt index c0fd6077ded..b89ee5937a9 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/GradleFixture.kt @@ -1,9 +1,11 @@ package datadog.gradle.plugin +import datadog.gradle.plugin.GradleFixture.Companion.sharedTestKitDir import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.UnexpectedBuildResultException import org.intellij.lang.annotations.Language +import org.junit.jupiter.api.io.TempDir import org.w3c.dom.Document import java.io.File import java.nio.file.Files @@ -13,132 +15,207 @@ import javax.xml.parsers.DocumentBuilderFactory * Base fixture for Gradle plugin integration tests. * Provides common functionality for setting up test projects and running Gradle builds. */ -internal open class GradleFixture(protected val projectDir: File) { - // Each fixture gets its own testkit dir in the system temp directory (NOT under - // projectDir) so that JUnit's @TempDir cleanup doesn't race with daemon file locks. - // See https://github.com/gradle/gradle/issues/12535 - // A fresh daemon is started per test — ensuring withEnvironment() vars (e.g. - // MAVEN_REPOSITORY_PROXY) are correctly set on the daemon JVM and not inherited - // from a previously-started daemon with a different test's environment. - // A JVM shutdown hook removes the directory after all tests have run (and daemons - // have been stopped), so file locks are guaranteed to be released by then. - private val testKitDir: File by lazy { - Files.createTempDirectory("gradle-testkit-").toFile().also { dir -> - Runtime.getRuntime().addShutdownHook(Thread { dir.deleteRecursively() }) +open class GradleFixture { + @TempDir + protected lateinit var projectDir: File + + private val testKitDir: File get() = sharedTestKitDir + + companion object { + // JVM-wide testkit dir shared across all GradleFixture instances. One daemon + // pool serves every test method, so kotlinc work on .gradle.kts scripts is + // amortized instead of re-paid per test (recovers the +77 % wall-time + // regression introduced by the Groovy→Kotlin DSL conversion). + // + // Lives outside any @TempDir so JUnit cleanup never races with daemon file + // locks. See https://github.com/gradle/gradle/issues/12535 + // + // TestKit may reuse the same daemon for builds with different withEnvironment() + // values, so build logic must not cache environment-derived state in daemon-static + // fields. + private val sharedTestKitDir: File by lazy { + Files.createTempDirectory("gradle-testkit-").toFile().also { dir -> + Runtime.getRuntime().addShutdownHook(Thread { + stopDaemonsIn(dir) + dir.deleteRecursively() + }) + } + } + + /** + * Kills Gradle daemons started by TestKit under the given testkit dir. + * + * The Gradle Tooling API (used by [GradleRunner]) always spawns a daemon and + * provides no public API to stop it (https://github.com/gradle/gradle/issues/12535). + * We replicate the strategy Gradle uses in its own integration tests + * ([DaemonLogsAnalyzer.killAll()][1]): + * + * 1. Scan `/daemon//` for log files matching + * `DaemonLogConstants.DAEMON_LOG_PREFIX + pid + DaemonLogConstants.DAEMON_LOG_SUFFIX`, + * i.e. `daemon-.out.log`. + * 2. Extract the PID from the filename and kill the process. + * + * Trade-offs of the PID-from-filename approach: + * - **PID recycling**: between the build finishing and `kill` being sent, the OS + * could theoretically recycle the PID. Now that this only runs at JVM exit + * (no longer per-test), the window is short — when called from the shutdown + * hook all daemons we own are still alive — so the risk remains negligible. + * - **Filename convention is internal**: Gradle's `DaemonLogConstants.DAEMON_LOG_PREFIX` + * (`"daemon-"`) / `DAEMON_LOG_SUFFIX` (`".out.log"`) are not public API; a future + * Gradle version could change them. The `toLongOrNull()` guard safely skips entries + * that don't parse as a PID (including the UUID fallback Gradle uses when the PID + * is unavailable). + * - **Java 8 compatible**: uses `kill`/`taskkill` via [ProcessBuilder] instead of + * `ProcessHandle` (Java 9+) because build logic targets JVM 1.8. + * + * [1]: https://github.com/gradle/gradle/blob/43b381d88/testing/internal-distribution-testing/src/main/groovy/org/gradle/integtests/fixtures/daemon/DaemonLogsAnalyzer.groovy + */ + private fun stopDaemonsIn(testKitDir: File) { + val daemonDir = File(testKitDir, "daemon") + if (!daemonDir.exists()) return + + daemonDir.walkTopDown() + .filter { it.isFile && it.name.endsWith(".out.log") && !it.name.startsWith("hs_err") } + .forEach { logFile -> + val pid = logFile.nameWithoutExtension // daemon-12345.out + .removeSuffix(".out") // daemon-12345 + .removePrefix("daemon-") // 12345 + .toLongOrNull() ?: return@forEach // skip UUIDs / unparseable names + + val isWindows = System.getProperty("os.name").lowercase().contains("win") + val killProcess = if (isWindows) { + ProcessBuilder("taskkill", "/F", "/PID", pid.toString()) + } else { + ProcessBuilder("kill", pid.toString()) + } + try { + val process = killProcess.redirectErrorStream(true).start() + process.waitFor(5, java.util.concurrent.TimeUnit.SECONDS) + } catch (_: Exception) { + // best effort — daemon may already be stopped + } + } } } /** * Runs Gradle with the specified arguments. * - * After the build completes, any Gradle daemons started by TestKit are killed - * so their file locks on the testkit cache are released before JUnit `@TempDir` - * cleanup. See https://github.com/gradle/gradle/issues/12535 + * The TestKit daemon spawned by the first call and reused for every subsequent + * call in the JVM (shared [testKitDir]) so Kotlin compilation of `.gradle.kts` + * scripts amortizes across tests instead of being re-paid per test. + * Daemons are reaped at JVM shutdown by the hook registered when + * [sharedTestKitDir] is created. * * @param args Gradle task names and arguments * @param expectFailure Whether the build is expected to fail * @param env Environment variables to set (merged with system environment) + * @param forwardOutput Forward the build's stdout/stderr to the test's output + * @param gradleProjectDir Override the project directory used by Gradle (useful for git worktree tests); + * defaults to the fixture's project directory. * @return The build result */ - fun run(vararg args: String, expectFailure: Boolean = false, env: Map = emptyMap()): BuildResult { + fun run( + vararg args: String, + expectFailure: Boolean = false, + env: Map = emptyMap(), + forwardOutput: Boolean = false, + gradleProjectDir: File = projectDir, + ): BuildResult { val runner = GradleRunner.create() .withTestKitDir(testKitDir) .withPluginClasspath() - .withProjectDir(projectDir) + .withProjectDir(gradleProjectDir) // Using withDebug prevents starting a daemon, but it doesn't work with withEnvironment .withEnvironment(System.getenv() + env) .withArguments(*args) + if (forwardOutput) { + runner.forwardOutput() + } return try { if (expectFailure) runner.buildAndFail() else runner.build() } catch (e: UnexpectedBuildResultException) { e.buildResult - } finally { - stopDaemons() } } /** - * Kills Gradle daemons started by TestKit for this fixture's testkit dir. - * - * The Gradle Tooling API (used by [GradleRunner]) always spawns a daemon and - * provides no public API to stop it (https://github.com/gradle/gradle/issues/12535). - * We replicate the strategy Gradle uses in its own integration tests - * ([DaemonLogsAnalyzer.killAll()][1]): - * - * 1. Scan `/daemon//` for log files matching - * `DaemonLogConstants.DAEMON_LOG_PREFIX + pid + DaemonLogConstants.DAEMON_LOG_SUFFIX`, - * i.e. `daemon-.out.log`. - * 2. Extract the PID from the filename and kill the process. + * Writes a file under the project directory, creating parent dirs as needed. * - * Trade-offs of the PID-from-filename approach: - * - **PID recycling**: between the build finishing and `kill` being sent, the OS - * could theoretically recycle the PID. In practice the window is short - * (the `finally` block runs immediately after the build) so the risk is negligible. - * - **Filename convention is internal**: Gradle's `DaemonLogConstants.DAEMON_LOG_PREFIX` - * (`"daemon-"`) / `DAEMON_LOG_SUFFIX` (`".out.log"`) are not public API; a future - * Gradle version could change them. The `toLongOrNull()` guard safely skips entries - * that don't parse as a PID (including the UUID fallback Gradle uses when the PID - * is unavailable). - * - **Java 8 compatible**: uses `kill`/`taskkill` via [ProcessBuilder] instead of - * `ProcessHandle` (Java 9+) because build logic targets JVM 1.8. - * - * [1]: https://github.com/gradle/gradle/blob/43b381d88/testing/internal-distribution-testing/src/main/groovy/org/gradle/integtests/fixtures/daemon/DaemonLogsAnalyzer.groovy + * @param path Path relative to the project directory + * @param content File contents; passed through [String.trimIndent] before writing, + * and a trailing newline is appended. + * @param append If true, appends to any existing file instead of overwriting it. + * Safe to call repeatedly to build content up across steps. */ - private fun stopDaemons() { - val daemonDir = File(testKitDir, "daemon") - if (!daemonDir.exists()) return - - daemonDir.walkTopDown() - .filter { it.isFile && it.name.endsWith(".out.log") && !it.name.startsWith("hs_err") } - .forEach { logFile -> - val pid = logFile.nameWithoutExtension // daemon-12345.out - .removeSuffix(".out") // daemon-12345 - .removePrefix("daemon-") // 12345 - .toLongOrNull() ?: return@forEach // skip UUIDs / unparseable names - - val isWindows = System.getProperty("os.name").lowercase().contains("win") - val killProcess = if (isWindows) { - ProcessBuilder("taskkill", "/F", "/PID", pid.toString()) - } else { - ProcessBuilder("kill", pid.toString()) - } - try { - val process = killProcess.redirectErrorStream(true).start() - process.waitFor(5, java.util.concurrent.TimeUnit.SECONDS) - } catch (_: Exception) { - // best effort — daemon may already be stopped - } - } - } + fun writeFile(path: String, content: String, append: Boolean = false): File = + file(path).also { + it.parentFile?.mkdirs() + val text = content.trimIndent() + "\n" + if (append) it.appendText(text) else it.writeText(text) + } /** - * Adds a subproject to the build. - * Updates settings.gradle and creates the build script for the subproject. + * Adds a subproject to the build by appending an `include` line to settings.gradle.kts + * and writing the subproject's build.gradle.kts. * * @param projectPath The project path (e.g., "dd-java-agent:instrumentation:other") * @param buildScript The build script content for the subproject */ - fun addSubproject(projectPath: String, @Language("Groovy") buildScript: String) { - // Add to settings.gradle - val settingsFile = file("settings.gradle") - if (settingsFile.exists()) { - settingsFile.appendText("\ninclude ':$projectPath'") - } else { - settingsFile.writeText("include ':$projectPath'") - } + fun addSubproject(projectPath: String, @Language("kotlin") buildScript: String) { + writeFile("settings.gradle.kts", """include(":$projectPath")""", append = true) + writeFile("${projectPath.replace(':', '/')}/build.gradle.kts", buildScript) + } - file("${projectPath.replace(':', '/')}/build.gradle") - .writeText(buildScript.trimIndent()) + /** + * Writes a Java source file under src//java. + * + * @param classNameOrPath Simple class name, fully qualified class name, or source path + * @param sourceCode The Java source content + * @param sourceSet The Gradle source set to write to + * @param projectPath Optional Gradle project path; defaults to the root project + */ + fun writeJavaSource( + classNameOrPath: String, + @Language("JAVA") sourceCode: String, + sourceSet: String = "main", + projectPath: String? = null, + ) { + val sourcePath = classNameOrPath.removeSuffix(".java").replace('.', '/') + ".java" + val projectPrefix = projectPath + ?.removePrefix(":") + ?.replace(':', '/') + ?.let { "$it/" } + .orEmpty() + writeFile("${projectPrefix}src/$sourceSet/java/$sourcePath", sourceCode) } /** - * Writes the root project's build.gradle file. + * Writes gradle.properties at the project root. + * + * @param content Properties content (trimIndent applied, trailing newline added) + * @param append If true, appends to any existing file instead of overwriting + */ + fun writeGradleProperties(content: String, append: Boolean = false): File = + writeFile("gradle.properties", content, append) + + /** + * Writes the root project's build.gradle.kts file. * * @param buildScript The build script content for the root project + * @param append If true, appends to any existing file instead of overwriting */ - fun writeRootProject(@Language("Groovy") buildScript: String) { - file("build.gradle").writeText(buildScript.trimIndent()) - } + fun writeRootProject(@Language("kotlin") buildScript: String, append: Boolean = false): File = + writeFile("build.gradle.kts", buildScript, append) + + /** + * Writes the root project's settings.gradle.kts file. + * + * @param settingsScript The settings script content + * @param append If true, appends to any existing file instead of overwriting + */ + fun writeSettings(@Language("kotlin") settingsScript: String, append: Boolean = false): File = + writeFile("settings.gradle.kts", settingsScript, append) /** * Parses an XML file into a DOM Document. @@ -149,12 +226,26 @@ internal open class GradleFixture(protected val projectDir: File) { } /** - * Creates or gets a file in the project directory, ensuring parent directories exist. + * Returns a File handle under the project directory. + * Does not touch the filesystem. */ - protected fun file(path: String, mkdirs: Boolean = true): File = - File(projectDir, path).also { file -> - if (mkdirs) { - file.parentFile?.mkdirs() - } - } + fun file(path: String): File = File(projectDir, path) + + /** + * Creates a directory under the project directory (including any missing parents) + * and returns it. + */ + fun dir(path: String): File = file(path).also { it.mkdirs() } + + /** + * The Gradle build output directory (`projectDir/build`). Not created — Gradle + * produces it during a build. + */ + val buildDir: File get() = File(projectDir, "build") + + /** + * Returns a File under the Gradle build output directory (`projectDir/build/...`). + * Does NOT create parent dirs — these paths are read after a Gradle build produces them. + */ + fun buildFile(path: String): File = File(buildDir, path) } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/config/ParseV2SupportedConfigurationsTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/config/ParseV2SupportedConfigurationsTest.kt index bb6a04d52f1..b5f46e15932 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/config/ParseV2SupportedConfigurationsTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/config/ParseV2SupportedConfigurationsTest.kt @@ -1,19 +1,17 @@ package datadog.gradle.plugin.config +import datadog.gradle.plugin.GradleFixture import org.gradle.testkit.runner.BuildResult -import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir import java.io.File -import java.nio.file.Paths -class ParseV2SupportedConfigurationsTest { +class ParseV2SupportedConfigurationsTest : GradleFixture() { @Test - fun `should generate Java file from JSON configuration`(@TempDir projectDir: File) { - val (buildResult, generatedFile) = runGradleTask(projectDir) + fun `should generate Java file from JSON configuration`() { + val (buildResult, generatedFile) = runGradleTask() assertEquals(TaskOutcome.SUCCESS, buildResult.task(":generateSupportedConfigurations")?.outcome) @@ -76,9 +74,9 @@ class ParseV2SupportedConfigurationsTest { assertTrue(content.contains("""reversePropertyKeysMapping.put("property.key", "DD_ACTION_EXECUTION_ID")""")) } - private fun runGradleTask(projectDir: File): Pair { - val jsonFile = file(projectDir, "test-supported-configurations.json") - jsonFile.writeText( + private fun runGradleTask(): Pair { + writeFile( + "test-supported-configurations.json", """ { "supportedConfigurations": { @@ -88,7 +86,7 @@ class ParseV2SupportedConfigurationsTest { "type": "string", "default": null, "aliases": [], - "propertyKeys": ["property.key"] + "propertyKeys": ["property.key"] } ], "DD_AGENTLESS_LOG_SUBMISSION_ENABLED": [ @@ -111,57 +109,45 @@ class ParseV2SupportedConfigurationsTest { "legacy.setting": "No longer supported" } } - """.trimIndent() + """ ) - setupGradleProject(projectDir) + setupGradleProject() - val buildResult = GradleRunner.create() - .forwardOutput() - .withPluginClasspath() - .withArguments("generateSupportedConfigurations") - .withProjectDir(projectDir) - .build() + val buildResult = run( + "generateSupportedConfigurations", + forwardOutput = true + ) - val generatedFile = file(projectDir, "build", "generated", "supportedConfigurations", "datadog", "test", "TestGeneratedSupportedConfigurations.java") + val generatedFile = file("build/generated/supportedConfigurations/datadog/test/TestGeneratedSupportedConfigurations.java") return Pair(buildResult, generatedFile) } - private fun setupGradleProject(projectDir: File) { - file(projectDir, "settings.gradle.kts").writeText( + private fun setupGradleProject() { + writeSettings( """ rootProject.name = "test-config-project" - """.trimIndent() + """ ) - file(projectDir, "build.gradle.kts").writeText( + writeRootProject( """ plugins { id("java") id("dd-trace-java.supported-config-generator") } - + group = "datadog.config.test" - + supportedTracerConfigurations { jsonFile.set(file("test-supported-configurations.json")) destinationDirectory.set(file("build/generated/supportedConfigurations")) className.set("datadog.test.TestGeneratedSupportedConfigurations") } - """.trimIndent() + """ ) } - private fun file(projectDir: File, vararg parts: String, makeDirectory: Boolean = false): File { - val f = Paths.get(projectDir.absolutePath, *parts).toFile() - - if (makeDirectory) { - f.parentFile.mkdirs() - } - - return f - } - private fun assertContainsSupportedConfig( content: String, key: String, diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/csi/CallSiteInstrumentationPluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/csi/CallSiteInstrumentationPluginTest.kt index deba44a3a08..c65742f2c83 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/csi/CallSiteInstrumentationPluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/csi/CallSiteInstrumentationPluginTest.kt @@ -1,21 +1,18 @@ package datadog.gradle.plugin.csi +import datadog.gradle.plugin.GradleFixture import org.gradle.testkit.runner.BuildResult -import org.gradle.testkit.runner.GradleRunner -import org.gradle.testkit.runner.UnexpectedBuildFailure import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir import java.io.File import java.nio.file.Files -class CallSiteInstrumentationPluginTest { +class CallSiteInstrumentationPluginTest : GradleFixture() { private val buildGradle = """ plugins { - id 'java' - id 'dd-trace-java.call-site-instrumentation' + id("java") + id("dd-trace-java.call-site-instrumentation") } java { @@ -24,43 +21,39 @@ class CallSiteInstrumentationPluginTest { } csi { - suffix = 'CallSite' - targetFolder = project.layout.buildDirectory.dir('csi') - rootFolder = file('__ROOT_FOLDER__') + suffix.set("CallSite") + targetFolder.set(project.layout.buildDirectory.dir("csi")) } - + repositories { mavenCentral() } - + dependencies { - implementation group: 'net.bytebuddy', name: 'byte-buddy', version: '1.18.8' - implementation group: 'com.google.auto.service', name: 'auto-service-annotations', version: '1.1.1' + implementation("net.bytebuddy:byte-buddy:1.18.8") + implementation("com.google.auto.service:auto-service-annotations:1.1.1") } - """.trimIndent() - - @TempDir - lateinit var buildDir: File + """ @Test fun `test call site instrumentation plugin`() { createGradleProject( - buildDir, buildGradle, + buildGradle, """ import datadog.trace.agent.tooling.csi.*; - + @CallSite(spi = CallSites.class) public class BeforeAdviceCallSite { @CallSite.Before("java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)") public static void beforeAppend(@CallSite.This final StringBuilder self, @CallSite.Argument final String param) { } } - """.trimIndent() + """ ) - val result = buildGradleProject(buildDir) + val result = buildGradleProject() - val generated = resolve(buildDir, "build", "csi", "BeforeAdviceCallSites.java") + val generated = buildFile("csi/BeforeAdviceCallSites.java") assertTrue(generated.exists()) val output = result.output @@ -71,67 +64,58 @@ class CallSiteInstrumentationPluginTest { @Test fun `test call site instrumentation plugin with error`() { createGradleProject( - buildDir, buildGradle, + buildGradle, """ import datadog.trace.agent.tooling.csi.*; - + @CallSite(spi = CallSites.class) public class BeforeAdviceCallSite { @CallSite.Before("java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)") private void beforeAppend(@CallSite.This final StringBuilder self, @CallSite.Argument final String param) { } } - """.trimIndent() + """ ) - val error = assertThrows(UnexpectedBuildFailure::class.java) { - buildGradleProject(buildDir) - } + val result = run("build", "--info", "--stacktrace", forwardOutput = true, expectFailure = true) - val generated = resolve(buildDir, "build", "csi", "BeforeAdviceCallSites.java") + val generated = buildFile("csi/BeforeAdviceCallSites.java") assertFalse(generated.exists()) - val output = error.message ?: "" + val output = result.output assertFalse(output.contains("[✓]")) assertTrue(output.contains("ADVICE_METHOD_NOT_STATIC_AND_PUBLIC")) } - private fun createGradleProject(buildDir: File, gradleFile: String, advice: String) { + private fun createGradleProject(gradleFile: String, advice: String) { val projectFolder = File(System.getProperty("user.dir")).parentFile - val callSiteJar = resolve(projectFolder, "buildSrc", "call-site-instrumentation-plugin", "build", "libs", "call-site-instrumentation-plugin-all.jar") - val testCallSiteJarDir = resolve(buildDir, "buildSrc", "call-site-instrumentation-plugin", "build", "libs", makeDirs = true) + val callSiteJar = File(projectFolder, "buildSrc/call-site-instrumentation-plugin/build/libs/call-site-instrumentation-plugin-all.jar") + val testCallSiteJarDir = dir("buildSrc/call-site-instrumentation-plugin/build/libs") Files.copy( callSiteJar.toPath(), testCallSiteJarDir.toPath().resolve(callSiteJar.name) ) - val gradleFileContent = gradleFile.replace("__ROOT_FOLDER__", projectFolder.toString().replace("\\", "\\\\")) - writeText(resolve(buildDir, "build.gradle"), gradleFileContent) + writeRootProject(gradleFile) - val javaFolder = resolve(buildDir, "src", "main", "java", makeDirs = true) val advicePackage = parsePackage(advice) val adviceClassName = parseClassName(advice) - val adviceFolder = resolve(javaFolder, *advicePackage.split("\\.").toTypedArray(), makeDirs = true) - writeText(resolve(adviceFolder, "$adviceClassName.java"), advice) + val adviceSourceName = if (advicePackage.isEmpty()) { + adviceClassName + } else { + "$advicePackage.$adviceClassName" + } + writeJavaSource(adviceSourceName, advice) - val csiSource = resolve(projectFolder, "dd-java-agent", "agent-tooling", "src", "main", "java", "datadog", "trace", "agent", "tooling", "csi") - val csiTarget = resolve(javaFolder, "datadog", "trace", "agent", "tooling", "csi", makeDirs = true) - csiSource.listFiles()?.forEach { - writeText(File(csiTarget, it.name), it.readText()) + val csiSource = File(projectFolder, "dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/csi") + csiSource.listFiles()?.forEach { src -> + writeJavaSource("datadog.trace.agent.tooling.csi.${src.nameWithoutExtension}", src.readText()) } } - private fun buildGradleProject(buildDir: File): BuildResult { - return GradleRunner.create() - .withTestKitDir(File(buildDir, ".gradle-test-kit")) // workaround in case the global test-kit cache becomes corrupted - .withDebug(true) // avoids starting daemon which can leave undeleted files post-cleanup - .withProjectDir(buildDir) - .withArguments("build", "--info", "--stacktrace") - .withPluginClasspath() - .forwardOutput() - .build() - } + private fun buildGradleProject(): BuildResult = + run("build", "--info", "--stacktrace", forwardOutput = true) private fun parsePackage(advice: String): String { val regex = Regex("package\\s+([\\w.]+)\\s*;", RegexOption.DOT_MATCHES_ALL) @@ -144,14 +128,4 @@ class CallSiteInstrumentationPluginTest { val match = regex.find(advice) return match?.groupValues?.getOrNull(1) ?: "" } - - private fun resolve(parent: File, vararg path: String, makeDirs: Boolean = false): File { - return path.fold(parent) { acc, next -> File(acc, next) }.apply { - if (makeDirs) { - mkdirs() - } - } - } - - private fun writeText(file: File, content: String) = file.writeText(content) } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/dump/DumpHangedTestIntegrationTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/dump/DumpHangedTestIntegrationTest.kt index d0a8279c85d..78279142b40 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/dump/DumpHangedTestIntegrationTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/dump/DumpHangedTestIntegrationTest.kt @@ -1,39 +1,34 @@ package datadog.gradle.plugin.dump -import org.gradle.testkit.runner.GradleRunner -import org.gradle.testkit.runner.UnexpectedBuildFailure +import datadog.gradle.plugin.GradleFixture import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertNotNull -import org.junit.jupiter.api.io.TempDir -import java.io.File -import java.nio.file.Paths -class DumpHangedTestIntegrationTest { +class DumpHangedTestIntegrationTest : GradleFixture() { @Test - fun `should not take dumps`(@TempDir projectDir: File) { - val output = runGradleTest(projectDir, testSleep = 1000) + fun `should not take dumps`() { + val output = runGradleTest(testSleepMillis = 1000) // Assert Gradle output has no evidence of taking dumps. assertFalse(output.contains("Taking dumps after 15 seconds delay for :test")) assertFalse(output.contains("Requesting stop of task ':test' as it has exceeded its configured timeout of 20s.")) - assertTrue(file(projectDir, "build").exists()) // Assert build happened. - assertFalse(file(projectDir, "build", "dumps").exists()) // Assert no dumps created. + assertTrue(buildDir.exists()) // Assert build happened. + assertFalse(buildFile("dumps").exists()) // Assert no dumps created. } @Test - fun `should take dumps`(@TempDir projectDir: File) { - val output = runGradleTest(projectDir, testSleep = 25_0000) + fun `should take dumps`() { + val output = runGradleTest(testSleepMillis = 25_0000) // Assert Gradle output has evidence of taking dumps. assertTrue(output.contains("Taking dumps after 15 seconds delay for :test")) assertTrue(output.contains("Requesting stop of task ':test' as it has exceeded its configured timeout of 20s.")) + assertTrue(buildDir.exists()) // Assert build happened. - assertTrue(file(projectDir, "build").exists()) // Assert build happened. - - val dumps = file(projectDir, "build", "dumps") + val dumps = buildFile("dumps") assertTrue(dumps.exists()) // Assert dumps created. // Assert actual dumps created. @@ -42,82 +37,60 @@ class DumpHangedTestIntegrationTest { assertNotNull(dumpFiles.find { it.startsWith("all-thread-dumps") }) } - private fun runGradleTest(projectDir: File, testSleep: Long): List { - file(projectDir, "settings.gradle.kts").writeText( - """ - rootProject.name = "test-project" - """.trimIndent() - ) + private fun runGradleTest(testSleepMillis: Long): List { + writeSettings("""rootProject.name = "test-project"""") - file(projectDir, "build.gradle.kts").writeText( + writeRootProject( """ import java.time.Duration - + import org.gradle.api.tasks.testing.Test + plugins { id("java") id("dd-trace-java.dump-hanged-test") } - + group = "datadog.dump.test" - + repositories { mavenCentral() } - + dependencies { testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } - + dumpHangedTest { // Set the dump offset for 5 seconds to trigger taking dumps after 15 seconds. dumpOffset.set(5) } - + tasks.withType().configureEach { // Set test timeout after 20 seconds. timeout.set(Duration.ofSeconds(20)) - + useJUnitPlatform() } - """.trimIndent() + """ ) - file(projectDir, "src", "test", "java", "SimpleTest.java", makeDirectory = true).writeText( + writeJavaSource( + "SimpleTest", """ import org.junit.jupiter.api.Test; - + public class SimpleTest { @Test public void test() throws InterruptedException { - Thread.sleep($testSleep); + Thread.sleep($testSleepMillis); } } - """.trimIndent() + """, + sourceSet = "test" ) - try { - val buildResult = GradleRunner.create() - .forwardOutput() - .withPluginClasspath() - .withArguments("test") - .withProjectDir(projectDir) - .build() - - return buildResult.output.lines() - } catch (e: UnexpectedBuildFailure) { - return e.buildResult.output.lines() - } - } - - private fun file(projectDir: File, vararg parts: String, makeDirectory: Boolean = false): File { - val f = Paths.get(projectDir.absolutePath, *parts).toFile() - - if (makeDirectory) { - f.parentFile.mkdirs() - } - - return f + return run("test", forwardOutput = true).output.lines() } } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/instrument/BuildTimeInstrumentationPluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/instrument/BuildTimeInstrumentationPluginTest.kt index 017f6e6041d..9bbcb7bf386 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/instrument/BuildTimeInstrumentationPluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/instrument/BuildTimeInstrumentationPluginTest.kt @@ -1,10 +1,9 @@ package datadog.gradle.plugin.instrument +import datadog.gradle.plugin.GradleFixture import net.bytebuddy.utility.OpenedClassReader -import org.gradle.testkit.runner.GradleRunner import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.ClassWriter @@ -13,12 +12,12 @@ import org.objectweb.asm.Opcodes import java.io.File import java.io.FileInputStream -class BuildTimeInstrumentationPluginTest { +class BuildTimeInstrumentationPluginTest : GradleFixture() { private val buildGradle = """ plugins { - id 'java' - id 'dd-trace-java.build-time-instrumentation' + id("java") + id("dd-trace-java.build-time-instrumentation") } java { @@ -31,51 +30,35 @@ class BuildTimeInstrumentationPluginTest { } dependencies { - compileOnly group: 'net.bytebuddy', name: 'byte-buddy', version: '1.18.8' // just to build TestPlugin + compileOnly("net.bytebuddy:byte-buddy:1.18.8") // just to build TestPlugin } - buildTimeInstrumentation.plugins = [ - 'TestPlugin' - ] - """.trimIndent() + buildTimeInstrumentation.plugins.set(listOf("TestPlugin")) + """ private val exampleCode = """ package example; public class ExampleCode {} - """.trimIndent() - - @TempDir - lateinit var buildDir: File + """ @Test fun `test instrument plugin`() { - val buildFile = File(buildDir, "build.gradle") - buildFile.writeText(buildGradle) - - val srcMainJava = testPlugin("src/main/java", "ExampleCode") - - val examplePackageDir = File(srcMainJava, "example").apply { mkdirs() } - File(examplePackageDir, "ExampleCode.java").writeText(exampleCode) + writeRootProject(buildGradle) + writeTestPlugin("ExampleCode") + writeJavaSource("example.ExampleCode", exampleCode) - // Run Gradle build with TestKit - GradleRunner.create().withTestKitDir(File(buildDir, ".gradle-test-kit")) // workaround in case the global test-kit cache becomes corrupted - .withDebug(true) // avoids starting daemon which can leave undeleted files post-cleanup - .withProjectDir(buildDir) - .withArguments("build", "--stacktrace") - .withPluginClasspath() - .forwardOutput() - .build() + run("build", "--stacktrace", forwardOutput = true) - assertInstrumented(File(buildDir, "build/classes/java/main/example/ExampleCode.class")) + assertInstrumented(buildFile("classes/java/main/example/ExampleCode.class")) } @Test fun `test instrument plugin processes includeClassDirectories`() { - val buildFile = File(buildDir, "build.gradle") - buildFile.writeText(""" + writeRootProject( + """ plugins { - id 'java' - id 'dd-trace-java.build-time-instrumentation' + id("java") + id("dd-trace-java.build-time-instrumentation") } java { @@ -88,41 +71,35 @@ class BuildTimeInstrumentationPluginTest { } dependencies { - compileOnly group: 'net.bytebuddy', name: 'byte-buddy', version: '1.18.8' + compileOnly("net.bytebuddy:byte-buddy:1.18.8") } buildTimeInstrumentation { - plugins = ['TestPlugin'] - includeClassDirectories.from(file('external-classes')) + plugins.set(listOf("TestPlugin")) + includeClassDirectories.from(file("external-classes")) } - """.trimIndent()) + """ + ) - testPlugin("src/main/java", "ExternalCode") + writeTestPlugin("ExternalCode") // Pre-compile ExternalCode using ASM and place it in the external-classes directory - val externalClassesDir = File(buildDir, "external-classes").apply { mkdirs() } + val externalClassesDir = dir("external-classes") precompiledClass("ExternalCode", externalClassesDir) - GradleRunner.create() - .withTestKitDir(File(buildDir, ".gradle-test-kit")) - .withDebug(true) - .withProjectDir(buildDir) - .withArguments("build", "--stacktrace") - .withPluginClasspath() - .forwardOutput() - .build() + run("build", "--stacktrace", forwardOutput = true) // ExternalCode.class should have been copied from external-classes, instrumented, and placed in the output - assertInstrumented(File(buildDir, "build/classes/java/main/ExternalCode.class")) + assertInstrumented(buildFile("classes/java/main/ExternalCode.class")) } @Test fun `test rerun-tasks does not lose includeClassDirectories classes`() { - val buildFile = File(buildDir, "build.gradle") - buildFile.writeText(""" + writeRootProject( + """ plugins { - id 'java' - id 'dd-trace-java.build-time-instrumentation' + id("java") + id("dd-trace-java.build-time-instrumentation") } java { @@ -135,44 +112,38 @@ class BuildTimeInstrumentationPluginTest { } dependencies { - compileOnly group: 'net.bytebuddy', name: 'byte-buddy', version: '1.18.8' + compileOnly("net.bytebuddy:byte-buddy:1.18.8") } buildTimeInstrumentation { - plugins = ['TestPlugin'] - includeClassDirectories.from(file('external-classes')) + plugins.set(listOf("TestPlugin")) + includeClassDirectories.from(file("external-classes")) } - """.trimIndent()) + """ + ) - val srcMainJava = testPlugin("src/main/java", "ExampleCode", "ExternalCode") - val examplePackageDir = File(srcMainJava, "example").apply { mkdirs() } - File(examplePackageDir, "ExampleCode.java").writeText("package example; public class ExampleCode {}") + writeTestPlugin("ExampleCode", "ExternalCode") + writeJavaSource("example.ExampleCode", "package example; public class ExampleCode {}") - val externalClassesDir = File(buildDir, "external-classes").apply { mkdirs() } + val externalClassesDir = dir("external-classes") precompiledClass("ExternalCode", externalClassesDir) - val runner = GradleRunner.create() - .withTestKitDir(File(buildDir, ".gradle-test-kit")) - .withDebug(true) - .withProjectDir(buildDir) - .withPluginClasspath() - .forwardOutput() - // First build - runner.withArguments("build", "--stacktrace").build() + run("build", "--stacktrace", forwardOutput = true) // Second build with --rerun-tasks: compileJava wipes classesDirectory, so without // the fix InstrumentAction would only sync freshly-compiled classes and lose ExternalCode.class - runner.withArguments("build", "--rerun-tasks", "--stacktrace").build() + run("build", "--rerun-tasks", "--stacktrace", forwardOutput = true) - assertInstrumented(File(buildDir, "build/classes/java/main/example/ExampleCode.class")) - assertInstrumented(File(buildDir, "build/classes/java/main/ExternalCode.class")) + assertInstrumented(buildFile("classes/java/main/example/ExampleCode.class")) + assertInstrumented(buildFile("classes/java/main/ExternalCode.class")) } - private fun testPlugin(srcDir: String, vararg classNames: String): File { - val dir = File(buildDir, srcDir).apply { mkdirs() } + private fun writeTestPlugin(vararg classNames: String) { val conditions = classNames.joinToString(" || ") { "\"$it\".equals(name)" } - File(dir, "TestPlugin.java").writeText(""" + writeJavaSource( + "TestPlugin", + """ import java.io.File; import java.io.IOException; import net.bytebuddy.build.Plugin; @@ -202,12 +173,12 @@ class BuildTimeInstrumentationPluginTest { } @Override - public void close() throws IOException { - // no-op - } + public void close() throws IOException { + // no-op } - """.trimIndent()) - return dir + } + """ + ) } private fun precompiledClass(className: String, targetDir: File) { diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginFunctionalTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginFunctionalTest.kt index 00eb2514db0..b09bca95c1e 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginFunctionalTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginFunctionalTest.kt @@ -1,30 +1,21 @@ package datadog.gradle.plugin.muzzle -import datadog.gradle.plugin.GradleFixture -import datadog.gradle.plugin.MavenRepoFixture import org.assertj.core.api.Assertions.assertThat import org.gradle.testkit.runner.TaskOutcome.SUCCESS import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.ValueSource -import java.io.File import kotlin.io.path.readText -class MuzzlePluginFunctionalTest { +class MuzzlePluginFunctionalTest : MuzzlePluginTestFixture() { @ParameterizedTest @ValueSource(strings = ["muzzle", ":dd-java-agent:instrumentation:demo:muzzle", "runMuzzle"]) - fun `detects muzzle invocation with various task names`( - taskName: String, - @TempDir projectDir: File - ) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `detects muzzle invocation with various task names`(taskName: String) { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -36,17 +27,17 @@ class MuzzlePluginFunctionalTest { ) // Add runMuzzle aggregator task at root level (like in dd-trace-java.ci-jobs.gradle.kts) - fixture.writeRootProject( + writeRootProject( """ - tasks.register('runMuzzle') { - dependsOn(':dd-java-agent:instrumentation:demo:muzzle') + tasks.register("runMuzzle") { + dependsOn(":dd-java-agent:instrumentation:demo:muzzle") } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() - val result = fixture.run(taskName, "--stacktrace") + val result = run(taskName, "--stacktrace") assertThat(result.tasks) .withFailMessage("Should create muzzle tasks when '$taskName' is requested") @@ -59,24 +50,23 @@ class MuzzlePluginFunctionalTest { } @Test - fun `muzzle with pass directive writes junit report`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `muzzle with pass directive writes junit report`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { pass { - name = 'expected-pass' + name = "expected-pass" coreJdk() } } """ ) - fixture.writeScanPlugin( + writeScanPlugin( """ if (!assertPass) { throw new IllegalStateException("unexpected fail assertion for " + muzzleDirective); @@ -84,14 +74,14 @@ class MuzzlePluginFunctionalTest { """ ) - val buildResult = fixture.run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") + val buildResult = run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") assertThat(buildResult.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome).isEqualTo(SUCCESS) assertThat(buildResult.task(":dd-java-agent:instrumentation:demo:muzzle-AssertPass-core-jdk")?.outcome) .isEqualTo(SUCCESS) assertThat(buildResult.task(":dd-java-agent:instrumentation:demo:muzzle-end")?.outcome).isEqualTo(SUCCESS) - val reportFile = fixture.findSingleMuzzleJUnitReport() - val report = fixture.parseXml(reportFile) + val reportFile = findSingleMuzzleJUnitReport() + val report = parseXml(reportFile) val suite = report.documentElement assertThat(suite.tagName).isEqualTo("testsuite") assertThat(suite.getAttribute("name")).isEqualTo(":dd-java-agent:instrumentation:demo") @@ -103,17 +93,16 @@ class MuzzlePluginFunctionalTest { } @Test - fun `muzzle without directives writes default junit report`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `muzzle without directives writes default junit report`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } """ ) - fixture.writeScanPlugin( + writeScanPlugin( """ if (!assertPass) { throw new IllegalStateException("unexpected fail assertion for " + muzzleDirective); @@ -121,11 +110,11 @@ class MuzzlePluginFunctionalTest { """ ) - val result = fixture.run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") + val result = run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") assertThat(result.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome).isEqualTo(SUCCESS) - val reportFile = fixture.findSingleMuzzleJUnitReport() - val report = fixture.parseXml(reportFile) + val reportFile = findSingleMuzzleJUnitReport() + val report = parseXml(reportFile) val suite = report.documentElement assertThat(suite.getAttribute("name")).isEqualTo(":dd-java-agent:instrumentation:demo") assertThat(suite.getAttribute("tests")).isEqualTo("1") @@ -136,13 +125,12 @@ class MuzzlePluginFunctionalTest { } @Test - fun `non muzzle invocation does not register muzzle end task`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `non muzzle invocation does not register muzzle end task`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -153,31 +141,30 @@ class MuzzlePluginFunctionalTest { """ ) - val buildResult = fixture.run(":dd-java-agent:instrumentation:demo:tasks", "--all") + val buildResult = run(":dd-java-agent:instrumentation:demo:tasks", "--all") assertThat(buildResult.output).doesNotContain("muzzle-end") } @Test - fun `muzzle plugin wires bootstrap and tooling project classpaths`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `muzzle plugin wires bootstrap and tooling project classpaths`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } """ ) - val bootstrapDependencies = fixture.run( + val bootstrapDependencies = run( ":dd-java-agent:instrumentation:demo:dependencies", "--configuration", "muzzleBootstrap" ) assertThat(bootstrapDependencies.output).contains("project :dd-java-agent:agent-bootstrap") - val toolingDependencies = fixture.run( + val toolingDependencies = run( ":dd-java-agent:instrumentation:demo:dependencies", "--configuration", "muzzleTooling" @@ -186,13 +173,12 @@ class MuzzlePluginFunctionalTest { } @Test - fun `muzzle executes exactly planned core-jdk tasks and writes task results`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `muzzle executes exactly planned core-jdk tasks and writes task results`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -201,13 +187,13 @@ class MuzzlePluginFunctionalTest { } """ ) - fixture.writeScanPlugin( + writeScanPlugin( """ // pass """ ) - val result = fixture.run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") + val result = run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") val muzzleTaskPath = ":dd-java-agent:instrumentation:demo:muzzle" val passDirectiveTaskPath = ":dd-java-agent:instrumentation:demo:muzzle-AssertPass-core-jdk" val failDirectiveTaskPath = ":dd-java-agent:instrumentation:demo:muzzle-AssertFail-core-jdk" @@ -229,8 +215,8 @@ class MuzzlePluginFunctionalTest { assertThat(muzzleChainInOrder) .containsExactly(muzzleTaskPath, passDirectiveTaskPath, failDirectiveTaskPath, endTaskPath) - val passDirectiveResult = fixture.resultFile("muzzle-AssertPass-core-jdk") - val failDirectiveResult = fixture.resultFile("muzzle-AssertFail-core-jdk") + val passDirectiveResult = resultFile("muzzle-AssertPass-core-jdk") + val failDirectiveResult = resultFile("muzzle-AssertFail-core-jdk") assertThat(passDirectiveResult).isRegularFile() assertThat(failDirectiveResult).isRegularFile() assertThat(passDirectiveResult.readText()).isEqualTo("PASSING") @@ -238,26 +224,25 @@ class MuzzlePluginFunctionalTest { } @Test - fun `artifact directive resolves multiple versions from version range`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - val mavenRepoFixture = MavenRepoFixture(projectDir) + fun `artifact directive resolves multiple versions from version range`() { + val mavenRepoFixture = createMavenRepoFixture() mavenRepoFixture.publishVersions( group = "com.example.test", module = "demo-lib", versions = listOf("1.0.0", "1.1.0", "1.2.0", "2.0.0") ) - fixture.writeProject( + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } // Gradle repositories for artifact download repositories { maven { - url = uri('${mavenRepoFixture.repoUrl}') + url = uri("${mavenRepoFixture.repoUrl}") metadataSources { mavenPom() artifact() @@ -268,17 +253,17 @@ class MuzzlePluginFunctionalTest { muzzle { pass { - group = 'com.example.test' - module = 'demo-lib' - versions = '[1.0.0,2.0.0)' // Should resolve 1.0.0, 1.1.0, 1.2.0 but NOT 2.0.0 + group = "com.example.test" + module = "demo-lib" + versions = "[1.0.0,2.0.0)" // Should resolve 1.0.0, 1.1.0, 1.2.0 but NOT 2.0.0 } } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() // Leveraging MAVEN_REPOSITORY_PROXY to point to our fake repo over maven central - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace", env = mapOf("MAVEN_REPOSITORY_PROXY" to mavenRepoFixture.repoUrl) @@ -301,8 +286,8 @@ class MuzzlePluginFunctionalTest { .withFailMessage("Should not check against test-demo-lib:2.0.0") .isNull() - val reportFile = fixture.findSingleMuzzleJUnitReport() - val report = fixture.parseXml(reportFile) + val reportFile = findSingleMuzzleJUnitReport() + val report = parseXml(reportFile) val suite = report.documentElement val testCount = suite.getAttribute("tests").toInt() assertThat(testCount) @@ -318,18 +303,17 @@ class MuzzlePluginFunctionalTest { } @Test - fun `named directive is passed to scan plugin`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `named directive is passed to scan plugin`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { pass { - name = 'my-custom-check' + name = "my-custom-check" coreJdk() } } @@ -337,7 +321,7 @@ class MuzzlePluginFunctionalTest { ) // The real MuzzleVersionScanPlugin uses the directive name to filter InstrumenterModules - fixture.writeScanPlugin( + writeScanPlugin( """ if (!"my-custom-check".equals(muzzleDirective)) { throw new IllegalStateException( @@ -349,7 +333,7 @@ class MuzzlePluginFunctionalTest { """ ) - val result = fixture.run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") + val result = run(":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace") assertThat(result.task(":dd-java-agent:instrumentation:demo:muzzle-AssertPass-core-jdk")?.outcome) .isEqualTo(SUCCESS) @@ -358,27 +342,26 @@ class MuzzlePluginFunctionalTest { } @Test - fun `non-existent artifact fails with clear error message`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `non-existent artifact fails with clear error message`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { pass { - group = 'com.example.nonexistent' - module = 'does-not-exist' - versions = '[1.0.0,2.0.0)' + group = "com.example.nonexistent" + module = "does-not-exist" + versions = "[1.0.0,2.0.0)" } } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace", env = mapOf("MAVEN_REPOSITORY_PROXY" to "https://repo1.maven.org/maven2/") @@ -395,13 +378,12 @@ class MuzzlePluginFunctionalTest { } @Test - fun `pass directive that fails validation causes build failure`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `pass directive that fails validation causes build failure`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -413,7 +395,7 @@ class MuzzlePluginFunctionalTest { ) // Real implementation throws RuntimeException when !passed && assertPass (line 70 of MuzzleVersionScanPlugin) - fixture.writeScanPlugin( + writeScanPlugin( """ if (assertPass) { System.err.println("FAILED MUZZLE VALIDATION: mismatches:"); @@ -423,7 +405,7 @@ class MuzzlePluginFunctionalTest { """ ) - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace" ) @@ -435,13 +417,12 @@ class MuzzlePluginFunctionalTest { } @Test - fun `fail directive that passes validation causes build failure`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - fixture.writeProject( + fun `fail directive that passes validation causes build failure`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -454,7 +435,7 @@ class MuzzlePluginFunctionalTest { // Scan plugin simulates successful validation when it should fail // Real MuzzleVersionScanPlugin throws RuntimeException when passed && !assertPass - fixture.writeScanPlugin( + writeScanPlugin( """ if (!assertPass) { System.err.println("MUZZLE PASSED BUT FAILURE WAS EXPECTED"); @@ -463,7 +444,7 @@ class MuzzlePluginFunctionalTest { """ ) - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace" ) @@ -477,9 +458,8 @@ class MuzzlePluginFunctionalTest { } @Test - fun `additional dependencies are added to muzzle test classpath`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - val mavenRepoFixture = MavenRepoFixture(projectDir) + fun `additional dependencies are added to muzzle test classpath`() { + val mavenRepoFixture = createMavenRepoFixture() // Create a fake Maven repo with a fake additional dependency // The JAR will automatically include standard Maven metadata @@ -488,16 +468,16 @@ class MuzzlePluginFunctionalTest { module = "extra-lib", versions = listOf("1.0.0") ) - fixture.writeProject( + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } repositories { maven { - url = uri('${mavenRepoFixture.repoUrl}') + url = uri("${mavenRepoFixture.repoUrl}") metadataSources { mavenPom() artifact() @@ -508,14 +488,14 @@ class MuzzlePluginFunctionalTest { muzzle { pass { coreJdk() - extraDependency('com.example.extra:extra-lib:1.0.0') + extraDependency("com.example.extra:extra-lib:1.0.0") } } """ ) // Scan plugin verifies that the additional dependency JAR is in the classpath - fixture.writeScanPlugin( + writeScanPlugin( """ java.io.InputStream resource = testApplicationClassLoader.getResourceAsStream("META-INF/maven/com.example.extra/extra-lib/pom.properties"); if (resource != null) { @@ -531,7 +511,7 @@ class MuzzlePluginFunctionalTest { """ ) - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace", env = mapOf("MAVEN_REPOSITORY_PROXY" to mavenRepoFixture.repoUrl) @@ -548,9 +528,8 @@ class MuzzlePluginFunctionalTest { } @Test - fun `excluded dependencies are removed from muzzle test classpath`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - val mavenRepoFixture = MavenRepoFixture(projectDir) + fun `excluded dependencies are removed from muzzle test classpath`() { + val mavenRepoFixture = createMavenRepoFixture() // Create a fake repo with an artifact that has transitive dependencies mavenRepoFixture.publishVersions( @@ -560,6 +539,7 @@ class MuzzlePluginFunctionalTest { ) // Manually create a POM with a transitive dependency + // Write into MavenRepoFixture's repoDir, not GradleFixture's projectDir. val pomFile = mavenRepoFixture.repoDir.resolve("com/example/test/with-transitive/1.0.0/with-transitive-1.0.0.pom") pomFile.writeText( """ @@ -579,16 +559,16 @@ class MuzzlePluginFunctionalTest { """.trimIndent() ) - fixture.writeProject( + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } repositories { maven { - url = uri('${mavenRepoFixture.repoUrl}') + url = uri("${mavenRepoFixture.repoUrl}") metadataSources { mavenPom() artifact() @@ -599,17 +579,17 @@ class MuzzlePluginFunctionalTest { muzzle { pass { - group = 'com.example.test' - module = 'with-transitive' - versions = '1.0.0' - excludeDependency('com.google.guava:guava') + group = "com.example.test" + module = "with-transitive" + versions = "1.0.0" + excludeDependency("com.google.guava:guava") } } """ ) // Scan plugin verifies that guava is NOT in the classpath (it was excluded) - fixture.writeScanPlugin( + writeScanPlugin( """ try { testApplicationClassLoader.loadClass("com.google.common.collect.ImmutableList"); @@ -620,7 +600,7 @@ class MuzzlePluginFunctionalTest { """ ) - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace", env = mapOf("MAVEN_REPOSITORY_PROXY" to mavenRepoFixture.repoUrl) @@ -635,17 +615,15 @@ class MuzzlePluginFunctionalTest { } @Test - fun `java plugin applied after muzzle plugin`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `java plugin applied after muzzle plugin`() { + writeProject( """ plugins { - id 'dd-trace-java.muzzle' + id("dd-trace-java.muzzle") } // applied after muzzle plugin - apply plugin: 'java' + apply(plugin = "java") muzzle { pass { @@ -654,9 +632,9 @@ class MuzzlePluginFunctionalTest { } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace" ) @@ -667,29 +645,27 @@ class MuzzlePluginFunctionalTest { } @Test - fun `java plugin applied before muzzle plugin`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `java plugin applied before muzzle plugin`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' apply false // Declared but not applied + id("java") + id("dd-trace-java.muzzle") apply false // Declared but not applied } // Apply muzzle plugin after java using imperative syntax - apply plugin: 'dd-trace-java.muzzle' + apply(plugin = "dd-trace-java.muzzle") - muzzle { + extensions.configure("muzzle") { pass { coreJdk() } } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace" ) @@ -700,13 +676,11 @@ class MuzzlePluginFunctionalTest { } @Test - fun `plugin behavior without java plugin should no-op`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `plugin behavior without java plugin should no-op`() { + writeProject( """ plugins { - id 'dd-trace-java.muzzle' + id("dd-trace-java.muzzle") // NO java plugin applied } @@ -717,9 +691,9 @@ class MuzzlePluginFunctionalTest { } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:tasks", "--all" ) @@ -730,20 +704,21 @@ class MuzzlePluginFunctionalTest { } @Test - fun `missing dd-java-agent projects error handling`(@TempDir projectDir: File) { - // Create a minimal settings.gradle without the dd-java-agent structure - File(projectDir, "settings.gradle").also { it.parentFile?.mkdirs() }.writeText( + fun `missing dd-java-agent projects error handling`() { + // Create a minimal settings.gradle.kts without the dd-java-agent structure + writeSettings( + """ + rootProject.name = "muzzle-test" + include(":instrumentation:demo") """ - rootProject.name = 'muzzle-test' - include ':instrumentation:demo' - """.trimIndent() ) - File(projectDir, "instrumentation/demo/build.gradle").also { it.parentFile?.mkdirs() }.writeText( + addSubproject( + "instrumentation:demo", """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -751,13 +726,13 @@ class MuzzlePluginFunctionalTest { coreJdk() } } - """.trimIndent() + """ ) // No need to create MuzzleVersionScanPlugin - the error happens during configuration // phase before any task execution, so the scan plugin is never invoked - val result = GradleFixture(projectDir).run( + val result = run( ":instrumentation:demo:tasks", "--stacktrace" ) @@ -771,26 +746,25 @@ class MuzzlePluginFunctionalTest { } @Test - fun `assertInverse creates pass and fail tasks for in-range and out-of-range versions`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - val mavenRepoFixture = MavenRepoFixture(projectDir) + fun `assertInverse creates pass and fail tasks for in-range and out-of-range versions`() { + val mavenRepoFixture = createMavenRepoFixture() mavenRepoFixture.publishVersions( group = "com.example.test", module = "inverse-lib", versions = listOf("1.0.0", "2.0.0", "3.0.0", "4.0.0") ) - fixture.writeProject( + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } // Gradle repositories for artifact download repositories { maven { - url = uri('${mavenRepoFixture.repoUrl}') + url = uri("${mavenRepoFixture.repoUrl}") metadataSources { mavenPom() artifact() @@ -800,21 +774,21 @@ class MuzzlePluginFunctionalTest { muzzle { pass { - group = 'com.example.test' - module = 'inverse-lib' - versions = '[2.0.0,3.0.0]' + group = "com.example.test" + module = "inverse-lib" + versions = "[2.0.0,3.0.0]" assertInverse = true } } """ ) - fixture.writeScanPlugin( + writeScanPlugin( """ System.out.println("MUZZLE_CHECK assertPass=" + assertPass); """ ) - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace", env = mapOf("MAVEN_REPOSITORY_PROXY" to mavenRepoFixture.repoUrl) @@ -848,8 +822,8 @@ class MuzzlePluginFunctionalTest { .contains("MUZZLE_CHECK assertPass=false") // Verify JUnit report contains all 4 test cases with no failures - val reportFile = fixture.findSingleMuzzleJUnitReport() - val report = fixture.parseXml(reportFile) + val reportFile = findSingleMuzzleJUnitReport() + val report = parseXml(reportFile) val suite = report.documentElement assertThat(suite.getAttribute("tests")) .withFailMessage("Should have 4 test cases (2 pass + 2 inverse fail)") diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginPerformanceTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginPerformanceTest.kt index 79aaf409b7c..2e43b0b3d38 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginPerformanceTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginPerformanceTest.kt @@ -1,38 +1,33 @@ package datadog.gradle.plugin.muzzle -import datadog.gradle.plugin.MavenRepoFixture import org.gradle.testkit.runner.TaskOutcome.SUCCESS import org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir -import java.io.File import org.assertj.core.api.Assertions.assertThat -class MuzzlePluginPerformanceTest { +class MuzzlePluginPerformanceTest : MuzzlePluginTestFixture() { @Test - fun `task graph does not include muzzle tasks when not requested`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `task graph does not include muzzle tasks when not requested`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { pass { - group = 'com.example.test' - module = 'some-lib' - versions = '[1.0.0,2.0.0)' + group = "com.example.test" + module = "some-lib" + versions = "[1.0.0,2.0.0)" } } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:tasks", "--all", "--info" @@ -49,26 +44,24 @@ class MuzzlePluginPerformanceTest { } @Test - fun `does not configure muzzle when other project muzzle task is requested`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `does not configure muzzle when other project muzzle task is requested`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { pass { coreJdk() } } """ ) - fixture.writeNoopScanPlugin() - fixture.addSubproject("dd-java-agent:instrumentation:other", + writeNoopScanPlugin() + addSubproject("dd-java-agent:instrumentation:other", """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { pass { coreJdk() } @@ -76,7 +69,7 @@ class MuzzlePluginPerformanceTest { """ ) - val result = fixture.run( + val result = run( ":dd-java-agent:instrumentation:demo:muzzle", "--stacktrace", "--info" @@ -94,9 +87,8 @@ class MuzzlePluginPerformanceTest { } @Test - fun `muzzle tasks are up-to-date when nothing changes`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - val mavenRepoFixture = MavenRepoFixture(projectDir) + fun `muzzle tasks are up-to-date when nothing changes`() { + val mavenRepoFixture = createMavenRepoFixture() mavenRepoFixture.publishVersions( group = "com.example.test", @@ -104,16 +96,16 @@ class MuzzlePluginPerformanceTest { versions = listOf("1.0.0", "1.1.0") ) - fixture.writeProject( + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } repositories { maven { - url = uri('${mavenRepoFixture.repoUrl}') + url = uri("${mavenRepoFixture.repoUrl}") metadataSources { mavenPom() artifact() @@ -123,18 +115,18 @@ class MuzzlePluginPerformanceTest { muzzle { pass { - group = 'com.example.test' - module = 'example-lib' - versions = '[1.0.0,2.0.0)' + group = "com.example.test" + module = "example-lib" + versions = "[1.0.0,2.0.0)" } } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() // First run - should execute the tasks run { - val firstRun = fixture.run( + val firstRun = run( ":dd-java-agent:instrumentation:demo:muzzle", env = mapOf("MAVEN_REPOSITORY_PROXY" to mavenRepoFixture.repoUrl) ) @@ -153,7 +145,7 @@ class MuzzlePluginPerformanceTest { // Second run without changes - assertion tasks should be up-to-date run { - val secondRun = fixture.run( + val secondRun = run( ":dd-java-agent:instrumentation:demo:muzzle", env = mapOf("MAVEN_REPOSITORY_PROXY" to mavenRepoFixture.repoUrl) ) @@ -181,7 +173,7 @@ class MuzzlePluginPerformanceTest { versions = listOf("1.2.0") ) - val thirdRun = fixture.run( + val thirdRun = run( ":dd-java-agent:instrumentation:demo:muzzle", env = mapOf("MAVEN_REPOSITORY_PROXY" to mavenRepoFixture.repoUrl) ) @@ -205,14 +197,12 @@ class MuzzlePluginPerformanceTest { } @Test - fun `muzzle tasks invalidated when instrumentation code changes`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `muzzle tasks invalidated when instrumentation code changes`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -220,11 +210,11 @@ class MuzzlePluginPerformanceTest { } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() // First run - should execute the tasks run { - val firstRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val firstRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(firstRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("First run should execute muzzle task") @@ -236,7 +226,7 @@ class MuzzlePluginPerformanceTest { // Second run without changes - assertion tasks should be up-to-date run { - val secondRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val secondRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(secondRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("Second run should be up-to-date") @@ -248,19 +238,18 @@ class MuzzlePluginPerformanceTest { // Third run after changing instrumentation code - should be invalidated run { - val demoSourceDir = File(projectDir, "dd-java-agent/instrumentation/demo/src/main/java/com/example") - demoSourceDir.mkdirs() - File(demoSourceDir, "Demo.java").writeText( + writeFile( + "dd-java-agent/instrumentation/demo/src/main/java/com/example/Demo.java", """ package com.example; public class Demo { public void doSomething() {} } - """.trimIndent() + """ ) - val thirdRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val thirdRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(thirdRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("Third run should execute after instrumentation code change") @@ -272,14 +261,12 @@ class MuzzlePluginPerformanceTest { } @Test - fun `muzzle tasks invalidated when tooling classpath changes`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `muzzle tasks invalidated when tooling classpath changes`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -287,11 +274,11 @@ class MuzzlePluginPerformanceTest { } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() // First run - should execute the tasks run { - val firstRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val firstRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(firstRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("First run should execute muzzle task") @@ -303,7 +290,7 @@ class MuzzlePluginPerformanceTest { // Second run without changes - assertion tasks should be up-to-date run { - val secondRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val secondRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(secondRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("Second run should be up-to-date") @@ -315,19 +302,18 @@ class MuzzlePluginPerformanceTest { // Third run after changing agent-tooling code - should be invalidated run { - val toolingSourceDir = File(projectDir, "dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling") - toolingSourceDir.mkdirs() - File(toolingSourceDir, "Extra.java").writeText( + writeFile( + "dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/Extra.java", """ package datadog.trace.agent.tooling; public class Extra { public void extraMethod() {} } - """.trimIndent() + """ ) - val thirdRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val thirdRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(thirdRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("Third run should execute after tooling classpath change") @@ -339,14 +325,12 @@ class MuzzlePluginPerformanceTest { } @Test - fun `muzzle tasks invalidated when bootstrap classpath changes`(@TempDir projectDir: File) { - val fixture = MuzzlePluginTestFixture(projectDir) - - fixture.writeProject( + fun `muzzle tasks invalidated when bootstrap classpath changes`() { + writeProject( """ plugins { - id 'java' - id 'dd-trace-java.muzzle' + id("java") + id("dd-trace-java.muzzle") } muzzle { @@ -354,11 +338,11 @@ class MuzzlePluginPerformanceTest { } """ ) - fixture.writeNoopScanPlugin() + writeNoopScanPlugin() // First run - should execute the tasks run { - val firstRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val firstRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(firstRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("First run should execute muzzle task") @@ -370,7 +354,7 @@ class MuzzlePluginPerformanceTest { // Second run without changes - assertion tasks should be up-to-date run { - val secondRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val secondRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(secondRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("Second run should be up-to-date") @@ -382,19 +366,18 @@ class MuzzlePluginPerformanceTest { // Third run after changing agent-bootstrap code - should be invalidated run { - val bootstrapSourceDir = File(projectDir, "dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap") - bootstrapSourceDir.mkdirs() - File(bootstrapSourceDir, "Helper.java").writeText( + writeFile( + "dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Helper.java", """ package datadog.trace.bootstrap; public class Helper { public void help() {} } - """.trimIndent() + """ ) - val thirdRun = fixture.run(":dd-java-agent:instrumentation:demo:muzzle") + val thirdRun = run(":dd-java-agent:instrumentation:demo:muzzle") assertThat(thirdRun.task(":dd-java-agent:instrumentation:demo:muzzle")?.outcome) .withFailMessage("Third run should execute after bootstrap classpath change") diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginTestFixture.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginTestFixture.kt index 026ef5b0d9d..ba9945cbe4a 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginTestFixture.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/MuzzlePluginTestFixture.kt @@ -1,6 +1,7 @@ package datadog.gradle.plugin.muzzle import datadog.gradle.plugin.GradleFixture +import datadog.gradle.plugin.MavenRepoFixture import org.intellij.lang.annotations.Language import java.io.File @@ -8,34 +9,34 @@ import java.io.File * Test fixture for muzzle plugin integration tests. * Extends GradleFixture with muzzle-specific functionality. */ -internal class MuzzlePluginTestFixture(projectDir: File) : GradleFixture(projectDir) { +open class MuzzlePluginTestFixture : GradleFixture() { + fun createMavenRepoFixture(): MavenRepoFixture = MavenRepoFixture(projectDir) /** * Writes the basic Gradle project structure for muzzle testing. * Creates a multi-project build with agent-bootstrap, agent-tooling, and instrumentation modules. */ - fun writeProject(@Language("Groovy") instrumentationBuildScript: String) { - file("settings.gradle").writeText( - // language=Groovy + fun writeProject(@Language("kotlin") instrumentationBuildScript: String) { + writeSettings( + """ + rootProject.name = "muzzle-e2e" """ - rootProject.name = 'muzzle-e2e' - """.trimIndent() ) addSubproject("dd-java-agent:agent-bootstrap", """ plugins { - id 'java' + id("java") } - tasks.register('compileMain_java11Java') + tasks.register("compileMain_java11Java") """ ) addSubproject("dd-java-agent:agent-tooling", """ plugins { - id 'java' + id("java") } """ ) @@ -57,25 +58,26 @@ internal class MuzzlePluginTestFixture(projectDir: File) : GradleFixture(project * @param assertionBody Java code to execute in the assertion method */ fun writeScanPlugin(@Language("JAVA") assertionBody: String) { - file("dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/MuzzleVersionScanPlugin.java") - .writeText( - // language=JAVA - """ - package datadog.trace.agent.tooling.muzzle; + writeJavaSource( + "datadog.trace.agent.tooling.muzzle.MuzzleVersionScanPlugin", + // language=JAVA + """ + package datadog.trace.agent.tooling.muzzle; - public final class MuzzleVersionScanPlugin { - private MuzzleVersionScanPlugin() {} + public final class MuzzleVersionScanPlugin { + private MuzzleVersionScanPlugin() {} - public static void assertInstrumentationMuzzled( - ClassLoader instrumentationClassLoader, - ClassLoader testApplicationClassLoader, - boolean assertPass, - String muzzleDirective) { - $assertionBody - } + public static void assertInstrumentationMuzzled( + ClassLoader instrumentationClassLoader, + ClassLoader testApplicationClassLoader, + boolean assertPass, + String muzzleDirective) { + $assertionBody } - """.trimIndent() - ) + } + """, + projectPath = "dd-java-agent:agent-tooling", + ) } /** diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/RangeQueryTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/RangeQueryTest.kt index 5ced9ed1032..2c47645bdc7 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/RangeQueryTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/muzzle/RangeQueryTest.kt @@ -15,7 +15,7 @@ class RangeQueryTest { // compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.5.0', ext: 'pom' val directiveArtifact: Artifact = DefaultArtifact("org.codehaus.groovy", "groovy-all", "jar", "[2.5.0,2.5.8)") val rangeRequest = VersionRangeRequest().apply { - repositories = MuzzleMavenRepoUtils.MUZZLE_REPOS + repositories = MuzzleMavenRepoUtils.defaultMuzzleRepos() artifact = directiveArtifact } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt index 4f253b41633..aa25c46c757 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt @@ -1,169 +1,161 @@ package datadog.gradle.plugin.version import org.assertj.core.api.Assertions.assertThat -import org.gradle.testkit.runner.GradleRunner import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir import java.io.File -class TracerVersionIntegrationTest { +class TracerVersionIntegrationTest : VersionPluginsFixture() { @Test - fun `should use default version when not under a git clone`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion(expectedVersion = "0.1.0-SNAPSHOT") + fun `should use default version when not under a git clone`() { + assertTracerVersion(expectedVersion = "0.1.0-SNAPSHOT") } @Test - fun `should use default version when no git tags`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should use default version when no git tags`() { + assertTracerVersion( expectedVersion = "0.1.0-SNAPSHOT", beforeGradle = { - fixture.initGitRepo() + initGitRepo() }, ) } @Test - fun `should ignore dirtiness when no git tags`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should ignore dirtiness when no git tags`() { + assertTracerVersion( expectedVersion = "0.1.0-SNAPSHOT", beforeGradle = { - fixture.initGitRepo() - settingsFile.appendText("\n// uncommitted change this file, ") + initGitRepo() + writeSettings("// uncommitted change this file, ", append = true) }, ) } @Test - fun `should use default version when unmatching git tags`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should use default version when unmatching git tags`() { + assertTracerVersion( expectedVersion = "0.1.0-SNAPSHOT", beforeGradle = { - fixture.initGitRepo() - fixture.exec("git", "tag", "something1.40.1", "-m", "Not our tag") + initGitRepo() + exec("git", "tag", "something1.40.1", "-m", "Not our tag") }, ) } @Test - fun `should use exact version when on tag`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should use exact version when on tag`() { + assertTracerVersion( expectedVersion = "1.52.0", beforeGradle = { - fixture.initGitRepo() - fixture.exec("git", "tag", "v1.52.0", "-m", "") + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") }, ) } @Test - fun `should increment minor and mark dirtiness`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should increment minor and mark dirtiness`() { + assertTracerVersion( expectedVersion = "1.53.0-SNAPSHOT-DIRTY", beforeGradle = { - gradlePropertiesFile.writeText("tracerVersion.dirtiness=true") - fixture.initGitRepo() - fixture.exec("git", "tag", "v1.52.0", "-m", "") - settingsFile.appendText("\n// uncommitted change this file, ") + writeGradleProperties("tracerVersion.dirtiness=true") + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") + writeSettings("// uncommitted change this file, ", append = true) }, ) } @Test - fun `should increment minor with added commits after version tag`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should increment minor with added commits after version tag`() { + assertTracerVersion( expectedVersion = "1.53.0-SNAPSHOT", beforeGradle = { - fixture.initGitRepo() - fixture.exec("git", "tag", "v1.52.0", "-m", "") - settingsFile.appendText("\n// Committed change this file, ") - fixture.exec("git", "commit", "-am", "Another commit") + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") + writeSettings("// Committed change this file, ", append = true) + exec("git", "commit", "-am", "Another commit") }, ) } @Test - fun `should increment minor with snapshot and dirtiness with added commits after version tag and dirty`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should increment minor with snapshot and dirtiness with added commits after version tag and dirty`() { + assertTracerVersion( expectedVersion = "1.53.0-SNAPSHOT-DIRTY", beforeGradle = { - gradlePropertiesFile.writeText("tracerVersion.dirtiness=true") - fixture.initGitRepo() - fixture.exec("git", "tag", "v1.52.0", "-m", "") - val settings = settingsFile - settings.appendText("\n// uncommitted change ") - fixture.exec("git", "commit", "-am", "Another commit") - settings.appendText("\n// An uncommitted modification") + writeGradleProperties("tracerVersion.dirtiness=true") + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") + writeSettings("// uncommitted change ", append = true) + exec("git", "commit", "-am", "Another commit") + writeSettings("// An uncommitted modification", append = true) }, ) } @Test - fun `should increment patch on release branch and no patch release tag`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should increment patch on release branch and no patch release tag`() { + assertTracerVersion( expectedVersion = "1.52.1-SNAPSHOT", beforeGradle = { - fixture.initGitRepo() - fixture.exec("git", "tag", "v1.52.0", "-m", "") - settingsFile.appendText("\n// Committed change ") - fixture.exec("git", "commit", "-am", "Another commit") - fixture.exec("git", "switch", "-c", "release/v1.52.x") + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") + writeSettings("// Committed change ", append = true) + exec("git", "commit", "-am", "Another commit") + exec("git", "switch", "-c", "release/v1.52.x") }, ) } @Test - fun `should increment patch on release branch and with previous patch release tag`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should increment patch on release branch and with previous patch release tag`() { + assertTracerVersion( expectedVersion = "1.52.2-SNAPSHOT", beforeGradle = { - fixture.initGitRepo() - fixture.exec("git", "tag", "v1.52.0", "-m", "") - fixture.exec("git", "switch", "-c", "release/v1.52.x") - val settings = settingsFile - settings.appendText("\n// Committed change ") - fixture.exec("git", "commit", "-am", "Another commit") - fixture.exec("git", "tag", "v1.52.1", "-m", "") - settings.appendText("\n// Another committed change ") - fixture.exec("git", "commit", "-am", "Another commit") + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") + exec("git", "switch", "-c", "release/v1.52.x") + writeSettings("// Committed change ", append = true) + exec("git", "commit", "-am", "Another commit") + exec("git", "tag", "v1.52.1", "-m", "") + writeSettings("// Another committed change ", append = true) + exec("git", "commit", "-am", "Another commit") }, ) } @Test - fun `should compute version on worktrees`(@TempDir projectDir: File, @TempDir workTreeDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertTracerVersion( + fun `should compute version on worktrees`(@TempDir workTreeDir: File) { + assertTracerVersion( expectedVersion = "1.53.0-SNAPSHOT", workingDirectory = workTreeDir, beforeGradle = { - fixture.initGitRepo() - fixture.exec("git", "tag", "v1.52.0", "-m", "") - fixture.exec("git", "commit", "-m", "Initial commit", "--allow-empty") - fixture.exec("git", "worktree", "add", workTreeDir.absolutePath) + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") + exec("git", "commit", "-m", "Initial commit", "--allow-empty") + exec("git", "worktree", "add", workTreeDir.absolutePath) + // Write into workTreeDir, not projectDir, so the next commit has changes to pick up. File(workTreeDir, "settings.gradle.kts").appendText("\n// Committed change this file, ") - fixture.exec(workTreeDir, "git", "commit", "-am", "Another commit") + exec(workTreeDir, "git", "commit", "-am", "Another commit") }, ) } - private fun VersionPluginsFixture.assertTracerVersion( + private fun assertTracerVersion( expectedVersion: String, - workingDirectory: File? = null, + workingDirectory: File = projectDir, beforeGradle: VersionPluginsFixture.() -> Unit = {}, ) { - settingsFile.writeText("""rootProject.name = "test-project"""") - projectBuildFile.writeText( + writeSettings( + """ + rootProject.name = "test-project" + """ + ) + + writeRootProject( """ plugins { id("dd-trace-java.tracer-version") @@ -174,23 +166,12 @@ class TracerVersionIntegrationTest { } group = "datadog.tracer.version.test" - """.trimIndent() + """ ) beforeGradle() - val buildResult = if (workingDirectory == null) { - run("printVersion", "--quiet") - } else { - // Worktree: Gradle must run from a directory other than projectDir, - // so use GradleRunner directly instead of GradleFixture.run(). - GradleRunner.create() - .forwardOutput() - .withPluginClasspath() - .withArguments("printVersion", "--quiet") - .withProjectDir(workingDirectory) - .build() - } + val buildResult = run("printVersion", "--quiet", gradleProjectDir = workingDirectory) assertThat(buildResult.output.lines().first()).isEqualTo(expectedVersion) } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt index aba9e9fb35b..e33bc75cf40 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/VersionPluginsFixture.kt @@ -4,8 +4,7 @@ import datadog.gradle.plugin.GradleFixture import java.io.File import java.io.IOException -internal class VersionPluginsFixture(projectDir: File) : GradleFixture(projectDir) { - +open class VersionPluginsFixture : GradleFixture() { fun exec(workingDirectory: File, vararg args: String) { val exitCode = ProcessBuilder() .command(*args) @@ -28,13 +27,7 @@ internal class VersionPluginsFixture(projectDir: File) : GradleFixture(projectDi exec(workingDirectory, "git", "commit", "-m", "A commit") } - val projectBuildFile = file("build.gradle.kts") - - val gradlePropertiesFile = file("gradle.properties") - - val settingsFile = file("settings.gradle.kts") - - val generatedVersionFile = file("build/generated/version/my-lib.version", false) + val generatedVersionFile: File get() = file("build/generated/version/my-lib.version") - val builtResourceVersionFile = file("build/resources/main/my-lib.version", false) + val builtResourceVersionFile: File get() = file("build/resources/main/my-lib.version") } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt index 8aa49a86ae8..f1bb1395b16 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/WriteVersionFilePluginTest.kt @@ -4,15 +4,12 @@ import org.assertj.core.api.Assertions.assertThat import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.TaskOutcome import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir -import java.io.File -class WriteVersionFilePluginTest { +class WriteVersionFilePluginTest : VersionPluginsFixture() { @Test - fun `writes version file in version~hash format`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertVersionFile( + fun `writes version file in version~hash format`() { + assertVersionFile( expectedContentRegex = "1\\.2\\.3~[0-9a-f]+", beforeGradle = { initGitRepo() @@ -21,37 +18,37 @@ class WriteVersionFilePluginTest { } @Test - fun `version and gitHash properties can be overridden`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertVersionFile( + fun `version and gitHash properties can be overridden`() { + assertVersionFile( expectedContentRegex = "9.9.9~deadbeef", beforeGradle = { - projectBuildFile.appendText( + writeRootProject( """ - tasks.named("writeVersionNumberFile").configure { + tasks.named("writeVersionNumberFile") { version.set("9.9.9") gitHash.set("deadbeef") } - """.trimIndent() + """, + append = true, ) }, ) } @Test - fun `task overwrites existing version file`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertVersionFile( + fun `task overwrites existing version file`() { + assertVersionFile( expectedContentRegex = "1.2.3~abc12345", beforeGradle = { - projectBuildFile.appendText( + writeRootProject( """ - tasks.named("writeVersionNumberFile").configure { + tasks.named("writeVersionNumberFile") { gitHash.set("abc12345") } - """.trimIndent() + """, + append = true, ) generatedVersionFile.run { parentFile.mkdirs() @@ -62,86 +59,90 @@ class WriteVersionFilePluginTest { } @Test - fun `version file generation is wired into main resources`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertVersionFile( + fun `version file generation is wired into main resources`() { + assertVersionFile( expectedContentRegex = "1.2.3~abc12345", task = "processResources", beforeGradle = { - projectBuildFile.appendText( + writeRootProject( """ - tasks.named("writeVersionNumberFile").configure { + tasks.named("writeVersionNumberFile") { gitHash.set("abc12345") } - """.trimIndent() + """, + append = true, ) }, ) - assertThat(fixture.builtResourceVersionFile).exists() + assertThat(builtResourceVersionFile).exists() } @Test - fun `task is up-to-date on second run`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertVersionFile( + fun `task is up-to-date on second run`() { + assertVersionFile( expectedContentRegex = "1.2.3~abc12345", beforeGradle = { - projectBuildFile.appendText( + writeRootProject( """ - tasks.named("writeVersionNumberFile").configure { + tasks.named("writeVersionNumberFile") { gitHash.set("abc12345") } - """.trimIndent() + """, + append = true, ) }, ) - val result = fixture.run("writeVersionNumberFile") + val result = run("writeVersionNumberFile") assertThat(result.task(":writeVersionNumberFile")?.outcome).isEqualTo(TaskOutcome.UP_TO_DATE) } @Test - fun `clean deletes version file`(@TempDir projectDir: File) { - val fixture = VersionPluginsFixture(projectDir) - fixture.assertVersionFile( + fun `clean deletes version file`() { + assertVersionFile( expectedContentRegex = "1.2.3~abc12345", beforeGradle = { - projectBuildFile.appendText( + writeRootProject( """ - tasks.named("writeVersionNumberFile").configure { + tasks.named("writeVersionNumberFile") { gitHash.set("abc12345") } - """.trimIndent() + """, + append = true, ) }, ) - val versionFile = fixture.generatedVersionFile + val versionFile = generatedVersionFile - val result = fixture.run("clean") + val result = run("clean") assertThat(result.task(":clean")?.outcome).isEqualTo(TaskOutcome.SUCCESS) assertThat(versionFile).doesNotExist() } - private fun VersionPluginsFixture.assertVersionFile( + private fun assertVersionFile( expectedContentRegex: String, task: String = ":writeVersionNumberFile", beforeGradle: VersionPluginsFixture.() -> Unit = {}, ): BuildResult { - settingsFile.writeText("""rootProject.name = "my-lib"""") - projectBuildFile.writeText( + writeSettings( + """ + rootProject.name = "my-lib" + """ + ) + writeRootProject( """ plugins { id("dd-trace-java.version-file") } version = "1.2.3" - """.trimIndent() + """ ) beforeGradle() From 84a4aa9bcd5cedc5bdee9530f47dc1323c535f13 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Mon, 18 May 2026 12:40:25 -0400 Subject: [PATCH 036/478] Bump spoybugs version. (#11399) Bump spoybugs version. Co-authored-by: alexey.kuznetsov --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 38169896069..f8cfe00fa7f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ plugins { id("com.diffplug.spotless") version "8.4.0" id("me.champeau.gradle.japicmp") version "0.4.3" - id("com.github.spotbugs") version "6.5.0" + id("com.github.spotbugs") version "6.5.4" id("de.thetaphi.forbiddenapis") version "3.10" id("io.github.gradle-nexus.publish-plugin") version "2.0.0" id("com.gradleup.shadow") version "8.3.9" apply false From 198a35d0f5c78322c4f4a3e901436ba50c0b9836 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 18 May 2026 19:35:28 +0200 Subject: [PATCH 037/478] Tolerate AbstractMethodError for servletRequest remote port (#11403) Tolerate AbstractMethodError for servletRequest remote port Co-authored-by: devflow.devflow-routing-intake --- .../servlet3/Servlet3Decorator.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java index 61a8d22a2b8..9db2d47d437 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java @@ -1,5 +1,7 @@ package datadog.trace.instrumentation.servlet3; +import static datadog.trace.api.telemetry.LogCollector.EXCLUDE_TELEMETRY; + import datadog.context.Context; import datadog.trace.api.ClassloaderConfigurationOverrides; import datadog.trace.bootstrap.instrumentation.api.AgentPropagation; @@ -10,6 +12,8 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Servlet3Decorator extends HttpServerDecorator< @@ -21,6 +25,7 @@ public class Servlet3Decorator UTF8BytesString.create(DECORATE.operationName()); public static final String DD_CONTEXT_PATH_ATTRIBUTE = "datadog.context.path"; public static final String DD_SERVLET_PATH_ATTRIBUTE = "datadog.servlet.path"; + private static final Logger LOGGER = LoggerFactory.getLogger(Servlet3Decorator.class); @Override protected String[] instrumentationNames() { @@ -64,7 +69,15 @@ protected String peerHostIP(final HttpServletRequest httpServletRequest) { @Override protected int peerPort(final HttpServletRequest httpServletRequest) { - return httpServletRequest.getRemotePort(); + try { + return httpServletRequest.getRemotePort(); + } catch (AbstractMethodError e) { + LOGGER.debug( + EXCLUDE_TELEMETRY, + "Method not implemented when trying to get the request remote port", + e); + return 0; // 0 will be handled as `no port` by the caller + } } @Override From 05a5e2872f1b1fcdd6462e4bc88d487379fe445d Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Tue, 19 May 2026 13:41:12 -0400 Subject: [PATCH 038/478] Added CI_COMMIT_TITLE to list of noisy env vars. (#11419) Added CI_COMMIT_TITLE to list of noisy env vars. Co-authored-by: alexey.kuznetsov --- .../src/main/groovy/datadog/smoketest/ProcessManager.groovy | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dd-smoke-tests/src/main/groovy/datadog/smoketest/ProcessManager.groovy b/dd-smoke-tests/src/main/groovy/datadog/smoketest/ProcessManager.groovy index 55dd4a03a78..fc771e842bd 100644 --- a/dd-smoke-tests/src/main/groovy/datadog/smoketest/ProcessManager.groovy +++ b/dd-smoke-tests/src/main/groovy/datadog/smoketest/ProcessManager.groovy @@ -19,7 +19,10 @@ abstract class ProcessManager extends Specification { public static final String SERVICE_NAME = "smoke-test-java-app" public static final String ENV = "smoketest" public static final String VERSION = "99" - public static final Set NOISY_ENVIRONMENT_VARIABLES = ImmutableSet.of('CI_COMMIT_MESSAGE', 'CI_COMMIT_DESCRIPTION') + public static final Set NOISY_ENVIRONMENT_VARIABLES = ImmutableSet.of( + 'CI_COMMIT_TITLE', + 'CI_COMMIT_MESSAGE', + 'CI_COMMIT_DESCRIPTION') private static final DateTimeFormatter LOG_FILE_TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd-HHmmss.SSS", Locale.ROOT).withZone(ZoneOffset.UTC) From c7ae94ba307c5b0654c95ed7bc955b90eb3f2ba1 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 19 May 2026 20:19:38 +0200 Subject: [PATCH 039/478] Switch README logo to SVG with light/dark mode support (#11415) docs: support light and dark mode logo in README Use the element to switch between the standard and reversed Datadog logos depending on GitHub's color scheme, and center the logo. docs: double the README logo size Merge branch 'master' into bdu/logo Co-authored-by: devflow.devflow-routing-intake --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c9e32ff166..2eb760e369c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -![Datadog logo](https://imgix.datadoghq.com/img/about/presskit/logo-h/dd_horizontal_white.png) +

+ + + + Datadog logo + +

# Datadog Java APM From 3b1c46e428e458df4a928acd8315ace18653d05f Mon Sep 17 00:00:00 2001 From: Maximo Bautista Date: Tue, 19 May 2026 14:23:34 -0400 Subject: [PATCH 040/478] Support OTLP runtime metrics with OTel-native naming (#11318) Adding configs and metrics creation Adding test file to check metrics are collected Doing clean up after testing Merge branch 'master' into maximo/otlp-runtime-metrics Merge branch 'master' into maximo/otlp-runtime-metrics move JvmOtlpRuntimeMetrics.java to agent-jmxfetch prevent JMXFetch from emitting jvm metrics when otlp is enabled; migrate from depending on otel-shim to otel-bootstrap update JMXFetch to only emit either OTLP or JMX runtime metrics Merge branch 'master' into maximo/otlp-runtime-metrics send otlp_jmx_config when otlp runtime metrics enabled update test to assert on guarantees instead of dependent on GC collection Merge branch 'master' into maximo/otlp-runtime-metrics adding exception handling for callback Merge remote-tracking branch 'origin/master' into maximo/otlp-runtime-metrics Minor fixes to use correct storage for observable counters Cleanup Merge branch 'master' into maximo/otlp-runtime-metrics Co-authored-by: mhlidd Co-authored-by: mcculls Co-authored-by: devflow.devflow-routing-intake --- dd-java-agent/agent-jmxfetch/build.gradle | 5 + .../trace/agent/jmxfetch/JMXFetch.java | 17 +- .../agent/jmxfetch/JvmOtlpRuntimeMetrics.java | 368 ++++++++++++++++++ .../jmxfetch-config-no-jvm-defaults.yaml | 9 + .../metrics/data/OtelRunnableObservable.java | 28 ++ .../ResourcesFeatureInstrumentation.java | 1 + .../opentelemetry-1.47/build.gradle | 2 + .../metrics/JvmOtlpRuntimeMetricsTest.java | 213 ++++++++++ 8 files changed, 642 insertions(+), 1 deletion(-) create mode 100644 dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JvmOtlpRuntimeMetrics.java create mode 100644 dd-java-agent/agent-jmxfetch/src/main/resources/jmxfetch-config-no-jvm-defaults.yaml create mode 100644 dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelRunnableObservable.java create mode 100644 dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java diff --git a/dd-java-agent/agent-jmxfetch/build.gradle b/dd-java-agent/agent-jmxfetch/build.gradle index b65d3a110f5..e1eb54102a4 100644 --- a/dd-java-agent/agent-jmxfetch/build.gradle +++ b/dd-java-agent/agent-jmxfetch/build.gradle @@ -25,6 +25,11 @@ dependencies { api libs.slf4j api project(':internal-api') api project(':dd-java-agent:agent-bootstrap') + + // JvmOtlpRuntimeMetrics registers JVM runtime instruments directly against the + // bootstrap-level OTel metric registry. otel-bootstrap vendors and repackages the + // OTel API at build time so this won't conflict with anything in the customer app. + compileOnly project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow') } tasks.named("shadowJar", ShadowJar) { diff --git a/dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JMXFetch.java b/dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JMXFetch.java index f0a2a5541f8..5375fb8b3e6 100644 --- a/dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JMXFetch.java +++ b/dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JMXFetch.java @@ -9,6 +9,7 @@ import datadog.metrics.api.statsd.StatsDClientManager; import datadog.trace.api.Config; import datadog.trace.api.GlobalTracer; +import datadog.trace.api.InstrumenterConfig; import datadog.trace.api.flare.TracerFlare; import datadog.trace.api.telemetry.LogCollector; import de.thetaphi.forbiddenapis.SuppressForbidden; @@ -32,6 +33,7 @@ public class JMXFetch { private static final Logger log = LoggerFactory.getLogger(JMXFetch.class); private static final String DEFAULT_CONFIG = "jmxfetch-config.yaml"; + private static final String OTLP_JMX_CONFIG = "jmxfetch-config-no-jvm-defaults.yaml"; private static final String WEBSPHERE_CONFIG = "jmxfetch-websphere-config.yaml"; private static final int DELAY_BETWEEN_RUN_ATTEMPTS = 5000; @@ -93,9 +95,22 @@ private static void run(final StatsDClientManager statsDClientManager, final Con final StatsDClient statsd = statsDClientManager.statsDClient(host, port, namedPipe, null, null); final AgentStatsdReporter reporter = new AgentStatsdReporter(statsd); + final boolean otlpRuntimeMetricsEnabled = + InstrumenterConfig.get().isMetricsOtelEnabled() && config.isMetricsOtlpExporterEnabled(); + TracerFlare.addReporter(reporter); final List defaultConfigs = new ArrayList<>(); - defaultConfigs.add(DEFAULT_CONFIG); + if (otlpRuntimeMetricsEnabled) { + // Register JVM runtime metric callbacks against the OtelMeterProvider so the OTLP + // exporter started by CoreTracer collects them. Started here so it rides the same + // delayed-start path as JMXFetch itself. + JvmOtlpRuntimeMetrics.start(); + // When the OTLP exporter is collecting JVM runtime metrics, skip the default JMXFetch + // JVM config to avoid double-reporting. + defaultConfigs.add(OTLP_JMX_CONFIG); + } else { + defaultConfigs.add(DEFAULT_CONFIG); + } if (config.isJmxFetchIntegrationEnabled(Collections.singletonList("websphere"), false)) { defaultConfigs.add(WEBSPHERE_CONFIG); } diff --git a/dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JvmOtlpRuntimeMetrics.java b/dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JvmOtlpRuntimeMetrics.java new file mode 100644 index 00000000000..db6cd431bff --- /dev/null +++ b/dd-java-agent/agent-jmxfetch/src/main/java/datadog/trace/agent/jmxfetch/JvmOtlpRuntimeMetrics.java @@ -0,0 +1,368 @@ +package datadog.trace.agent.jmxfetch; + +import static datadog.trace.bootstrap.otel.metrics.OtelInstrumentType.COUNTER; +import static datadog.trace.bootstrap.otel.metrics.OtelInstrumentType.GAUGE; +import static datadog.trace.bootstrap.otel.metrics.OtelInstrumentType.UP_DOWN_COUNTER; + +import com.sun.management.OperatingSystemMXBean; +import datadog.trace.bootstrap.otel.api.common.AttributeKey; +import datadog.trace.bootstrap.otel.api.common.Attributes; +import datadog.trace.bootstrap.otel.common.OtelInstrumentationScope; +import datadog.trace.bootstrap.otel.metrics.OtelInstrumentBuilder; +import datadog.trace.bootstrap.otel.metrics.OtelInstrumentDescriptor; +import datadog.trace.bootstrap.otel.metrics.OtelInstrumentType; +import datadog.trace.bootstrap.otel.metrics.data.OtelMetricRegistry; +import datadog.trace.bootstrap.otel.metrics.data.OtelMetricStorage; +import datadog.trace.bootstrap.otel.metrics.data.OtelRunnableObservable; +import java.lang.management.BufferPoolMXBean; +import java.lang.management.ClassLoadingMXBean; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryUsage; +import java.lang.management.ThreadMXBean; +import java.util.List; +import java.util.Locale; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.ToLongFunction; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Registers JVM runtime metrics with OTel-native names against the agent's bootstrap-level metric + * registry. + */ +public final class JvmOtlpRuntimeMetrics { + private static final Logger log = LoggerFactory.getLogger(JvmOtlpRuntimeMetrics.class); + + private static final OtelInstrumentationScope JVM_SCOPE = + new OtelInstrumentationScope("datadog.jvm.runtime", null, null); + + private static final AttributeKey MEMORY_TYPE = AttributeKey.stringKey("jvm.memory.type"); + private static final AttributeKey MEMORY_POOL = + AttributeKey.stringKey("jvm.memory.pool.name"); + private static final AttributeKey BUFFER_POOL = + AttributeKey.stringKey("jvm.buffer.pool.name"); + private static final Attributes HEAP_ATTRS = Attributes.of(MEMORY_TYPE, "heap"); + private static final Attributes NON_HEAP_ATTRS = Attributes.of(MEMORY_TYPE, "non_heap"); + + private static final AtomicBoolean started = new AtomicBoolean(false); + + /** Registers all JVM runtime metric instruments on the bootstrap-level metric registry. */ + public static void start() { + if (!started.compareAndSet(false, true)) { + return; + } + + try { + // Ensure OtelMetricStorage can serialize io.opentelemetry.api Attributes recorded below; + // the otel-shim registers an equivalent reader on its own class-loader, but agent-jmxfetch + // does not depend on the shim — so we register one here for our Attributes class-loader. + OtelMetricStorage.registerAttributeReader( + Attributes.class.getClassLoader(), + (attributes, visitor) -> + ((Attributes) attributes) + .forEach((a, v) -> visitor.visitAttribute(a.getType().ordinal(), a.getKey(), v))); + + registerMemoryMetrics(); + registerBufferMetrics(); + registerThreadMetrics(); + registerClassLoadingMetrics(); + registerCpuMetrics(); + log.debug("Started OTLP runtime metrics with OTel-native naming (jvm.*)"); + } catch (Exception e) { + log.error("Failed to start JVM OTLP runtime metrics", e); + } + } + + /** + * jvm.memory.used, jvm.memory.committed, jvm.memory.limit, jvm.memory.init, + * jvm.memory.used_after_last_gc — all UpDownCounter per spec. + */ + private static void registerMemoryMetrics() { + MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); + List pools = ManagementFactory.getMemoryPoolMXBeans(); + + registerLongObservable( + "jvm.memory.used", + "Measure of memory used.", + "By", + UP_DOWN_COUNTER, + storage -> { + storage.recordLong(memoryBean.getHeapMemoryUsage().getUsed(), HEAP_ATTRS); + storage.recordLong(memoryBean.getNonHeapMemoryUsage().getUsed(), NON_HEAP_ATTRS); + for (MemoryPoolMXBean pool : pools) { + storage.recordLong(pool.getUsage().getUsed(), poolAttributes(pool)); + } + }); + + registerLongObservable( + "jvm.memory.committed", + "Measure of memory committed.", + "By", + UP_DOWN_COUNTER, + storage -> { + storage.recordLong(memoryBean.getHeapMemoryUsage().getCommitted(), HEAP_ATTRS); + storage.recordLong(memoryBean.getNonHeapMemoryUsage().getCommitted(), NON_HEAP_ATTRS); + for (MemoryPoolMXBean pool : pools) { + storage.recordLong(pool.getUsage().getCommitted(), poolAttributes(pool)); + } + }); + + registerLongObservable( + "jvm.memory.limit", + "Measure of max obtainable memory.", + "By", + UP_DOWN_COUNTER, + storage -> { + long heapMax = memoryBean.getHeapMemoryUsage().getMax(); + if (heapMax > 0) { + storage.recordLong(heapMax, HEAP_ATTRS); + } + long nonHeapMax = memoryBean.getNonHeapMemoryUsage().getMax(); + if (nonHeapMax > 0) { + storage.recordLong(nonHeapMax, NON_HEAP_ATTRS); + } + for (MemoryPoolMXBean pool : pools) { + long max = pool.getUsage().getMax(); + if (max > 0) { + storage.recordLong(max, poolAttributes(pool)); + } + } + }); + + registerLongObservable( + "jvm.memory.init", + "Measure of initial memory requested.", + "By", + UP_DOWN_COUNTER, + storage -> { + long heapInit = memoryBean.getHeapMemoryUsage().getInit(); + if (heapInit > 0) { + storage.recordLong(heapInit, HEAP_ATTRS); + } + long nonHeapInit = memoryBean.getNonHeapMemoryUsage().getInit(); + if (nonHeapInit > 0) { + storage.recordLong(nonHeapInit, NON_HEAP_ATTRS); + } + }); + + registerLongObservable( + "jvm.memory.used_after_last_gc", + "Measure of memory used after the most recent garbage collection event.", + "By", + UP_DOWN_COUNTER, + storage -> { + for (MemoryPoolMXBean pool : pools) { + MemoryUsage collectionUsage = pool.getCollectionUsage(); + if (collectionUsage != null && collectionUsage.getUsed() >= 0) { + storage.recordLong(collectionUsage.getUsed(), poolAttributes(pool)); + } + } + }); + } + + /** jvm.buffer.* (UpDownCounter, Development) — direct + mapped pool metrics. */ + private static void registerBufferMetrics() { + List bufferPools = + ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class); + bufferPoolMetric( + "jvm.buffer.memory.used", + "Measure of memory used by buffers.", + "By", + bufferPools, + BufferPoolMXBean::getMemoryUsed); + bufferPoolMetric( + "jvm.buffer.memory.limit", + "Measure of total memory capacity of buffers.", + "By", + bufferPools, + BufferPoolMXBean::getTotalCapacity); + bufferPoolMetric( + "jvm.buffer.count", + "Number of buffers in the pool.", + "{buffer}", + bufferPools, + BufferPoolMXBean::getCount); + } + + /** jvm.thread.count (UpDownCounter, Stable). */ + private static void registerThreadMetrics() { + ThreadMXBean threadBean = ManagementFactory.getThreadMXBean(); + registerLongObservable( + "jvm.thread.count", + "Number of executing platform threads.", + "{thread}", + UP_DOWN_COUNTER, + storage -> storage.recordLong(threadBean.getThreadCount(), Attributes.empty())); + } + + /** + * jvm.class.loaded (Counter), jvm.class.unloaded (Counter), jvm.class.count (UpDownCounter) — all + * Stable per spec. + */ + private static void registerClassLoadingMetrics() { + ClassLoadingMXBean classLoadingBean = ManagementFactory.getClassLoadingMXBean(); + registerLongObservable( + "jvm.class.loaded", + "Number of classes loaded since JVM start.", + "{class}", + COUNTER, + storage -> + storage.recordLong(classLoadingBean.getTotalLoadedClassCount(), Attributes.empty())); + + registerLongObservable( + "jvm.class.count", + "Number of classes currently loaded.", + "{class}", + UP_DOWN_COUNTER, + storage -> storage.recordLong(classLoadingBean.getLoadedClassCount(), Attributes.empty())); + + registerLongObservable( + "jvm.class.unloaded", + "Number of classes unloaded since JVM start.", + "{class}", + COUNTER, + storage -> + storage.recordLong(classLoadingBean.getUnloadedClassCount(), Attributes.empty())); + } + + /** + * jvm.cpu.time (Counter), jvm.cpu.count (UpDownCounter), jvm.cpu.recent_utilization (Gauge) — all + * Stable per spec. + */ + private static void registerCpuMetrics() { + java.lang.management.OperatingSystemMXBean rawOsBean = + ManagementFactory.getOperatingSystemMXBean(); + OperatingSystemMXBean osBean = + rawOsBean instanceof OperatingSystemMXBean ? (OperatingSystemMXBean) rawOsBean : null; + + if (osBean != null) { + registerDoubleObservable( + "jvm.cpu.time", + "CPU time used by the process as reported by the JVM.", + "s", + COUNTER, + storage -> { + long nanos = osBean.getProcessCpuTime(); + if (nanos >= 0) { + storage.recordDouble(nanos / 1e9, Attributes.empty()); + } + }); + + registerDoubleObservable( + "jvm.cpu.recent_utilization", + "Recent CPU utilization for the process as reported by the JVM.", + "1", + GAUGE, + storage -> { + double cpuLoad = osBean.getProcessCpuLoad(); + if (cpuLoad >= 0) { + storage.recordDouble(cpuLoad, Attributes.empty()); + } + }); + } + + registerLongObservable( + "jvm.cpu.count", + "Number of processors available to the JVM.", + "{cpu}", + UP_DOWN_COUNTER, + storage -> + storage.recordLong(Runtime.getRuntime().availableProcessors(), Attributes.empty())); + } + + /** + * Registers an UpDownCounter that iterates each platform buffer pool and records {@code getter} + * with the {@code jvm.buffer.pool.name} attribute. Skips negative readings. + */ + private static void bufferPoolMetric( + String name, + String description, + String unit, + List bufferPools, + ToLongFunction getter) { + registerLongObservable( + name, + description, + unit, + UP_DOWN_COUNTER, + storage -> { + for (BufferPoolMXBean pool : bufferPools) { + long value = getter.applyAsLong(pool); + if (value >= 0) { + storage.recordLong(value, Attributes.of(BUFFER_POOL, pool.getName())); + } + } + }); + } + + /** Registers a long observable instrument and its callback against the bootstrap registry. */ + private static void registerLongObservable( + String name, + String description, + String unit, + OtelInstrumentType type, + Consumer callback) { + registerObservable(OtelInstrumentBuilder.ofLongs(name, type), description, unit, callback); + } + + /** Registers a double observable instrument and its callback against the bootstrap registry. */ + private static void registerDoubleObservable( + String name, + String description, + String unit, + OtelInstrumentType type, + Consumer callback) { + registerObservable(OtelInstrumentBuilder.ofDoubles(name, type), description, unit, callback); + } + + /** Registers an observable instrument and its callback against the bootstrap registry. */ + private static void registerObservable( + OtelInstrumentBuilder builder, + String description, + String unit, + Consumer callback) { + builder.setDescription(description); + builder.setUnit(unit); + OtelMetricStorage storage = registerStorage(builder.observableDescriptor()); + OtelMetricRegistry.INSTANCE.registerObservable( + JVM_SCOPE, new OtelRunnableObservable(() -> callback.accept(storage))); + } + + /** Registers metric storage for the instrument against the bootstrap registry. */ + private static OtelMetricStorage registerStorage(OtelInstrumentDescriptor descriptor) { + Function storageFactory; + switch (descriptor.getType()) { + case OBSERVABLE_GAUGE: + // observable gauges always use last-value + storageFactory = + descriptor.hasLongValues() + ? OtelMetricStorage::newLongValueStorage + : OtelMetricStorage::newDoubleValueStorage; + break; + case OBSERVABLE_COUNTER: + case OBSERVABLE_UP_DOWN_COUNTER: + // observable counters use delta value since last reset + storageFactory = + descriptor.hasLongValues() + ? OtelMetricStorage::newLongDeltaStorage + : OtelMetricStorage::newDoubleDeltaStorage; + break; + default: + throw new IllegalStateException("Unexpected value: " + descriptor.getType()); + } + return OtelMetricRegistry.INSTANCE.registerStorage(JVM_SCOPE, descriptor, storageFactory); + } + + /** Returns Attributes carrying jvm.memory.type and jvm.memory.pool.name for the given pool. */ + private static Attributes poolAttributes(MemoryPoolMXBean pool) { + return Attributes.of( + MEMORY_TYPE, pool.getType().name().toLowerCase(Locale.ROOT), + MEMORY_POOL, pool.getName()); + } + + private JvmOtlpRuntimeMetrics() {} +} diff --git a/dd-java-agent/agent-jmxfetch/src/main/resources/jmxfetch-config-no-jvm-defaults.yaml b/dd-java-agent/agent-jmxfetch/src/main/resources/jmxfetch-config-no-jvm-defaults.yaml new file mode 100644 index 00000000000..9cb727267e7 --- /dev/null +++ b/dd-java-agent/agent-jmxfetch/src/main/resources/jmxfetch-config-no-jvm-defaults.yaml @@ -0,0 +1,9 @@ +init_config: + is_jmx: true + new_gc_metrics: true + +instances: + - jvm_direct: true + name: dd-java-agent default + collect_default_jvm_metrics: false + conf: [] # Intentionally left empty for now diff --git a/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelRunnableObservable.java b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelRunnableObservable.java new file mode 100644 index 00000000000..975d59f8826 --- /dev/null +++ b/dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/metrics/data/OtelRunnableObservable.java @@ -0,0 +1,28 @@ +package datadog.trace.bootstrap.otel.metrics.data; + +import datadog.logging.RatelimitedLogger; +import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** {@link OtelObservable} backed by a {@link Runnable}, for call sites that prefer a lambda. */ +public final class OtelRunnableObservable extends OtelObservable { + private static final Logger LOGGER = LoggerFactory.getLogger(OtelRunnableObservable.class); + private static final RatelimitedLogger RATELIMITED_LOGGER = + new RatelimitedLogger(LOGGER, 5, TimeUnit.MINUTES); + + private final Runnable callback; + + public OtelRunnableObservable(Runnable callback) { + this.callback = callback; + } + + @Override + protected void observeMeasurements() { + try { + callback.run(); + } catch (Throwable e) { + RATELIMITED_LOGGER.warn("An exception occurred invoking observable callback.", e); + } + } +} diff --git a/dd-java-agent/instrumentation/graal/graal-native-image-20.0/src/main/java/datadog/trace/instrumentation/graal/nativeimage/ResourcesFeatureInstrumentation.java b/dd-java-agent/instrumentation/graal/graal-native-image-20.0/src/main/java/datadog/trace/instrumentation/graal/nativeimage/ResourcesFeatureInstrumentation.java index f45917f9e8c..bdc78bed041 100644 --- a/dd-java-agent/instrumentation/graal/graal-native-image-20.0/src/main/java/datadog/trace/instrumentation/graal/nativeimage/ResourcesFeatureInstrumentation.java +++ b/dd-java-agent/instrumentation/graal/graal-native-image-20.0/src/main/java/datadog/trace/instrumentation/graal/nativeimage/ResourcesFeatureInstrumentation.java @@ -54,6 +54,7 @@ public static void onExit() { // tracer's jmxfetch configs tracerResources.add("jmxfetch/jmxfetch-config.yaml"); + tracerResources.add("jmxfetch/jmxfetch-config-no-jvm-defaults.yaml"); tracerResources.add("jmxfetch/jmxfetch-websphere-config.yaml"); // jmxfetch integrations metricconfigs diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/build.gradle b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/build.gradle index 3b992b19ff1..ebc3a17f87c 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/build.gradle +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/build.gradle @@ -22,6 +22,8 @@ dependencies { muzzleBootstrap project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow') testImplementation project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow') + // JvmOtlpRuntimeMetrics lives in agent-jmxfetch; the test exercises it directly. + testImplementation project(':dd-java-agent:agent-jmxfetch') testImplementation group: 'io.opentelemetry', name: 'opentelemetry-api', version: openTelemetryVersion latestDepTestImplementation group: 'io.opentelemetry', name: 'opentelemetry-api', version: '1+' diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java new file mode 100644 index 00000000000..6d220161bee --- /dev/null +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.47/src/test/java/opentelemetry147/metrics/JvmOtlpRuntimeMetricsTest.java @@ -0,0 +1,213 @@ +package opentelemetry147.metrics; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import datadog.trace.agent.jmxfetch.JvmOtlpRuntimeMetrics; +import datadog.trace.bootstrap.otel.common.OtelInstrumentationScope; +import datadog.trace.bootstrap.otel.metrics.OtelInstrumentDescriptor; +import datadog.trace.bootstrap.otel.metrics.data.OtelMetricRegistry; +import datadog.trace.bootstrap.otlp.metrics.OtlpDataPoint; +import datadog.trace.bootstrap.otlp.metrics.OtlpDoublePoint; +import datadog.trace.bootstrap.otlp.metrics.OtlpLongPoint; +import datadog.trace.bootstrap.otlp.metrics.OtlpMetricVisitor; +import datadog.trace.bootstrap.otlp.metrics.OtlpMetricsVisitor; +import datadog.trace.bootstrap.otlp.metrics.OtlpScopedMetricsVisitor; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * Tests that JVM runtime metrics are registered and exported via OTLP using OTel semantic + * convention names (jvm.memory.used, jvm.thread.count, etc.). + * + *

Ref: https://opentelemetry.io/docs/specs/semconv/runtime/jvm-metrics/ + * + *

Ref: + * https://github.com/DataDog/semantic-core/blob/main/sor/domains/metrics/integrations/java/_equivalence/ + */ +public class JvmOtlpRuntimeMetricsTest { + + @BeforeAll + static void setUp() { + System.setProperty("dd.metrics.otel.enabled", "true"); + JvmOtlpRuntimeMetrics.start(); + } + + @Test + void registersExpectedJvmMetrics() { + MetricCollector collector = new MetricCollector(); + OtelMetricRegistry.INSTANCE.collectMetrics(collector); + + List expectedMetrics = + Arrays.asList( + "jvm.memory.used", + "jvm.memory.committed", + "jvm.memory.limit", + "jvm.memory.init", + "jvm.memory.used_after_last_gc", + "jvm.buffer.memory.used", + "jvm.buffer.memory.limit", + "jvm.buffer.count", + "jvm.thread.count", + "jvm.class.loaded", + "jvm.class.count", + "jvm.class.unloaded", + "jvm.cpu.time", + "jvm.cpu.count", + "jvm.cpu.recent_utilization"); + + Set names = collector.metricNames; + for (String metric : expectedMetrics) { + assertTrue( + names.contains(metric), + "Expected metric '" + metric + "' not found. Got: " + new TreeSet<>(names)); + } + + assertEquals(15, names.size(), "Expected 15 metrics, got: " + new TreeSet<>(names)); + + // No DD-proprietary names should be present + List ddNames = + names.stream() + .filter(n -> n.startsWith("jvm.heap_memory") || n.startsWith("jvm.thread_count")) + .collect(Collectors.toList()); + assertTrue(ddNames.isEmpty(), "DD-proprietary names leaked: " + ddNames); + } + + @Test + void jvmMemoryUsedHasHeapAndNonHeapTypeAttributes() { + MetricCollector collector = new MetricCollector(); + OtelMetricRegistry.INSTANCE.collectMetrics(collector); + + Set types = collector.attributeValues("jvm.memory.used", "jvm.memory.type"); + assertTrue(types.contains("heap"), "jvm.memory.used should have heap attribute"); + assertTrue(types.contains("non_heap"), "jvm.memory.used should have non_heap attribute"); + } + + @Test + void jvmMemoryUsedHeapValueIsPositive() { + MetricCollector collector = new MetricCollector(); + OtelMetricRegistry.INSTANCE.collectMetrics(collector); + + List points = collector.points.get("jvm.memory.used"); + assertNotNull(points, "jvm.memory.used should have data points"); + DataPointEntry heapAggregate = + points.stream() + .filter( + p -> + "heap".equals(p.attrs.get("jvm.memory.type")) + && p.attrs.get("jvm.memory.pool.name") == null) + .findFirst() + .orElse(null); + assertNotNull(heapAggregate, "jvm.memory.used should have a heap aggregate data point"); + assertTrue( + heapAggregate.value.longValue() > 0, + "jvm.memory.used heap aggregate should be positive, got " + heapAggregate.value); + } + + @Test + void jvmThreadCountIsPositive() { + MetricCollector collector = new MetricCollector(); + OtelMetricRegistry.INSTANCE.collectMetrics(collector); + + List threadPoints = collector.points.get("jvm.thread.count"); + assertNotNull(threadPoints, "jvm.thread.count should have data points"); + assertFalse(threadPoints.isEmpty(), "jvm.thread.count should have data points"); + assertTrue( + threadPoints.get(0).value.longValue() > 0, + "jvm.thread.count value should be positive, got " + threadPoints.get(0).value); + } + + @Test + void startIsIdempotent() { + MetricCollector before = new MetricCollector(); + OtelMetricRegistry.INSTANCE.collectMetrics(before); + int countBefore = before.metricNames.size(); + + JvmOtlpRuntimeMetrics.start(); + JvmOtlpRuntimeMetrics.start(); + + MetricCollector after = new MetricCollector(); + OtelMetricRegistry.INSTANCE.collectMetrics(after); + assertEquals( + countBefore, + after.metricNames.size(), + "Repeated start() must not register duplicate instruments"); + } + + static final class DataPointEntry { + final Map attrs; + final Number value; + + DataPointEntry(Map attrs, Number value) { + this.attrs = attrs; + this.value = value; + } + } + + static final class MetricCollector + implements OtlpMetricsVisitor, OtlpScopedMetricsVisitor, OtlpMetricVisitor { + + String currentInstrument = ""; + final Map currentAttrs = new LinkedHashMap<>(); + final Set metricNames = new LinkedHashSet<>(); + final Map> points = new LinkedHashMap<>(); + + @Override + public OtlpScopedMetricsVisitor visitScopedMetrics(OtelInstrumentationScope scope) { + return this; + } + + @Override + public OtlpMetricVisitor visitMetric(OtelInstrumentDescriptor descriptor) { + currentInstrument = descriptor.getName().toString(); + metricNames.add(currentInstrument); + points.computeIfAbsent(currentInstrument, k -> new ArrayList<>()); + return this; + } + + @Override + public void visitAttribute(int type, String key, Object value) { + currentAttrs.put(key, value == null ? null : value.toString()); + } + + @Override + public void visitDataPoint(OtlpDataPoint point) { + Map attrs = new HashMap<>(currentAttrs); + currentAttrs.clear(); + Number value = 0; + if (point instanceof OtlpLongPoint) { + value = ((OtlpLongPoint) point).value; + } else if (point instanceof OtlpDoublePoint) { + value = ((OtlpDoublePoint) point).value; + } + points + .computeIfAbsent(currentInstrument, k -> new ArrayList<>()) + .add(new DataPointEntry(attrs, value)); + } + + Set attributeValues(String metricName, String attrKey) { + List entries = points.get(metricName); + if (entries == null) { + return new LinkedHashSet<>(); + } + return entries.stream() + .map(e -> e.attrs.get(attrKey)) + .filter(Objects::nonNull) + .map(Object::toString) + .collect(Collectors.toCollection(LinkedHashSet::new)); + } + } +} From 0bbc2b0185cd2894e84162d660e2757ef5fa2095 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 19 May 2026 20:26:00 +0200 Subject: [PATCH 041/478] Migrate debugger-integration-tests cross-project test source sharing to java-test-fixtures for Gradle 9.5 compatibility (#11416) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(smoke-tests): share debugger test helpers via java-test-fixtures Gradle 9.5 added a `DependencyHandler.project(String)` overload that returns a `ProjectDependency`. Inside a `dependencies { }` block, that overload now shadows the `Project.project(String)` accessor that previously resolved via Groovy fallback. Result: `project(':foo').sourceSets` no longer reaches the producing project's source sets — it hits a `DefaultProjectDependency` and fails with "unknown property 'sourceSets'". `dd-smoke-tests/debugger-integration-tests/build.gradle:21` used `project(':dd-java-agent:agent-debugger').sourceSets.test.output` to pull two helper classes (`LogProbeTestHelper`, `MoshiSnapshotTestHelper`) from `agent-debugger`'s test sources. Apply the canonical Gradle 9.5 fix (see #11367): expose the helpers via the `java-test-fixtures` plugin on `agent-debugger`. The helpers move from `src/test/java/com/datadog/debugger/util/` to `src/testFixtures/java/com/datadog/debugger/util/` (same package), and the consumer pulls them in via `testImplementation testFixtures(project(':dd-java-agent:agent-debugger'))`. The 15 existing in-project consumers (test classes inside agent-debugger) keep working because the testFixtures source set is automatically on the `test` source set's classpath. This unblocks running the root build on Gradle 9.5.1. Co-Authored-By: Claude Opus 4.7 (1M context) chore(mongo): remove dead `sourceSets.test.output` comment in mongo-common The commented-out line was left behind in #11367 as a marker for the broken Gradle 9.5 pattern. The 9 mongo consumers have since migrated to `testFixtures(project(':...:mongo-common'))`, and the cross-project `sourceSets.test.output` reference is no longer used. Drop the comment. Co-Authored-By: Claude Opus 4.7 (1M context) Co-authored-by: devflow.devflow-routing-intake --- dd-java-agent/agent-debugger/build.gradle | 9 +++++++++ .../com/datadog/debugger/util/LogProbeTestHelper.java | 0 .../datadog/debugger/util/MoshiSnapshotTestHelper.java | 0 .../instrumentation/mongo/mongo-common/build.gradle | 1 - dd-smoke-tests/debugger-integration-tests/build.gradle | 4 ++-- 5 files changed, 11 insertions(+), 3 deletions(-) rename dd-java-agent/agent-debugger/src/{test => testFixtures}/java/com/datadog/debugger/util/LogProbeTestHelper.java (100%) rename dd-java-agent/agent-debugger/src/{test => testFixtures}/java/com/datadog/debugger/util/MoshiSnapshotTestHelper.java (100%) diff --git a/dd-java-agent/agent-debugger/build.gradle b/dd-java-agent/agent-debugger/build.gradle index 9eac038bfd8..b6836682a5d 100644 --- a/dd-java-agent/agent-debugger/build.gradle +++ b/dd-java-agent/agent-debugger/build.gradle @@ -3,6 +3,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id 'com.gradleup.shadow' id 'dd-trace-java.version-file' + id 'java-test-fixtures' } apply from: "$rootDir/gradle/java.gradle" @@ -47,6 +48,14 @@ dependencies { implementation libs.okhttp implementation libs.slf4j + // Dependencies needed to compile the test-fixture helpers (LogProbeTestHelper, + // MoshiSnapshotTestHelper); they reference siblings + Moshi + internal-api. + testFixturesImplementation project(':dd-java-agent:agent-debugger:debugger-bootstrap') + testFixturesImplementation project(':dd-java-agent:agent-debugger:debugger-el') + testFixturesImplementation project(':internal-api') + testFixturesImplementation libs.moshi + testFixturesImplementation libs.junit.jupiter + testImplementation libs.asm.util testImplementation libs.bundles.junit5 testImplementation libs.junit.jupiter.params diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/util/LogProbeTestHelper.java b/dd-java-agent/agent-debugger/src/testFixtures/java/com/datadog/debugger/util/LogProbeTestHelper.java similarity index 100% rename from dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/util/LogProbeTestHelper.java rename to dd-java-agent/agent-debugger/src/testFixtures/java/com/datadog/debugger/util/LogProbeTestHelper.java diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/util/MoshiSnapshotTestHelper.java b/dd-java-agent/agent-debugger/src/testFixtures/java/com/datadog/debugger/util/MoshiSnapshotTestHelper.java similarity index 100% rename from dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/util/MoshiSnapshotTestHelper.java rename to dd-java-agent/agent-debugger/src/testFixtures/java/com/datadog/debugger/util/MoshiSnapshotTestHelper.java diff --git a/dd-java-agent/instrumentation/mongo/mongo-common/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-common/build.gradle index 44e168aaf3d..9cdef640e2b 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-common/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-common/build.gradle @@ -15,6 +15,5 @@ dependencies { testFixturesImplementation(project(':dd-java-agent:instrumentation-testing')) testFixturesImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() - //testImplementation project(':dd-java-agent:instrumentation:mongo').sourceSets.test.output testImplementation group: 'org.mongodb', name: 'mongo-java-driver', version: '3.1.0' } diff --git a/dd-smoke-tests/debugger-integration-tests/build.gradle b/dd-smoke-tests/debugger-integration-tests/build.gradle index e07b7d6e7b6..da0000bcfee 100644 --- a/dd-smoke-tests/debugger-integration-tests/build.gradle +++ b/dd-smoke-tests/debugger-integration-tests/build.gradle @@ -17,8 +17,8 @@ dependencies { testImplementation project(':dd-java-agent:agent-debugger') testImplementation project(':dd-java-agent:agent-debugger:debugger-el') testImplementation project(':dd-java-agent:agent-debugger:debugger-bootstrap') - // dependency on some helper classes made only for tests - testImplementation project(':dd-java-agent:agent-debugger').sourceSets.test.output + // helper classes shared via java-test-fixtures (LogProbeTestHelper, MoshiSnapshotTestHelper) + testImplementation testFixtures(project(':dd-java-agent:agent-debugger')) testImplementation libs.bundles.junit5 testImplementation libs.bundles.mockito } From a184215f9e773427a71ff0a299a27aee555aedd5 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Tue, 19 May 2026 21:42:11 +0200 Subject: [PATCH 042/478] Mute telemetry when Connection.getClientInfo fails (#11412) Mute telemetry when Connection.getClientInfo fails Merge branch 'master' into andrea.marziali/jdbc Co-authored-by: andrea.marziali --- .../java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java index b2f62b5eb7f..30ce782580d 100644 --- a/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java +++ b/dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java @@ -234,7 +234,7 @@ public static DBInfo parseDBInfoFromConnection(final Connection connection) { clientInfo = connection.getClientInfo(); } catch (final Throwable ex) { // getClientInfo is likely not allowed, we can still extract info from the url alone - log.debug("Could not get client info from DB", ex); + log.debug(LogCollector.EXCLUDE_TELEMETRY, "Could not get client info from DB", ex); } dbInfo = JDBCConnectionUrlParser.extractDBInfo(url, clientInfo); } else { From 1abf511daca5e99fdb9387c1fb7787af1dec5cd3 Mon Sep 17 00:00:00 2001 From: Zarir Hamza Date: Tue, 19 May 2026 16:33:01 -0400 Subject: [PATCH 043/478] fix(vertx-web): finish vertx.route-handler via RoutingContext.addEndHandler fallback (#11312) fix(vertx-web): finish vertx.route-handler via RoutingContext.addEndHandler fallback Vert.x's `Http1xServerResponse.end(Buffer, PromiseInternal)` invokes the registered `endHandler` only when `closed == false` at the moment the response body has been written. In synthetic transports such as quarkus-amazon-lambda-rest's `VirtualClientConnection` (in-memory Netty channel) the writes and the connection close happen synchronously inside `responseComplete()`, so by the time the `!closed` guard runs `closed` is already `true` and `endHandler` is silently skipped. Symptom: `RouteHandlerWrapper` starts a `vertx.route-handler` span for every route in the chain (e.g. Quarkus's AuthenticationHandler) but `EndHandlerWrapper.handle` is never called, so the span is never finished. The span dies in PendingTrace and is not enqueued on the writer. All children parented to that span (`jakarta-rs.request`, `netty.client.request`, downstream `aws.http`/`aws.apigateway` inferred spans) end up orphaned in the trace UI. Fix: also register a finish via `RoutingContext.addEndHandler`, which fires on routing-context completion regardless of underlying connection state and on both success and failure. Both paths funnel through a shared idempotent `finishHandlerSpan` so the second one to fire on real-network transports is a no-op. Verified end-to-end against a Quarkus 3.15.4 / Java 21 Lambda chain (caller -> netty.client.request -> callee) on Datadog Lambda Extension v96. Pre-fix: 5/5 invocations Started, 0/5 Finished. Post-fix: 5/5 Started, 5/5 Finished, single connected trace tree in the UI. Refs: SLES-2837 Apply changes to vertex-web 3.4 Add unit test for 3.x Merge branch 'master' into zarir/sles-2837-vertx-web-finish-route-handler Clean up unit test Add junit jupiter to gradle setup wrap exception handling Adding tests, cleaning up exception handling cleaning comments Merge branch 'master' into zarir/sles-2837-vertx-web-finish-route-handler spotless Merge branch 'master' into zarir/sles-2837-vertx-web-finish-route-handler Co-authored-by: rithikanarayan Co-authored-by: devflow.devflow-routing-intake --- .../vertx-web/vertx-web-3.4/build.gradle | 4 +- .../vertx_3_4/server/EndHandlerWrapper.java | 10 +- .../vertx_3_4/server/RouteHandlerWrapper.java | 23 ++++ .../impl/ResponseExceptionFiringHelper.java | 17 +++ .../RouteHandlerExceptionHandlerTest.java | 126 +++++++++++++++++ .../java/server/RouteHandlerSendFileTest.java | 122 ++++++++++++++++ .../vertx-web/vertx-web-4.0/build.gradle | 2 + .../vertx_4_0/server/EndHandlerWrapper.java | 10 +- .../vertx_4_0/server/RouteHandlerWrapper.java | 23 ++++ .../impl/ResponseExceptionFiringHelper.java | 17 +++ .../RouteHandlerExceptionHandlerTest.java | 130 ++++++++++++++++++ 11 files changed, 464 insertions(+), 20 deletions(-) create mode 100644 dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java create mode 100644 dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java create mode 100644 dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerSendFileTest.java create mode 100644 dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java create mode 100644 dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle index 56311523214..2344e2a0a81 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle @@ -42,10 +42,10 @@ dependencies { testImplementation group: 'io.vertx', name: 'vertx-web', version: '3.4.0' testImplementation group: 'io.vertx', name: 'vertx-web-client', version: '3.4.0' - testImplementation group: 'org.mockito', name: 'mockito-inline', version: '4.11.0' - testImplementation project(':dd-java-agent:appsec:appsec-test-fixtures') + testImplementation libs.junit.jupiter + latestDepTestImplementation group: 'io.vertx', name: 'vertx-web', version: '3.+' latestDepTestImplementation group: 'io.vertx', name: 'vertx-web-client', version: '3.+' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/EndHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/EndHandlerWrapper.java index a8cb1ebb079..f4b30bc4d44 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/EndHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/EndHandlerWrapper.java @@ -1,9 +1,5 @@ package datadog.trace.instrumentation.vertx_3_4.server; -import static datadog.trace.instrumentation.vertx_3_4.server.RouteHandlerWrapper.HANDLER_SPAN_CONTEXT_KEY; -import static datadog.trace.instrumentation.vertx_3_4.server.VertxDecorator.DECORATE; - -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; @@ -18,16 +14,12 @@ public class EndHandlerWrapper implements Handler { @Override public void handle(final Void event) { - AgentSpan span = routingContext.get(HANDLER_SPAN_CONTEXT_KEY); try { if (actual != null) { actual.handle(event); } } finally { - if (span != null) { - DECORATE.onResponse(span, routingContext.response()); - span.finish(); - } + RouteHandlerWrapper.finishHandlerSpan(routingContext); } } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java index 37120c2f0cd..b001826420e 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/RouteHandlerWrapper.java @@ -47,7 +47,16 @@ public void handle(final RoutingContext routingContext) { span = startSpan("vertx", INSTRUMENTATION_NAME); routingContext.put(HANDLER_SPAN_CONTEXT_KEY, span); + // Register three hooks that fire on response outcome: + // finishHandlerSpan is idempotent; whichever hook fires first wins. + // + // Known remaining gap: sendFile() failures on file-not-found or + // IOException-during-open log via HttpServerResponseImpl and return + // without firing any of the three hooks above (when the caller did + // not pass a resultHandler), so the span still leaks on that path. routingContext.response().endHandler(new EndHandlerWrapper(routingContext)); + routingContext.addBodyEndHandler(v -> finishHandlerSpan(routingContext)); + routingContext.response().exceptionHandler(t -> finishHandlerSpan(routingContext)); DECORATE.afterStart(span); span.setResourceName(DECORATE.className(actual.getClass())); } @@ -63,6 +72,20 @@ public void handle(final RoutingContext routingContext) { } } + // Idempotently finish the route-handler span. Any of the three registered + // hooks (EndHandlerWrapper, the addBodyEndHandler fallback, or the + // response.exceptionHandler lambda) may call this; the first one to win + // clears HANDLER_SPAN_CONTEXT_KEY so the others are no-ops. + static void finishHandlerSpan(final RoutingContext routingContext) { + final AgentSpan span = routingContext.get(HANDLER_SPAN_CONTEXT_KEY); + if (span == null) { + return; + } + routingContext.put(HANDLER_SPAN_CONTEXT_KEY, null); + DECORATE.onResponse(span, routingContext.response()); + span.finish(); + } + private void setRoute(RoutingContext routingContext) { final AgentSpan parentSpan = routingContext.get(PARENT_SPAN_CONTEXT_KEY); if (parentSpan == null) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java new file mode 100644 index 00000000000..5c581365de5 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java @@ -0,0 +1,17 @@ +package io.vertx.core.http.impl; + +import io.vertx.core.http.HttpServerResponse; + +/** + * Test-side bridge that fires the package-private HttpServerResponseImpl.handleException on a + * Vert.x 3.x server response. Used by server.RouteHandlerExceptionHandlerTest to deterministically + * reproduce the non-CLOSED_EXCEPTION I/O-failure path that Vert.x exposes via + * response.exceptionHandler(...). + */ +public final class ResponseExceptionFiringHelper { + private ResponseExceptionFiringHelper() {} + + public static void fireException(HttpServerResponse response, Throwable cause) { + ((HttpServerResponseImpl) response).handleException(cause); + } +} diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java new file mode 100644 index 00000000000..3892646adcf --- /dev/null +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerExceptionHandlerTest.java @@ -0,0 +1,126 @@ +package server; + +import static datadog.trace.agent.test.assertions.SpanMatcher.span; +import static datadog.trace.agent.test.assertions.TraceMatcher.SORT_BY_START_TIME; +import static datadog.trace.agent.test.assertions.TraceMatcher.trace; + +import datadog.trace.agent.test.AbstractInstrumentationTest; +import datadog.trace.api.DDSpanTypes; +import io.vertx.core.Vertx; +import io.vertx.core.http.HttpServer; +import io.vertx.core.http.impl.ResponseExceptionFiringHelper; +import io.vertx.ext.web.Router; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.ServerSocket; +import java.net.URL; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * Regression test for the vertx-web 3.x route-handler span lifecycle on the + * response.exceptionHandler path. + * + *

HttpServerResponseImpl.handleException is invoked by Vert.x on non-CLOSED_EXCEPTION I/O + * failures of the response. Neither endHandler nor bodyEndHandler fires on this path, so the + * route-handler span would leak without an exception handler registered. The route handler here + * fires handleException directly via ResponseExceptionFiringHelper (the package-private method + * Vert.x itself uses internally), then calls response.end() normally so the HTTP client gets a + * response. + */ +class RouteHandlerExceptionHandlerTest extends AbstractInstrumentationTest { + + private static Vertx vertx; + private static HttpServer server; + private static int port; + + @BeforeAll + static void startServer() throws Exception { + try (ServerSocket socket = new ServerSocket(0)) { + port = socket.getLocalPort(); + } + + vertx = Vertx.vertx(); + Router router = Router.router(vertx); + router + .route("/fail") + .handler( + ctx -> { + ResponseExceptionFiringHelper.fireException( + ctx.response(), new IOException("simulated response I/O failure")); + try { + ctx.response().setStatusCode(500).end("error"); + } catch (IllegalStateException ignore) { + // handleException may have left the response in a state where end() is rejected; + // the span is already finished by our registered exception handler. + } + }); + + CountDownLatch ready = new CountDownLatch(1); + server = + vertx + .createHttpServer() + .requestHandler(router::accept) + .listen( + port, + result -> { + if (result.failed()) { + throw new RuntimeException("Failed to start Vert.x server", result.cause()); + } + ready.countDown(); + }); + if (!ready.await(10, TimeUnit.SECONDS)) { + throw new IllegalStateException("Vert.x server did not start in time"); + } + } + + @AfterAll + static void stopServer() throws Exception { + if (server != null) { + CountDownLatch closed = new CountDownLatch(1); + server.close(ar -> closed.countDown()); + closed.await(10, TimeUnit.SECONDS); + } + if (vertx != null) { + CountDownLatch closed = new CountDownLatch(1); + vertx.close(ar -> closed.countDown()); + closed.await(10, TimeUnit.SECONDS); + } + } + + @Test + void exceptionHandlerFinishesRouteHandlerSpan() throws Exception { + HttpURLConnection conn = + (HttpURLConnection) new URL("http://localhost:" + port + "/fail").openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + try { + // We don't care about the response code or body — only that the trace flushes. + conn.getResponseCode(); + } catch (IOException ignore) { + // If end() was rejected after handleException, the client may see a closed connection. + } finally { + conn.disconnect(); + } + + // The netty.request span is marked as errored because the route handler ends with + // HTTP 500; the route-handler span is finished by our exception handler before + // setStatusCode(500), so it sees status=200 (default) and is not errored. + assertTraces( + trace( + SORT_BY_START_TIME, + span() + .operationName(Pattern.compile(Pattern.quote("netty.request"))) + .type(DDSpanTypes.HTTP_SERVER) + .error(), + span() + .childOfPrevious() + .operationName(Pattern.compile(Pattern.quote("vertx.route-handler"))) + .type(DDSpanTypes.HTTP_SERVER))); + } +} diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerSendFileTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerSendFileTest.java new file mode 100644 index 00000000000..06102063a1b --- /dev/null +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/java/server/RouteHandlerSendFileTest.java @@ -0,0 +1,122 @@ +package server; + +import static datadog.trace.agent.test.assertions.SpanMatcher.span; +import static datadog.trace.agent.test.assertions.TraceMatcher.SORT_BY_START_TIME; +import static datadog.trace.agent.test.assertions.TraceMatcher.trace; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import datadog.trace.agent.test.AbstractInstrumentationTest; +import datadog.trace.api.DDSpanTypes; +import io.vertx.core.Vertx; +import io.vertx.core.http.HttpServer; +import io.vertx.ext.web.Router; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.ServerSocket; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * Regression test for the vertx-web 3.x route-handler span lifecycle on the response.sendFile(...) + * path. + * + *

HttpServerResponseImpl.doSendFile (vertx-core 3.x) only invokes bodyEndHandler after the file + * is written; it never invokes endHandler. With only the endHandler registration (pre-fix), the + * vertx.route-handler span never finishes on this path, the trace fails to flush, and assertTraces + * times out. With the fallback addBodyEndHandler registration, the span finishes on every + * response-end path. + */ +class RouteHandlerSendFileTest extends AbstractInstrumentationTest { + + private static Vertx vertx; + private static HttpServer server; + private static int port; + private static Path payload; + + @BeforeAll + static void startServer() throws Exception { + payload = Files.createTempFile("vertx-sendfile-", ".txt"); + Files.write(payload, "vertx sendFile payload\n".getBytes(StandardCharsets.UTF_8)); + payload.toFile().deleteOnExit(); + + try (ServerSocket socket = new ServerSocket(0)) { + port = socket.getLocalPort(); + } + + vertx = Vertx.vertx(); + Router router = Router.router(vertx); + router + .route("/sendfile") + .handler(ctx -> ctx.response().sendFile(payload.toAbsolutePath().toString())); + + CountDownLatch ready = new CountDownLatch(1); + server = + vertx + .createHttpServer() + .requestHandler(router::accept) + .listen( + port, + result -> { + if (result.failed()) { + throw new RuntimeException("Failed to start Vert.x server", result.cause()); + } + ready.countDown(); + }); + if (!ready.await(10, TimeUnit.SECONDS)) { + throw new IllegalStateException("Vert.x server did not start in time"); + } + } + + @AfterAll + static void stopServer() throws Exception { + if (server != null) { + CountDownLatch closed = new CountDownLatch(1); + server.close(ar -> closed.countDown()); + closed.await(10, TimeUnit.SECONDS); + } + if (vertx != null) { + CountDownLatch closed = new CountDownLatch(1); + vertx.close(ar -> closed.countDown()); + closed.await(10, TimeUnit.SECONDS); + } + if (payload != null) { + Files.deleteIfExists(payload); + } + } + + @Test + void sendFileFinishesRouteHandlerSpan() throws Exception { + HttpURLConnection conn = + (HttpURLConnection) new URL("http://localhost:" + port + "/sendfile").openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + assertEquals(200, conn.getResponseCode()); + try (BufferedReader reader = + new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { + assertEquals("vertx sendFile payload", reader.readLine()); + } + + // Pre-fix: the route-handler span never finishes on the sendFile path, so the trace + // is never published and assertTraces times out waiting for the trace to flush. + assertTraces( + trace( + SORT_BY_START_TIME, + span() + .operationName(Pattern.compile(Pattern.quote("netty.request"))) + .type(DDSpanTypes.HTTP_SERVER), + span() + .childOfPrevious() + .operationName(Pattern.compile(Pattern.quote("vertx.route-handler"))) + .type(DDSpanTypes.HTTP_SERVER))); + } +} diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle index 096110203b4..ee305e1e172 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle @@ -45,6 +45,8 @@ dependencies { testImplementation project(':dd-java-agent:appsec:appsec-test-fixtures') + testImplementation libs.junit.jupiter + testRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core:jackson-core-common') testRuntimeOnly project(':dd-java-agent:instrumentation:netty:netty-buffer-4.0') diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/EndHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/EndHandlerWrapper.java index a71584b11a7..fd4a042edf8 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/EndHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/EndHandlerWrapper.java @@ -1,9 +1,5 @@ package datadog.trace.instrumentation.vertx_4_0.server; -import static datadog.trace.instrumentation.vertx_4_0.server.RouteHandlerWrapper.HANDLER_SPAN_CONTEXT_KEY; -import static datadog.trace.instrumentation.vertx_4_0.server.VertxDecorator.DECORATE; - -import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; @@ -18,16 +14,12 @@ public class EndHandlerWrapper implements Handler { @Override public void handle(final Void event) { - AgentSpan span = routingContext.get(HANDLER_SPAN_CONTEXT_KEY); try { if (actual != null) { actual.handle(event); } } finally { - if (span != null) { - DECORATE.onResponse(span, routingContext.response()); - span.finish(); - } + RouteHandlerWrapper.finishHandlerSpan(routingContext); } } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java index 8706f816e1c..19b344b75f6 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/RouteHandlerWrapper.java @@ -44,6 +44,16 @@ public void handle(final RoutingContext routingContext) { routingContext.put(HANDLER_SPAN_CONTEXT_KEY, span); routingContext.response().endHandler(new EndHandlerWrapper(routingContext)); + // Fallback finish path: HttpServerResponse.endHandler is silently skipped + // by Vert.x's Http1xServerResponse.end() when the underlying connection + // has already closed (Http1xServerResponse#end gates `endHandler.handle()` + // behind `!closed`). This happens in synthetic transports such as + // quarkus-amazon-lambda-rest's virtual Netty channel, where writes and + // close are synchronous in-memory, leaving the route-handler span unfinished + // and orphaning all jakarta-rs.request / aws.http child spans in the trace. + // RoutingContext#addEndHandler fires on routing-context completion regardless + // of underlying connection state and on both success and failure. + routingContext.addEndHandler(ar -> finishHandlerSpan(routingContext)); DECORATE.afterStart(span); span.setResourceName(DECORATE.className(actual.getClass())); } @@ -60,6 +70,19 @@ public void handle(final RoutingContext routingContext) { } } + // Idempotently finish the route-handler span. Both EndHandlerWrapper (the + // response.endHandler path) and the routingContext.addEndHandler fallback may call + // this; the first one to win clears HANDLER_SPAN_CONTEXT_KEY so the second is a no-op. + static void finishHandlerSpan(final RoutingContext routingContext) { + final AgentSpan span = routingContext.get(HANDLER_SPAN_CONTEXT_KEY); + if (span == null) { + return; + } + routingContext.put(HANDLER_SPAN_CONTEXT_KEY, null); + DECORATE.onResponse(span, routingContext.response()); + span.finish(); + } + private void setRoute(RoutingContext routingContext) { final AgentSpan parentSpan = routingContext.get(PARENT_SPAN_CONTEXT_KEY); if (parentSpan == null) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java new file mode 100644 index 00000000000..4754c38843e --- /dev/null +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/io/vertx/core/http/impl/ResponseExceptionFiringHelper.java @@ -0,0 +1,17 @@ +package io.vertx.core.http.impl; + +import io.vertx.core.http.HttpServerResponse; + +/** + * Test-side bridge that fires the package-private Http1xServerResponse.handleException on a Vert.x + * 4.x server response. Used by server.RouteHandlerExceptionHandlerTest to deterministically + * reproduce the non-CLOSED_EXCEPTION I/O-failure path that Vert.x exposes via + * response.exceptionHandler(...). + */ +public final class ResponseExceptionFiringHelper { + private ResponseExceptionFiringHelper() {} + + public static void fireException(HttpServerResponse response, Throwable cause) { + ((Http1xServerResponse) response).handleException(cause); + } +} diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java new file mode 100644 index 00000000000..fb91f77a4b7 --- /dev/null +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/test/java/server/RouteHandlerExceptionHandlerTest.java @@ -0,0 +1,130 @@ +package server; + +import static datadog.trace.agent.test.assertions.SpanMatcher.span; +import static datadog.trace.agent.test.assertions.TraceMatcher.SORT_BY_START_TIME; +import static datadog.trace.agent.test.assertions.TraceMatcher.trace; + +import datadog.trace.agent.test.AbstractInstrumentationTest; +import datadog.trace.api.DDSpanTypes; +import io.vertx.core.Vertx; +import io.vertx.core.http.HttpServer; +import io.vertx.core.http.impl.ResponseExceptionFiringHelper; +import io.vertx.ext.web.Router; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.ServerSocket; +import java.net.URL; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * Regression test for the vertx-web 4.x route-handler span lifecycle on the + * response.exceptionHandler path. + * + *

Http1xServerResponse.handleException is invoked by Vert.x on non-CLOSED_EXCEPTION I/O failures + * of the response. Without RoutingContext.addEndHandler(...) registered, only the wrapped + * response.endHandler could finish the route-handler span — and that hook does not fire on the + * exception path. With the addEndHandler fallback in RouteHandlerWrapper, the routing context's + * internal exception handler fires our completion callback regardless of which response hook + * surfaces the error. The route handler here fires handleException directly via + * ResponseExceptionFiringHelper, then calls response.end() normally so the HTTP client gets a + * response. + */ +class RouteHandlerExceptionHandlerTest extends AbstractInstrumentationTest { + + private static Vertx vertx; + private static HttpServer server; + private static int port; + + @BeforeAll + static void startServer() throws Exception { + try (ServerSocket socket = new ServerSocket(0)) { + port = socket.getLocalPort(); + } + + vertx = Vertx.vertx(); + Router router = Router.router(vertx); + router + .route("/fail") + .handler( + ctx -> { + ResponseExceptionFiringHelper.fireException( + ctx.response(), new IOException("simulated response I/O failure")); + try { + ctx.response().setStatusCode(500).end("error"); + } catch (IllegalStateException ignore) { + // handleException may have left the response in a state where end() is rejected; + // the span is already finished by our addEndHandler callback. + } + }); + + CountDownLatch ready = new CountDownLatch(1); + server = + vertx + .createHttpServer() + .requestHandler(router) + .listen( + port, + result -> { + if (result.failed()) { + throw new RuntimeException("Failed to start Vert.x server", result.cause()); + } + ready.countDown(); + }); + if (!ready.await(10, TimeUnit.SECONDS)) { + throw new IllegalStateException("Vert.x server did not start in time"); + } + } + + @AfterAll + static void stopServer() throws Exception { + if (server != null) { + CountDownLatch closed = new CountDownLatch(1); + server.close(ar -> closed.countDown()); + closed.await(10, TimeUnit.SECONDS); + } + if (vertx != null) { + CountDownLatch closed = new CountDownLatch(1); + vertx.close(ar -> closed.countDown()); + closed.await(10, TimeUnit.SECONDS); + } + } + + @Test + void exceptionHandlerFinishesRouteHandlerSpan() throws Exception { + HttpURLConnection conn = + (HttpURLConnection) new URL("http://localhost:" + port + "/fail").openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + try { + // We don't care about the response code or body — only that the trace flushes. + conn.getResponseCode(); + } catch (IOException ignore) { + // If end() was rejected after handleException, the client may see a closed connection. + } finally { + conn.disconnect(); + } + + // If addEndHandler did not finish the route-handler span, assertTraces would time out + // waiting for the trace to flush. + // The netty.request span is marked as errored because the route handler ends with + // HTTP 500; the route-handler span is finished by our addEndHandler callback before + // setStatusCode(500), so it sees status=200 (default) and is not errored. + assertTraces( + trace( + SORT_BY_START_TIME, + span() + .operationName(Pattern.compile(Pattern.quote("netty.request"))) + .type(DDSpanTypes.HTTP_SERVER) + .error(), + span() + .childOfPrevious() + .operationName(Pattern.compile(Pattern.quote("vertx.route-handler"))) + .type(DDSpanTypes.HTTP_SERVER))); + } +} From 9574a3c0bca12d1663f568e0b37984aa2ac00f09 Mon Sep 17 00:00:00 2001 From: Douglas Q Hawkins Date: Tue, 19 May 2026 16:42:55 -0400 Subject: [PATCH 044/478] Fix bugs in GenerationalUtf8Cache constructor and access-time handling (#11323) Fix bugs in GenerationalUtf8Cache constructor and access-time handling - getUtf8(value, accessTimeMs) was capturing this.accessTimeMs and using that for entry timestamps, silently ignoring the parameter contrary to its Javadoc. - The two-arg constructor sized the eden array using tenuredCapacity instead of edenCapacity. - Rename refreshAcessTime to refreshAccessTime (no other callers). - Correct misleading "evicting the LRU" comments in the LFU paths of both SimpleUtf8Cache and GenerationalUtf8Cache. Adds regression tests for both bugs. Co-Authored-By: Claude Opus 4.7 (1M context) Address review feedback - Restore refreshAcessTime as a deprecated forwarding alias to preserve binary compatibility for any existing callers compiled against the prior artifact. - Drop reflection in GenerationalUtf8CacheTest by making the eden and tenured entry arrays package-visible. Co-Authored-By: Claude Opus 4.7 (1M context) Revert deprecated refreshAcessTime alias Keep only the corrected refreshAccessTime method. Co-Authored-By: Claude Opus 4.7 (1M context) Merge branch 'master' into dougqh/utf8-cache-fixes Merge branch 'master' into dougqh/utf8-cache-fixes Merge branch 'master' into dougqh/utf8-cache-fixes Merge branch 'master' into dougqh/utf8-cache-fixes Merge branch 'master' into dougqh/utf8-cache-fixes Merge branch 'master' into dougqh/utf8-cache-fixes Co-authored-by: bric3 Co-authored-by: devflow.devflow-routing-intake --- .../serialization/GenerationalUtf8Cache.java | 19 ++++---- .../serialization/SimpleUtf8Cache.java | 2 +- .../GenerationalUtf8CacheTest.java | 48 +++++++++++++++++++ 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/communication/src/main/java/datadog/communication/serialization/GenerationalUtf8Cache.java b/communication/src/main/java/datadog/communication/serialization/GenerationalUtf8Cache.java index 036abfe6e79..33b775b197d 100644 --- a/communication/src/main/java/datadog/communication/serialization/GenerationalUtf8Cache.java +++ b/communication/src/main/java/datadog/communication/serialization/GenerationalUtf8Cache.java @@ -85,10 +85,10 @@ public final class GenerationalUtf8Cache implements EncodingCache { static final int MAX_ENTRY_LEN = 256; - private final CacheEntry[] edenEntries; + final CacheEntry[] edenEntries; private final int[] edenMarkers; - private final CacheEntry[] tenuredEntries; + final CacheEntry[] tenuredEntries; private long accessTimeMs; private double promotionThreshold = INITIAL_PROMOTION_THRESHOLD; @@ -120,7 +120,7 @@ public GenerationalUtf8Cache(int capacity) { public GenerationalUtf8Cache(int edenCapacity, int tenuredCapacity) { this.accessTimeMs = System.currentTimeMillis(); - int edenSize = Caching.cacheSizeFor(Math.min(tenuredCapacity, MAX_EDEN_CAPACITY)); + int edenSize = Caching.cacheSizeFor(Math.min(edenCapacity, MAX_EDEN_CAPACITY)); this.edenEntries = new CacheEntry[edenSize]; this.edenMarkers = new int[edenSize]; @@ -143,7 +143,7 @@ public void updateAccessTime(long accessTimeMs) { } /** Updates access time to the @link {@link System#currentTimeMillis()} */ - public void refreshAcessTime() { + public void refreshAccessTime() { this.updateAccessTime(System.currentTimeMillis()); } @@ -215,14 +215,13 @@ public final byte[] getUtf8(String value, long accessTimeMs) { if (value.length() > MAX_ENTRY_LEN) return CacheEntry.utf8(value); int adjHash = Caching.adjHash(value); - long lookupTimeMs = this.accessTimeMs; CacheEntry[] tenuredEntries = this.tenuredEntries; int matchingTenuredIndex = lookupEntryIndex(tenuredEntries, MAX_TENURED_PROBES, adjHash, value); if (matchingTenuredIndex != -1) { CacheEntry tenuredEntry = tenuredEntries[matchingTenuredIndex]; - tenuredEntry.hit(lookupTimeMs); + tenuredEntry.hit(accessTimeMs); this.tenuredHits += 1; return tenuredEntry.utf8(); @@ -233,7 +232,7 @@ public final byte[] getUtf8(String value, long accessTimeMs) { if (matchingEdenIndex != -1) { CacheEntry edenEntry = edenEntries[matchingEdenIndex]; - double hits = edenEntry.hit(lookupTimeMs); + double hits = edenEntry.hit(accessTimeMs); if (hits > this.promotionThreshold) { // mark promoted first - to avoid racy insertions this.promotions += 1; @@ -256,8 +255,8 @@ public final byte[] getUtf8(String value, long accessTimeMs) { CacheEntry newEntry = new CacheEntry(adjHash, value); // First request was swallowed by marking, so double hit - newEntry.hit(lookupTimeMs); - newEntry.hit(lookupTimeMs); + newEntry.hit(accessTimeMs); + newEntry.hit(accessTimeMs); // search for empty slot or failing that the MFU entry int edenMfuIndex = findFirstAvailableOrMfuIndex(edenEntries, MAX_EDEN_PROBES, adjHash); @@ -346,7 +345,7 @@ static final boolean lfuInsert(CacheEntry[] entries, int numProbes, CacheEntry n } } - // If we get here, then we're evicted the LRU + // If we get here, then we're evicting the LFU entries[lfuIndex] = newEntry; return true; } diff --git a/communication/src/main/java/datadog/communication/serialization/SimpleUtf8Cache.java b/communication/src/main/java/datadog/communication/serialization/SimpleUtf8Cache.java index bb2dcf11f5d..93e6c92bb9b 100644 --- a/communication/src/main/java/datadog/communication/serialization/SimpleUtf8Cache.java +++ b/communication/src/main/java/datadog/communication/serialization/SimpleUtf8Cache.java @@ -160,7 +160,7 @@ static final boolean lfuInsert(CacheEntry[] entries, CacheEntry newEntry) { } } - // If we get here, then we're evicting the LRU + // If we get here, then we're evicting the LFU entries[lfuIndex] = newEntry; return true; } diff --git a/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java b/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java index b8fb3fde316..86876b3d29f 100644 --- a/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java +++ b/communication/src/test/java/datadog/communication/serialization/GenerationalUtf8CacheTest.java @@ -36,6 +36,13 @@ public void capacity() { assertEquals(128, cache.tenuredCapacity()); } + @Test + public void capacity_twoArg() { + GenerationalUtf8Cache cache = new GenerationalUtf8Cache(64, 256); + assertEquals(64, cache.edenCapacity()); + assertEquals(256, cache.tenuredCapacity()); + } + @Test public void maxCapacity() { GenerationalUtf8Cache cache = @@ -82,6 +89,29 @@ public void caching() { assertNotEquals(0, cache.edenHits); } + @Test + public void getUtf8_perCallAccessTime_overridesField() { + GenerationalUtf8Cache cache = create(); + // The field value should not leak into the entry when an explicit time is supplied. + cache.updateAccessTime(0L); + + String value = "bar"; + long callTime = 12345L; + + // First call only marks; the second call creates the entry. + cache.getUtf8(value, callTime); + cache.getUtf8(value, callTime); + + assertEquals(callTime, lookupEdenLastUsedMs(cache, value)); + + // Drive enough hits to promote into tenured. + while (cache.promotions == 0) { + cache.getUtf8(value, callTime); + } + + assertEquals(callTime, lookupTenuredLastUsedMs(cache, value)); + } + @Test public void promotion() { GenerationalUtf8Cache cache = create(); @@ -205,6 +235,24 @@ static final String nextValue() { return baseString + valueSuffix; } + static long lookupEdenLastUsedMs(GenerationalUtf8Cache cache, String value) { + return lookupLastUsedMs(cache.edenEntries, "edenEntries", value); + } + + static long lookupTenuredLastUsedMs(GenerationalUtf8Cache cache, String value) { + return lookupLastUsedMs(cache.tenuredEntries, "tenuredEntries", value); + } + + private static long lookupLastUsedMs( + GenerationalUtf8Cache.CacheEntry[] entries, String arrayName, String value) { + for (GenerationalUtf8Cache.CacheEntry entry : entries) { + if (entry != null && value.equals(entry.value)) { + return entry.lastUsedMs(); + } + } + throw new AssertionError("entry for value '" + value + "' not found in " + arrayName); + } + static final void printStats(GenerationalUtf8Cache cache) { System.out.printf( "eden hits: %5d\tpromotion hits: %5d\tpromotions: %5d\tearly: %5d\tlocal evictions: %5d\tglobal evictions: %5d%n", From 6e02f44ae746d98c20ad7b757257433c65f93f29 Mon Sep 17 00:00:00 2001 From: Gyuheon Oh <102937919+gyuheon0h@users.noreply.github.com> Date: Tue, 19 May 2026 16:43:52 -0400 Subject: [PATCH 045/478] Update errors intake flag default json to be true (#11410) Update errors intake flag default json to be true Trigger CI Merge branch 'master' into gyuheon0h/update-errors-intake-config Co-authored-by: gyuheon.oh --- metadata/supported-configurations.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metadata/supported-configurations.json b/metadata/supported-configurations.json index 827230f46ae..01087b11aa4 100644 --- a/metadata/supported-configurations.json +++ b/metadata/supported-configurations.json @@ -971,9 +971,9 @@ ], "DD_CRASHTRACKING_ERRORS_INTAKE_ENABLED": [ { - "version": "A", + "version": "B", "type": "boolean", - "default": "false", + "default": "true", "aliases": [] } ], From 9353c265bf92a6a97547e62b0f314562ae85f6d2 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 19 May 2026 22:47:56 +0200 Subject: [PATCH 046/478] Add smoke-test plugin for nested Gradle builds (#11405) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chore(build-logic): add smoke-test plugin for nested Gradle builds Adds a new included build `build-logic/` hosting a single subproject `smoke-test` that exposes the `dd-trace-java.smoke-test-app` plugin. The plugin contributes: - `NestedGradleBuild` task type that runs a nested Gradle build via the Gradle Tooling API. It pins the nested Gradle version (no committed per-application wrappers), uses the configured Java toolchain for the nested daemon, forwards artifact paths from the root build as `-P=`, and redirects the nested `buildDir` via `-PappBuildDir=` so outputs land under the outer project's build directory. - `smokeTestApp` project extension with an `application { ... }` block that registers the `NestedGradleBuild` task, wires it into every `Test` task via `dependsOn` + a `jvmArgumentProvider` for the produced artifact's system property. Consumers can also register `NestedGradleBuild` directly when they need more control; the plugin is a no-op until `application` or a manual registration is done. - `projectJar(name, project)` helper that forwards a sibling project's jar to the nested build through a resolvable `Configuration` (avoids `evaluationDependsOn` and the cross-project access ordering issues). The plugin is verified with JUnit 5 unit tests (`ProjectBuilder`) and end-to-end tests that drive the Tooling API path through the Gradle Test Kit with a temporary Kotlin-DSL test project. `build-logic/settings.gradle.kts` references the existing `gradle/libs.versions.toml` catalog (mirroring `buildSrc/`) so the plugin can use the same library coordinates as the rest of the repo. The Gradle libs Maven repository (`https://repo.gradle.org/gradle/libs-releases`, scoped to `org.gradle:`) is added to the root build's `pluginManagement` and to `gradle/repositories.gradle` so the Tooling API jar resolves. Smoke-test modules with Spring Boot plugin versions incompatible with Gradle 9 will use this plugin in follow-up PRs instead of a committed Gradle 8 wrapper. Co-Authored-By: Claude Opus 4.7 (1M context) chore(build-logic): default smokeTestApp to JDK 21 daemon + Gradle 8.14.5 Set conventions on `smokeTestApp`: - `gradleVersion` defaults to `"8.14.5"` (Gradle 8 last release; pinned because Spring Boot plugin pre-3.5 calls `Configuration.getUploadTaskName()`, removed in Gradle 9). - `javaLauncher` defaults to a JDK 21 toolchain (the version the root build requires for its own Gradle 9 migration; standardising the nested daemon on the same JDK avoids requiring an extra toolchain on dev machines and CI runners). Consumers that need a different JDK or Gradle version still override explicitly. The inner build script is responsible for pinning the produced bytecode level (`java { sourceCompatibility = JavaVersion.VERSION_1_8 }` or similar) — Gradle adds `--release N` automatically when source/target differs from the daemon JVM. `JavaToolchainService` is now injected into the extension; this works in any project where a `java*` (or related) plugin is applied. Smoke-test modules already apply `gradle/java.gradle`, which applies `java`, so the convention resolves on first read. Public defaults exposed as `DEFAULT_NESTED_GRADLE_VERSION` and `DEFAULT_NESTED_JAVA_VERSION` constants so the values are discoverable. Co-Authored-By: Claude Opus 4.7 (1M context) chore(build-logic): use org.gradle.kotlin.dsl idioms in smoke-test plugin Switch the plugin sources and unit tests over to the typed `org.gradle.kotlin.dsl` extension functions where they replace `::class.java` boilerplate: - `tasks.register(name, Type::class.java) { … }` → `tasks.register(name) { … }` - `tasks.withType(Type::class.java).configureEach { … }` → `tasks.withType().configureEach { … }` - `extensions.create("name", Type::class.java)` → `extensions.create("name")` - `extensions.getByType(Type::class.java)` → `extensions.getByType()` - `extensions.findByName("name")` (followed by `isInstanceOf`) → `extensions.findByType()` - `project.plugins.apply(Plugin::class.java)` → `project.apply()` (PluginAware) - `objects.newInstance(Type::class.java)` → `objects.newInstance()` Also drop the six `captured*` local variables in `SmokeTestAppExtension.application` — inside `tasks.register(taskName) { … }` the outer extension's properties are now reached via `this@SmokeTestAppExtension.` directly. No behavioural change; the 9 plugin tests still pass. Co-Authored-By: Claude Opus 4.7 (1M context) Merge branch 'master' into bdu/smoke-test-plugin-infrastructure Co-authored-by: brice.dutheil --- build-logic/settings.gradle.kts | 50 ++++ build-logic/smoke-test/build.gradle.kts | 56 +++++ .../smoketest/NestedBuildProjectJar.kt | 24 ++ .../buildlogic/smoketest/NestedGradleBuild.kt | 128 +++++++++++ .../smoketest/SmokeTestAppExtension.kt | 214 ++++++++++++++++++ .../smoketest/SmokeTestAppPlugin.kt | 21 ++ .../smoketest/SmokeTestAppEndToEndTest.kt | 204 +++++++++++++++++ .../smoketest/SmokeTestAppPluginTest.kt | 83 +++++++ gradle/libs.versions.toml | 2 + gradle/repositories.gradle | 8 + settings.gradle.kts | 9 + 11 files changed, 799 insertions(+) create mode 100644 build-logic/settings.gradle.kts create mode 100644 build-logic/smoke-test/build.gradle.kts create mode 100644 build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedBuildProjectJar.kt create mode 100644 build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedGradleBuild.kt create mode 100644 build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppExtension.kt create mode 100644 build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPlugin.kt create mode 100644 build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppEndToEndTest.kt create mode 100644 build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPluginTest.kt diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 00000000000..612ae4b8fdd --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,50 @@ +pluginManagement { + repositories { + mavenLocal() + if (settings.extra.has("gradlePluginProxy")) { + maven { + url = uri(settings.extra["gradlePluginProxy"] as String) + isAllowInsecureProtocol = true + } + } + if (settings.extra.has("mavenRepositoryProxy")) { + maven { + url = uri(settings.extra["mavenRepositoryProxy"] as String) + isAllowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + } +} + +dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } + repositories { + mavenLocal() + if (settings.extra.has("mavenRepositoryProxy")) { + maven { + url = uri(settings.extra["mavenRepositoryProxy"] as String) + isAllowInsecureProtocol = true + } + } + gradlePluginPortal() + mavenCentral() + // Hosts gradle-tooling-api; used by the smoke-test plugin to run nested Gradle builds + // pinned to older Gradle versions. + maven { + url = uri("https://repo.gradle.org/gradle/libs-releases") + content { + includeGroup("org.gradle") + } + } + } +} + +rootProject.name = "build-logic" + +include(":smoke-test") diff --git a/build-logic/smoke-test/build.gradle.kts b/build-logic/smoke-test/build.gradle.kts new file mode 100644 index 00000000000..2581025425e --- /dev/null +++ b/build-logic/smoke-test/build.gradle.kts @@ -0,0 +1,56 @@ +plugins { + `java-gradle-plugin` + `kotlin-dsl` + `jvm-test-suite` +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8) + } +} + +dependencies { + implementation(libs.gradle.tooling.api) + runtimeOnly("org.slf4j:slf4j-simple:1.7.36") +} + +gradlePlugin { + plugins { + create("smoke-test-app") { + id = "dd-trace-java.smoke-test-app" + implementationClass = "datadog.buildlogic.smoketest.SmokeTestAppPlugin" + } + } +} + +@Suppress("UnstableApiUsage") +testing { + suites { + val test by getting(JvmTestSuite::class) { + useJUnitJupiter(libs.versions.junit5) + dependencies { + implementation(libs.junit.jupiter) + implementation(libs.junit.jupiter.params) + implementation(libs.junit.jupiter.engine) + implementation(libs.assertj.core) + implementation(gradleTestKit()) + } + targets.configureEach { + testTask.configure { + // The gradle-test-kit runner shells out to a Gradle daemon, which can be slow on a + // cold cache. Surface stdout/stderr to make CI failures debuggable. + testLogging { + showStandardStreams = true + events("failed", "skipped") + } + } + } + } + } +} diff --git a/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedBuildProjectJar.kt b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedBuildProjectJar.kt new file mode 100644 index 00000000000..503f78c47b4 --- /dev/null +++ b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedBuildProjectJar.kt @@ -0,0 +1,24 @@ +package datadog.buildlogic.smoketest + +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity + +/** + * A jar produced by the root build that needs to be forwarded into a [NestedGradleBuild]. + * + * At execution time the task adds `-P${propertyName}=` to the nested + * Gradle invocation, so the inner build script can pick it up via `findProperty(...)`. + */ +abstract class NestedBuildProjectJar { + + @get:Input + abstract val propertyName: Property + + @get:InputFile + @get:PathSensitive(PathSensitivity.NONE) + abstract val file: RegularFileProperty +} diff --git a/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedGradleBuild.kt b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedGradleBuild.kt new file mode 100644 index 00000000000..e2c1c34f09f --- /dev/null +++ b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/NestedGradleBuild.kt @@ -0,0 +1,128 @@ +package datadog.buildlogic.smoketest + +import org.gradle.api.Action +import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.FileTree +import org.gradle.api.file.RegularFile +import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property +import org.gradle.api.provider.Provider +import org.gradle.api.tasks.IgnoreEmptyDirectories +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Nested +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.jvm.toolchain.JavaLauncher +import org.gradle.jvm.toolchain.JavaToolchainService +import org.gradle.kotlin.dsl.newInstance +import org.gradle.tooling.GradleConnector +import javax.inject.Inject + +/** + * Runs a nested Gradle build inside [applicationDir] via the Gradle Tooling API. + * + * Lets a smoke test pin a Gradle version (typically older than the root build) and a Java + * toolchain for the nested daemon, without committing per-application `gradlew` wrappers. + * + * The nested build script is expected to honour `-PappBuildDir=` and redirect its + * `buildDir` to that path so the artifact lands in [applicationBuildDir]. Project artifacts + * from the root build can be forwarded via [projectJar]; each entry is passed as + * `-P=` and tracked as a task input so the nested build re-runs + * when the upstream jar changes. + */ +abstract class NestedGradleBuild @Inject constructor( + private val objects: ObjectFactory, + javaToolchains: JavaToolchainService, +) : DefaultTask() { + + init { + gradleVersion.convention(DEFAULT_NESTED_GRADLE_VERSION) + javaLauncher.convention( + javaToolchains.launcherFor { + languageVersion.set(JavaLanguageVersion.of(DEFAULT_NESTED_JAVA_VERSION)) + }, + ) + } + + @get:Internal + abstract val applicationDir: DirectoryProperty + + @get:InputFiles + @get:IgnoreEmptyDirectories + @get:PathSensitive(PathSensitivity.RELATIVE) + val applicationSources: FileTree = + objects.fileTree().from(applicationDir).matching { + exclude(".gradle/**", "build/**") + } + + @get:Input + abstract val gradleVersion: Property + + @get:Nested + abstract val javaLauncher: Property + + @get:Input + abstract val tasksToRun: ListProperty + + @get:Input + abstract val buildArguments: ListProperty + + @get:Nested + abstract val projectJars: ListProperty + + @get:OutputDirectory + abstract val applicationBuildDir: DirectoryProperty + + /** Forward a root-build jar as `-P=` into the nested build. */ + fun projectJar(name: String, file: Provider) { + projectJars.add( + objects.newInstance().apply { + propertyName.set(name) + this.file.set(file) + }, + ) + } + + /** Configure additional aspects of the nested build via a typed action. */ + fun projectJar(action: Action) { + projectJars.add( + objects.newInstance().also(action::execute), + ) + } + + @TaskAction + fun runNestedBuild() { + val appDir = applicationDir.get().asFile + val appBuildDirFile = applicationBuildDir.get().asFile + val daemonJavaHome = javaLauncher.get().metadata.installationPath.asFile + + val args = buildList { + add("-PappBuildDir=${appBuildDirFile.absolutePath}") + projectJars.get().forEach { entry -> + add("-P${entry.propertyName.get()}=${entry.file.get().asFile.absolutePath}") + } + addAll(buildArguments.get()) + } + + val connector = GradleConnector.newConnector() + .useGradleVersion(gradleVersion.get()) + .forProjectDirectory(appDir) + + connector.connect().use { connection -> + connection.newBuild() + .forTasks(*tasksToRun.get().toTypedArray()) + .withArguments(args) + .setJavaHome(daemonJavaHome) + .setStandardOutput(System.out) + .setStandardError(System.err) + .run() + } + } +} diff --git a/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppExtension.kt b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppExtension.kt new file mode 100644 index 00000000000..ccb5ee838db --- /dev/null +++ b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppExtension.kt @@ -0,0 +1,214 @@ +package datadog.buildlogic.smoketest + +import org.gradle.api.Action +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.RegularFile +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.MapProperty +import org.gradle.api.provider.Property +import org.gradle.api.provider.Provider +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.testing.Test +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.jvm.toolchain.JavaLauncher +import org.gradle.jvm.toolchain.JavaToolchainService +import org.gradle.kotlin.dsl.newInstance +import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.withType +import org.gradle.process.CommandLineArgumentProvider +import java.util.Locale +import javax.inject.Inject + +/** + * Project extension that wires a [NestedGradleBuild] task for a smoke-test application. + * + * The plugin only contributes a task when the consumer calls [application]; if the extension + * stays unconfigured, the plugin is a no-op and consumers can register [NestedGradleBuild] + * directly. + */ +abstract class SmokeTestAppExtension @Inject constructor( + private val project: Project, + javaToolchains: JavaToolchainService, +) { + + /** + * Gradle version used by the nested daemon. Defaults to [DEFAULT_NESTED_GRADLE_VERSION] — + * the version pinned for smoke-test applications whose Spring Boot plugin is incompatible + * with Gradle 9. + */ + abstract val gradleVersion: Property + + /** + * JDK used by the nested daemon. Defaults to a [DEFAULT_NESTED_JAVA_VERSION] toolchain; + * override to pin a different JDK if the nested application's plugin chain requires it. + * The inner build script is responsible for pinning the produced bytecode level (e.g. + * `java { sourceCompatibility = JavaVersion.VERSION_1_8 }`). + */ + abstract val javaLauncher: Property + + /** Directory containing the nested project's `settings.gradle` + sources. */ + abstract val applicationDir: DirectoryProperty + + /** + * Directory the nested build writes its outputs to. The nested build script is expected to + * honour `-PappBuildDir=`; see the existing smoke-test inner builds for the pattern. + */ + abstract val applicationBuildDir: DirectoryProperty + + internal abstract val projectJars: ListProperty + + init { + applicationDir.convention(project.layout.projectDirectory.dir("application")) + applicationBuildDir.convention(project.layout.buildDirectory.dir("application")) + gradleVersion.convention(DEFAULT_NESTED_GRADLE_VERSION) + javaLauncher.convention( + javaToolchains.launcherFor { + languageVersion.set(JavaLanguageVersion.of(DEFAULT_NESTED_JAVA_VERSION)) + }, + ) + } + + /** + * Register the nested-build task and wire the produced artifact into every `Test` task as + * a system property. Calling this triggers task registration; consumers that prefer to + * register [NestedGradleBuild] manually can leave [application] uncalled. + */ + fun application(action: Action) { + val spec = project.objects.newInstance() + action.execute(spec) + val taskName = requireNotNull(spec.taskName.orNull) { + "smokeTestApp.application { taskName = ... } is required" + } + val artifactPath = requireNotNull(spec.artifactPath.orNull) { + "smokeTestApp.application { artifactPath = ... } is required" + } + val sysProperty = requireNotNull(spec.sysProperty.orNull) { + "smokeTestApp.application { sysProperty = ... } is required" + } + val nestedTasks = spec.nestedTasks.orNull?.takeIf { it.isNotEmpty() } ?: listOf(taskName) + + val taskProvider: TaskProvider = + project.tasks.register(taskName) { + applicationDir.set(this@SmokeTestAppExtension.applicationDir) + applicationBuildDir.set(this@SmokeTestAppExtension.applicationBuildDir) + gradleVersion.set(this@SmokeTestAppExtension.gradleVersion) + javaLauncher.set(this@SmokeTestAppExtension.javaLauncher) + tasksToRun.set(nestedTasks) + buildArguments.set(spec.buildArguments) + projectJars.set(this@SmokeTestAppExtension.projectJars) + } + + val artifactProvider: Provider = applicationBuildDir.file(artifactPath) + val extras = spec.additionalSystemProperties.get().mapValues { (_, relativePath) -> + applicationBuildDir.file(relativePath) + } + project.tasks.withType().configureEach { + dependsOn(taskProvider) + jvmArgumentProviders.add(SmokeTestArgProvider(sysProperty, artifactProvider, extras)) + } + } + + /** + * Forward the default `jar` artifact from [sourceProject] into the nested build as + * `-P=`. The jar is consumed via a resolvable [Configuration], + * which both establishes the correct task dependency and lets Gradle resolve the artifact + * lazily — no `evaluationDependsOn` is needed. + */ + fun projectJar(propertyName: String, sourceProject: Project) { + val configurationName = "smokeTestAppExtraJar" + + propertyName.replaceFirstChar { it.titlecase(Locale.ROOT) } + val cfg = project.configurations.maybeCreate(configurationName).apply { + isCanBeConsumed = false + isCanBeResolved = true + isTransitive = false + description = "Jar artifact forwarded as -P$propertyName into the smoke-test nested build" + } + project.dependencies.add(configurationName, sourceProject) + addProjectJarFromConfiguration(propertyName, cfg) + } + + /** + * Lower-level overload for the rare case where the caller already has a provider of the + * file. The caller is responsible for the upstream task dependency. + */ + fun projectJar(propertyName: String, file: Provider) { + projectJars.add( + project.objects.newInstance().apply { + this.propertyName.set(propertyName) + this.file.set(file) + }, + ) + } + + private fun addProjectJarFromConfiguration(propertyName: String, cfg: Configuration) { + projectJars.add( + project.objects.newInstance().apply { + this.propertyName.set(propertyName) + // Configuration.elements yields a Provider that carries the producing task dependency, + // so wiring it into the task's @InputFile both tracks file contents and arranges build + // order. + this.file.set( + cfg.elements.map { files -> + project.objects.fileProperty().fileValue(files.single().asFile).get() + }, + ) + }, + ) + } +} + +/** DSL describing the nested-build invocation for one smoke-test application. */ +abstract class ApplicationSpec @Inject constructor() { + /** Outer task name; the nested daemon runs the same task by default. */ + abstract val taskName: Property + + /** Path to the produced artifact, relative to `applicationBuildDir`. */ + abstract val artifactPath: Property + + /** System property name set on Test tasks to point them at the produced artifact. */ + abstract val sysProperty: Property + + /** Tasks run inside the nested build. Defaults to `[taskName]`. */ + abstract val nestedTasks: ListProperty + + /** Extra arguments passed to the nested Gradle invocation. */ + abstract val buildArguments: ListProperty + + /** + * Additional system properties to forward to every `Test` task, keyed by property name with + * values resolved against `applicationBuildDir`. Use this for smoke tests that need more + * than the single primary artifact path (e.g. a separately unpacked server install). + */ + abstract val additionalSystemProperties: MapProperty +} + +/** + * Default Gradle distribution version for the nested daemon. Pinned to a Gradle 8 release + * because the Spring Boot Gradle plugin pre-3.5.0 calls `Configuration.getUploadTaskName()`, + * removed in Gradle 9. + */ +const val DEFAULT_NESTED_GRADLE_VERSION = "8.14.5" + +/** + * Default JDK language version for the nested daemon. JDK 21 is the version the root build + * requires for Gradle 9; standardising the nested daemon on the same JDK avoids pulling a + * second toolchain onto dev machines and CI runners. Inner build scripts cross-compile down + * to their actual bytecode target via `java { sourceCompatibility = ... }`. + */ +const val DEFAULT_NESTED_JAVA_VERSION = 21 + +private class SmokeTestArgProvider( + private val sysProperty: String, + private val artifact: Provider, + private val extras: Map>, +) : CommandLineArgumentProvider { + override fun asArguments(): Iterable = + buildList { + add("-D$sysProperty=${artifact.get().asFile.absolutePath}") + extras.forEach { (key, value) -> + add("-D$key=${value.get().asFile.absolutePath}") + } + } +} diff --git a/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPlugin.kt b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPlugin.kt new file mode 100644 index 00000000000..b6d6fe6b7ba --- /dev/null +++ b/build-logic/smoke-test/src/main/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPlugin.kt @@ -0,0 +1,21 @@ +package datadog.buildlogic.smoketest + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.create + +/** + * Exposes the [NestedGradleBuild] task type plus a `smokeTestApp` extension that wires the + * nested-build task and Test-side system properties for a smoke-test application. + * + * Consumers can either: + * - configure `smokeTestApp { application { ... } }` to let the plugin register the task and + * wire it into every `Test` task, or + * - leave the extension untouched and register a [NestedGradleBuild] task manually (for cases + * that need more control, e.g. additional `Exec`-like task wiring). + */ +class SmokeTestAppPlugin : Plugin { + override fun apply(project: Project) { + project.extensions.create("smokeTestApp") + } +} diff --git a/build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppEndToEndTest.kt b/build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppEndToEndTest.kt new file mode 100644 index 00000000000..b3ad87bbaf3 --- /dev/null +++ b/build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppEndToEndTest.kt @@ -0,0 +1,204 @@ +package datadog.buildlogic.smoketest + +import org.assertj.core.api.Assertions.assertThat +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir +import java.io.File +import java.nio.file.Path + +/** + * End-to-end tests that drive the plugin through the Gradle Test Kit and a temporary, + * self-contained Kotlin-DSL test project. The inner "smoke-test application" is itself a + * minimal Kotlin-DSL Gradle build; the outer build wires it through the `smokeTestApp` DSL. + * + * These tests are slow (each test spins up a Gradle daemon) but they are the only way to + * exercise the Tooling API path end-to-end. + */ +class SmokeTestAppEndToEndTest { + + @TempDir + lateinit var projectDir: Path + + private val outerSettings get() = projectDir.resolve("settings.gradle.kts").toFile() + private val outerBuild get() = projectDir.resolve("build.gradle.kts").toFile() + private val applicationDir get() = projectDir.resolve("application").toFile() + + @BeforeEach + fun setUp() { + applicationDir.mkdirs() + } + + @Test + fun `application block registers a NestedGradleBuild task with the configured name`() { + writeOuterSettings() + outerBuild.writeText( + """ + plugins { + java + id("dd-trace-java.smoke-test-app") + } + + smokeTestApp { + javaLauncher.set( + javaToolchains.launcherFor { languageVersion.set(JavaLanguageVersion.of(${currentMajorJdk()})) } + ) + application { + taskName.set("packageApp") + artifactPath.set("libs/test.jar") + sysProperty.set("test.path") + } + } + """.trimIndent(), + ) + + val result = runner("tasks", "--all").build() + + assertThat(result.output).contains("packageApp") + } + + @Test + fun `nested build produces the configured artifact`() { + writeOuterSettings() + outerBuild.writeText( + """ + plugins { + java + id("dd-trace-java.smoke-test-app") + } + + smokeTestApp { + javaLauncher.set( + javaToolchains.launcherFor { languageVersion.set(JavaLanguageVersion.of(${currentMajorJdk()})) } + ) + application { + taskName.set("buildJar") + artifactPath.set("libs/sample.jar") + sysProperty.set("sample.path") + } + } + """.trimIndent(), + ) + writeInnerSettings() + writeInnerBuild( + """ + tasks.register("buildJar") { + archiveFileName.set("sample.jar") + from(file("src")) + } + """.trimIndent(), + ) + File(applicationDir, "src").mkdir() + File(applicationDir, "src/hello.txt").writeText("hi") + + val result = runner("buildJar").build() + + assertThat(result.task(":buildJar")?.outcome).isEqualTo(TaskOutcome.SUCCESS) + assertThat(File(projectDir.toFile(), "build/application/libs/sample.jar")).exists() + } + + @Test + fun `plugin is a no-op when the application block is never called`() { + writeOuterSettings() + outerBuild.writeText( + """ + plugins { + java + id("dd-trace-java.smoke-test-app") + } + + smokeTestApp { + // No application block, no javaLauncher — should not blow up. + } + """.trimIndent(), + ) + + val result = runner("help").build() + + assertThat(result.output).contains("BUILD SUCCESSFUL") + } + + @Test + fun `manual NestedGradleBuild task registration works without the application block`() { + writeOuterSettings() + outerBuild.writeText( + """ + import datadog.buildlogic.smoketest.NestedGradleBuild + + plugins { + java + id("dd-trace-java.smoke-test-app") + } + + tasks.register("customBuild") { + applicationDir.set(layout.projectDirectory.dir("application")) + applicationBuildDir.set(layout.buildDirectory.dir("application")) + gradleVersion.set(gradle.gradleVersion) + javaLauncher.set( + javaToolchains.launcherFor { languageVersion.set(JavaLanguageVersion.of(${currentMajorJdk()})) } + ) + tasksToRun.set(listOf("buildJar")) + } + """.trimIndent(), + ) + writeInnerSettings() + writeInnerBuild( + """ + tasks.register("buildJar") { + archiveFileName.set("custom.jar") + from(file("src")) + } + """.trimIndent(), + ) + File(applicationDir, "src").mkdir() + File(applicationDir, "src/hello.txt").writeText("hi") + + val result = runner("customBuild").build() + + assertThat(result.task(":customBuild")?.outcome).isEqualTo(TaskOutcome.SUCCESS) + } + + private fun writeOuterSettings() { + outerSettings.writeText( + """ + rootProject.name = "smoke-test-app-fixture" + """.trimIndent(), + ) + } + + private fun writeInnerSettings() { + File(applicationDir, "settings.gradle.kts").writeText( + """ + rootProject.name = "smoke-test-app-fixture-application" + """.trimIndent(), + ) + } + + private fun writeInnerBuild(taskBlock: String) { + File(applicationDir, "build.gradle.kts").writeText( + """ + plugins { + java + } + if (hasProperty("appBuildDir")) { + layout.buildDirectory.set(file(property("appBuildDir") as String)) + } + $taskBlock + """.trimIndent(), + ) + } + + private fun runner(vararg args: String): GradleRunner = + GradleRunner.create() + .withProjectDir(projectDir.toFile()) + .withPluginClasspath() + .withArguments(*args, "--stacktrace") + .forwardOutput() + + private fun currentMajorJdk(): Int = + System.getProperty("java.specification.version").let { + if (it.startsWith("1.")) it.substring(2).toInt() else it.toInt() + } +} diff --git a/build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPluginTest.kt b/build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPluginTest.kt new file mode 100644 index 00000000000..22fd1ce93fe --- /dev/null +++ b/build-logic/smoke-test/src/test/kotlin/datadog/buildlogic/smoketest/SmokeTestAppPluginTest.kt @@ -0,0 +1,83 @@ +package datadog.buildlogic.smoketest + +import org.assertj.core.api.Assertions.assertThat +import org.gradle.api.plugins.JavaPlugin +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.findByType +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.withType +import org.gradle.testfixtures.ProjectBuilder +import org.junit.jupiter.api.Test + +/** + * Fast in-process tests that exercise plugin application and extension wiring through + * [ProjectBuilder]. End-to-end task execution lives in [SmokeTestAppEndToEndTest]. + */ +class SmokeTestAppPluginTest { + + @Test + fun `applying the plugin creates the smokeTestApp extension`() { + val project = ProjectBuilder.builder().build() + + project.plugins.apply("dd-trace-java.smoke-test-app") + + assertThat(project.extensions.findByType()).isNotNull + } + + @Test + fun `plugin is a no-op when smokeTestApp_application is never called`() { + val project = ProjectBuilder.builder().build() + + project.plugins.apply("dd-trace-java.smoke-test-app") + + // No task of our type should be registered until `application { }` is invoked. + assertThat(project.tasks.withType()).isEmpty() + } + + @Test + fun `extension defaults applicationDir to projectDir slash application`() { + val project = ProjectBuilder.builder().build() + project.plugins.apply("dd-trace-java.smoke-test-app") + + val extension = project.extensions.getByType() + + assertThat(extension.applicationDir.get().asFile) + .isEqualTo(project.layout.projectDirectory.dir("application").asFile) + } + + @Test + fun `extension defaults applicationBuildDir to buildDir slash application`() { + val project = ProjectBuilder.builder().build() + project.plugins.apply("dd-trace-java.smoke-test-app") + + val extension = project.extensions.getByType() + + assertThat(extension.applicationBuildDir.get().asFile) + .isEqualTo(project.layout.buildDirectory.dir("application").get().asFile) + } + + @Test + fun `extension defaults gradleVersion to the smoke-test pinned version`() { + val project = ProjectBuilder.builder().build() + project.plugins.apply("dd-trace-java.smoke-test-app") + + val extension = project.extensions.getByType() + + assertThat(extension.gradleVersion.get()).isEqualTo(DEFAULT_NESTED_GRADLE_VERSION) + } + + @Test + fun `extension defaults javaLauncher to a JDK 21 toolchain`() { + // JavaToolchainService is contributed by the `java-base` plugin; apply something that + // pulls it in so ProjectBuilder can resolve the convention. + val project = ProjectBuilder.builder().build() + project.apply() + project.plugins.apply("dd-trace-java.smoke-test-app") + + val extension = project.extensions.getByType() + + assertThat(extension.javaLauncher.get().metadata.languageVersion) + .isEqualTo(JavaLanguageVersion.of(DEFAULT_NESTED_JAVA_VERSION)) + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6b1916a456f..6abe7896aab 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,6 +4,7 @@ # Build develocity = "4.4.1" forbiddenapis = "3.10" +gradle-tooling-api = "8.14.5" spotbugs_annotations = "4.9.8" # DataDog libs and forks @@ -78,6 +79,7 @@ testcontainers = "1.21.4" # Build develocity = { module = "com.gradle:develocity-gradle-plugin", version.ref = "develocity" } forbiddenapis = { module = "de.thetaphi:forbiddenapis", version.ref = "forbiddenapis" } +gradle-tooling-api = { module = "org.gradle:gradle-tooling-api", version.ref = "gradle-tooling-api" } spotbugs-annotations = { module = "com.github.spotbugs:spotbugs-annotations", version.ref = "spotbugs_annotations" } # DataDog libs and forks diff --git a/gradle/repositories.gradle b/gradle/repositories.gradle index 98085e93c50..e7d4824b4c6 100644 --- a/gradle/repositories.gradle +++ b/gradle/repositories.gradle @@ -35,4 +35,12 @@ repositories { includeGroupAndSubgroups "org.springframework" } } + // Hosts gradle-tooling-api, used by build-logic:smoke-test to run nested + // Gradle builds for smoke-test applications pinned to older Gradle versions. + maven { + url = 'https://repo.gradle.org/gradle/libs-releases' + content { + includeGroup "org.gradle" + } + } } diff --git a/settings.gradle.kts b/settings.gradle.kts index bd5aaceffaa..e6c9469b9c6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,16 @@ pluginManagement { } gradlePluginPortal() mavenCentral() + // Hosts gradle-tooling-api, a transitive dep of the build-logic:smoke-test plugin used + // to run nested Gradle builds for smoke-test applications pinned to older Gradle versions. + maven { + url = uri("https://repo.gradle.org/gradle/libs-releases") + content { + includeGroup("org.gradle") + } + } } + includeBuild("build-logic") } plugins { From 0fd3b59362fcfa1cb301595a367bbcaf03b7dc5b Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Tue, 19 May 2026 17:08:50 -0400 Subject: [PATCH 047/478] Calculate version using 'first-parent' only for release branches. For PRs calculate on latest released version. (#11385) Calculate version using 'first-parent' only for release branches. For PRs calculate on latest released version. Merged with master. Changed code to use base class helpers. Co-authored-by: alexey.kuznetsov --- .../plugin/version/TracerVersionPlugin.kt | 21 +++++++-- .../version/TracerVersionIntegrationTest.kt | 44 +++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt index 5255cbf5328..4cd8669c389 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/version/TracerVersionPlugin.kt @@ -48,9 +48,18 @@ class TracerVersionPlugin @Inject constructor( // Not a git repository extension.defaultVersion.get() } else { + val currentBranchProvider = gitCurrentBranchProvider(repoWorkingDirectory) providerFactory.zip( - gitDescribeProvider(extension, repoWorkingDirectory), - gitCurrentBranchProvider(repoWorkingDirectory) + currentBranchProvider.flatMap { currentBranch -> + // Use --first-parent only on release branches so they stay anchored to their own + // version line; feature branches pick up newer tags merged in from main. + gitDescribeProvider( + extension, + repoWorkingDirectory, + firstParent = currentBranch.startsWith("release/v") + ) + }, + currentBranchProvider ) { describeString, currentBranch -> toTracerVersion(describeString, extension) { when { @@ -87,7 +96,8 @@ class TracerVersionPlugin @Inject constructor( private fun gitDescribeProvider( extension: TracerVersionExtension, - repoWorkingDirectory: File + repoWorkingDirectory: File, + firstParent: Boolean, ) = providerFactory.of(GitCommandValueSource::class.java) { parameters { val tagPrefix = extension.tagVersionPrefix.get() @@ -96,10 +106,13 @@ class TracerVersionPlugin @Inject constructor( "describe", "--abbrev=8", "--tags", - "--first-parent", "--match=$tagPrefix[0-9].[0-9]*.[0-9]*", ) + if (firstParent) { + gitCommand.add("--first-parent") + } + if (extension.detectDirty.get()) { gitCommand.add("--dirty") } diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt index aa25c46c757..eb909d71862 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/version/TracerVersionIntegrationTest.kt @@ -144,6 +144,50 @@ class TracerVersionIntegrationTest : VersionPluginsFixture() { ) } + @Test + fun `should increment minor from merged main version tag on feature branch`() { + assertTracerVersion( + expectedVersion = "1.53.0-SNAPSHOT", + beforeGradle = { + initGitRepo() + exec("git", "tag", "v1.50.0", "-m", "") + exec("git", "switch", "-c", "feature") + writeFile("feature.txt", "feature") + exec("git", "add", "feature.txt") + exec("git", "commit", "-m", "Feature commit") + exec("git", "switch", "main") + writeFile("main.txt", "main") + exec("git", "add", "main.txt") + exec("git", "commit", "-m", "Main commit") + exec("git", "tag", "v1.52.0", "-m", "") + exec("git", "switch", "feature") + exec("git", "merge", "main", "--no-edit") + }, + ) + } + + @Test + fun `should increment patch from first parent on release branch after main merge`() { + assertTracerVersion( + expectedVersion = "1.52.1-SNAPSHOT", + beforeGradle = { + initGitRepo() + exec("git", "tag", "v1.52.0", "-m", "") + exec("git", "switch", "-c", "release/v1.52.x") + writeFile("release.txt", "release") + exec("git", "add", "release.txt") + exec("git", "commit", "-m", "Release commit") + exec("git", "switch", "main") + writeFile("main.txt", "main") + exec("git", "add", "main.txt") + exec("git", "commit", "-m", "Main commit") + exec("git", "tag", "v1.53.0", "-m", "") + exec("git", "switch", "release/v1.52.x") + exec("git", "merge", "main", "--no-edit") + }, + ) + } + private fun assertTracerVersion( expectedVersion: String, workingDirectory: File = projectDir, From 02117e356d14ba211bd3c2d2ab52bcdf3425f603 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 19 May 2026 23:39:42 +0200 Subject: [PATCH 048/478] Rewrite collect results script in Java (#11422) Rewrite collect results script in Java Reuse XML factories in collect results Co-authored-by: devflow.devflow-routing-intake --- .gitlab/TagSyntheticFailures.java | 140 ------------ .gitlab/add_final_status.xsl | 58 ----- .gitlab/collect-result/CollectResults.java | 14 ++ .gitlab/collect-result/JUnitReport.java | 213 ++++++++++++++++++ .gitlab/collect-result/ResultCollector.java | 114 ++++++++++ .../collect-result/SourceFileResolver.java | 177 +++++++++++++++ .gitlab/collect_results.sh | 101 +-------- 7 files changed, 525 insertions(+), 292 deletions(-) delete mode 100644 .gitlab/TagSyntheticFailures.java delete mode 100644 .gitlab/add_final_status.xsl create mode 100644 .gitlab/collect-result/CollectResults.java create mode 100644 .gitlab/collect-result/JUnitReport.java create mode 100644 .gitlab/collect-result/ResultCollector.java create mode 100644 .gitlab/collect-result/SourceFileResolver.java diff --git a/.gitlab/TagSyntheticFailures.java b/.gitlab/TagSyntheticFailures.java deleted file mode 100644 index a52b8d1e5a9..00000000000 --- a/.gitlab/TagSyntheticFailures.java +++ /dev/null @@ -1,140 +0,0 @@ -import java.io.File; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/// Tags synthetic testcases (`initializationError`, `executionError`, `test exception`) with -/// `dd_tags[test.final_status]=skip` so Test Optimization does not treat them as real failures. -/// The script is idempotent — testcases that already carry a `dd_tags[test.final_status]` property -/// are left unchanged. -/// -/// **`initializationError`** — Gradle generates these for setup methods. When retried and -// eventually -/// successful, multiple testcases appear; only the last one passes. All intermediate attempts are -/// tagged skip. Groups with only one (or zero) `initializationError` entries per classname are left -// unmodified. -/// -/// **`executionError`** and **`test exception`** — Framework-level synthetic failures that do not -/// represent real test results. Tagged skip unconditionally so Test Optimization treats them as -// non-failures. -/// -/// Before (two retries of the same class — first is intermediate, second is the final outcome): -/// -/// ``` -/// -/// -/// ``` -/// -/// After (only the intermediate attempt is tagged; the last entry is left untouched): -/// -/// ``` -/// -/// -/// -/// -/// -/// -/// ``` -/// -/// Usage (Java 25): `java TagSyntheticFailures.java junit-report.xml` - -class TagSyntheticFailures { - public static void main(String[] args) throws Exception { - if (args.length == 0) { - System.err.println("Usage: java TagSyntheticFailures.java "); - System.exit(1); - } - var xmlFile = new File(args[0]); - if (!xmlFile.exists()) { - System.err.println("File not found: " + xmlFile); - System.exit(1); - } - var dbf = DocumentBuilderFactory.newInstance(); - dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); - dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - dbf.setExpandEntityReferences(false); - var doc = dbf.newDocumentBuilder().parse(xmlFile); - var testcases = doc.getElementsByTagName("testcase"); - Map> byClassname = new LinkedHashMap<>(); - boolean modified = false; - for (int i = 0; i < testcases.getLength(); i++) { - var e = (Element) testcases.item(i); - var name = e.getAttribute("name"); - if ("initializationError".equals(name)) { - byClassname.computeIfAbsent(e.getAttribute("classname"), k -> new ArrayList<>()).add(e); - } else if ("executionError".equals(name) || "test exception".equals(name)) { - if (tagSkip(doc, e)) modified = true; - } - } - for (var group : byClassname.values()) { - for (int i = 0; i < group.size() - 1; i++) { - if (tagSkip(doc, group.get(i))) { - modified = true; - } - } - } - if (!modified) { - return; - } - var tmpFile = File.createTempFile("TagSyntheticFailures", ".xml", xmlFile.getParentFile()); - try { - var transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - transformer.transform(new DOMSource(doc), new StreamResult(tmpFile)); - Files.move( - tmpFile.toPath(), xmlFile.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING); - } catch (Exception e) { - tmpFile.delete(); - throw e; - } - } - - static Element firstChildElement(Element parent, String tagName) { - var children = parent.getChildNodes(); - for (int i = 0; i < children.getLength(); i++) { - var child = children.item(i); - if (child instanceof Element e && tagName.equals(e.getTagName())) { - return e; - } - } - return null; - } - - static boolean tagSkip(Document doc, Element testcase) { - var props = firstChildElement(testcase, "properties"); - if (props != null) { - var children = props.getChildNodes(); - for (int j = 0; j < children.getLength(); j++) { - if (children.item(j) instanceof Element e - && "property".equals(e.getTagName()) - && "dd_tags[test.final_status]".equals(e.getAttribute("name"))) { - return false; - } - } - var property = doc.createElement("property"); - property.setAttribute("name", "dd_tags[test.final_status]"); - property.setAttribute("value", "skip"); - props.appendChild(property); - } else { - var properties = doc.createElement("properties"); - var property = doc.createElement("property"); - property.setAttribute("name", "dd_tags[test.final_status]"); - property.setAttribute("value", "skip"); - properties.appendChild(property); - testcase.appendChild(properties); - } - return true; - } -} diff --git a/.gitlab/add_final_status.xsl b/.gitlab/add_final_status.xsl deleted file mode 100644 index 4b4c0da17fd..00000000000 --- a/.gitlab/add_final_status.xsl +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - fail - skip - pass - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.gitlab/collect-result/CollectResults.java b/.gitlab/collect-result/CollectResults.java new file mode 100644 index 00000000000..ad7c6429cda --- /dev/null +++ b/.gitlab/collect-result/CollectResults.java @@ -0,0 +1,14 @@ +import java.nio.file.Path; +import java.util.List; + +class CollectResults { + public static void main(String[] args) throws Exception { + var collector = + new ResultCollector( + Path.of("results"), + Path.of("workspace"), + List.of(Path.of("workspace"), Path.of("buildSrc"))); + + collector.collect(); + } +} diff --git a/.gitlab/collect-result/JUnitReport.java b/.gitlab/collect-result/JUnitReport.java new file mode 100644 index 00000000000..0c74f4c934b --- /dev/null +++ b/.gitlab/collect-result/JUnitReport.java @@ -0,0 +1,213 @@ +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +final class JUnitReport { + private static final String FINAL_STATUS_PROPERTY = "dd_tags[test.final_status]"; + private static final Pattern HASH_CODE = Pattern.compile("@[0-9a-f]{5,}"); + private static final Pattern LOCALHOST_PORT = Pattern.compile("localhost:[0-9]{2,5}"); + private static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY = + newDocumentBuilderFactory(); + private static final TransformerFactory TRANSFORMER_FACTORY = newTransformerFactory(); + + private final Document document; + + private JUnitReport(Document document) { + this.document = document; + } + + static JUnitReport parse(Path xmlFile) throws Exception { + var document = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder().parse(xmlFile.toFile()); + return new JUnitReport(document); + } + + boolean addFileAttribute(String sourceFile) { + var changed = false; + for (var testcase : testcases()) { + if (testcase.hasAttribute("time")) { + changed |= !sourceFile.equals(testcase.getAttribute("file")); + testcase.setAttribute("file", sourceFile); + } + } + return changed; + } + + boolean normalizeStableTestNames() { + var changed = false; + for (var testcase : testcases()) { + var attributes = testcase.getAttributes(); + for (var i = 0; i < attributes.getLength(); i++) { + var attribute = attributes.item(i); + var value = attribute.getNodeValue(); + var normalized = + LOCALHOST_PORT + .matcher(HASH_CODE.matcher(value).replaceAll("@HASHCODE")) + .replaceAll("localhost:PORT"); + if (!value.equals(normalized)) { + attribute.setNodeValue(normalized); + changed = true; + } + } + } + return changed; + } + + void tagSyntheticFailures() { + Map> initializationErrorsByClassname = new LinkedHashMap<>(); + for (var testcase : testcases()) { + var name = testcase.getAttribute("name"); + if ("initializationError".equals(name)) { + initializationErrorsByClassname + .computeIfAbsent(testcase.getAttribute("classname"), ignored -> new ArrayList<>()) + .add(testcase); + } else if ("executionError".equals(name) || "test exception".equals(name)) { + addFinalStatusProperty(testcase, "skip", MissingPropertiesPlacement.APPEND_TO_TESTCASE); + } + } + + for (var group : initializationErrorsByClassname.values()) { + for (var i = 0; i < group.size() - 1; i++) { + addFinalStatusProperty( + group.get(i), "skip", MissingPropertiesPlacement.APPEND_TO_TESTCASE); + } + } + } + + void tagFinalStatuses() { + for (var testcase : testcases()) { + if (hasFinalStatusProperty(testcase)) { + continue; + } + addFinalStatusProperty( + testcase, finalStatus(testcase), MissingPropertiesPlacement.FIRST_CHILD); + } + } + + void write(Path xmlFile) throws Exception { + Files.createDirectories(xmlFile.getParent()); + var tmpFile = Files.createTempFile(xmlFile.getParent(), "collect-results-", ".xml"); + try (OutputStream output = Files.newOutputStream(tmpFile)) { + var transformer = TRANSFORMER_FACTORY.newTransformer(); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.transform(new DOMSource(document), new StreamResult(output)); + } catch (Exception e) { + Files.deleteIfExists(tmpFile); + throw e; + } + Files.move(tmpFile, xmlFile, StandardCopyOption.REPLACE_EXISTING); + } + + private static DocumentBuilderFactory newDocumentBuilderFactory() { + try { + var factory = DocumentBuilderFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + factory.setFeature("http://xml.org/sax/features/external-general-entities", false); + factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + factory.setXIncludeAware(false); + factory.setExpandEntityReferences(false); + return factory; + } catch (Exception e) { + throw new ExceptionInInitializerError(e); + } + } + + private static TransformerFactory newTransformerFactory() { + var factory = TransformerFactory.newInstance(); + factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); + factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); + return factory; + } + + private List testcases() { + var testcases = document.getElementsByTagName("testcase"); + var elements = new ArrayList(testcases.getLength()); + for (var i = 0; i < testcases.getLength(); i++) { + elements.add((Element) testcases.item(i)); + } + return elements; + } + + private boolean addFinalStatusProperty( + Element testcase, String status, MissingPropertiesPlacement missingPropertiesPlacement) { + var properties = firstChildElement(testcase, "properties"); + if (properties != null) { + if (propertiesHasFinalStatusProperty(properties)) { + return false; + } + } else { + properties = document.createElement("properties"); + if (missingPropertiesPlacement == MissingPropertiesPlacement.FIRST_CHILD) { + testcase.insertBefore(properties, testcase.getFirstChild()); + } else { + testcase.appendChild(properties); + } + } + + var property = document.createElement("property"); + property.setAttribute("name", FINAL_STATUS_PROPERTY); + property.setAttribute("value", status); + properties.appendChild(property); + return true; + } + + private static boolean hasFinalStatusProperty(Element testcase) { + var properties = firstChildElement(testcase, "properties"); + return properties != null && propertiesHasFinalStatusProperty(properties); + } + + private static boolean propertiesHasFinalStatusProperty(Element properties) { + var children = properties.getChildNodes(); + for (var i = 0; i < children.getLength(); i++) { + if (children.item(i) instanceof Element element + && "property".equals(element.getTagName()) + && FINAL_STATUS_PROPERTY.equals(element.getAttribute("name"))) { + return true; + } + } + return false; + } + + private static String finalStatus(Element testcase) { + if (hasChildElement(testcase, "failure") || hasChildElement(testcase, "error")) { + return "fail"; + } + if (hasChildElement(testcase, "skipped")) { + return "skip"; + } + return "pass"; + } + + private static Element firstChildElement(Element parent, String tagName) { + var children = parent.getChildNodes(); + for (var i = 0; i < children.getLength(); i++) { + if (children.item(i) instanceof Element element && tagName.equals(element.getTagName())) { + return element; + } + } + return null; + } + + private static boolean hasChildElement(Element parent, String tagName) { + return firstChildElement(parent, tagName) != null; + } + + private enum MissingPropertiesPlacement { + APPEND_TO_TESTCASE, + FIRST_CHILD + } +} diff --git a/.gitlab/collect-result/ResultCollector.java b/.gitlab/collect-result/ResultCollector.java new file mode 100644 index 00000000000..d993cd41d32 --- /dev/null +++ b/.gitlab/collect-result/ResultCollector.java @@ -0,0 +1,114 @@ +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Stream; + +final class ResultCollector { + private static final int[] AGGREGATED_NAME_FIELDS_FROM_END = {5, 2, 1}; + + private final Path resultsDir; + private final Path workspaceDir; + private final List searchDirs; + private final SourceFileResolver sourceFileResolver; + + ResultCollector(Path resultsDir, Path workspaceDir, List searchDirs) { + this.resultsDir = resultsDir; + this.workspaceDir = workspaceDir; + this.searchDirs = searchDirs; + this.sourceFileResolver = new SourceFileResolver(workspaceDir); + } + + void collect() throws Exception { + Files.createDirectories(resultsDir); + Files.createDirectories(workspaceDir); + + var testResultDirs = findTestResultDirs(); + if (testResultDirs.isEmpty()) { + System.out.println("No test results found"); + return; + } + + System.out.println("Saving test results:"); + for (var sourceXml : findXmlFiles(testResultDirs)) { + collect(sourceXml); + } + } + + private void collect(Path sourceXml) throws Exception { + var aggregatedName = aggregatedFileName(sourceXml); + var targetXml = resultsDir.resolve(aggregatedName); + System.out.print("- " + toUnixString(sourceXml) + " as " + aggregatedName); + + var sourceFile = sourceFileResolver.resolve(sourceXml); + var report = JUnitReport.parse(sourceXml); + var reportChangedBeforeFinalStatus = report.addFileAttribute(sourceFile); + reportChangedBeforeFinalStatus |= report.normalizeStableTestNames(); + report.tagSyntheticFailures(); + report.tagFinalStatuses(); + report.write(targetXml); + + if (reportChangedBeforeFinalStatus) { + System.out.print(" (non-stable test names detected)"); + } + System.out.println(); + } + + private List findTestResultDirs() throws IOException { + var found = new ArrayList(); + for (var searchDir : searchDirs) { + if (!Files.isDirectory(searchDir)) { + continue; + } + try (var paths = Files.walk(searchDir)) { + paths + .filter(Files::isDirectory) + .filter(path -> "test-results".equals(fileName(path))) + .forEach(found::add); + } + } + found.sort(Comparator.comparing(ResultCollector::toUnixString)); + return found; + } + + private static List findXmlFiles(List testResultDirs) throws IOException { + var found = new ArrayList(); + for (var testResultDir : testResultDirs) { + try (Stream paths = Files.walk(testResultDir)) { + paths + .filter(Files::isRegularFile) + .filter(path -> fileName(path).endsWith(".xml")) + .forEach(found::add); + } catch (UncheckedIOException e) { + throw e.getCause(); + } + } + found.sort(Comparator.comparing(ResultCollector::toUnixString)); + return found; + } + + private static String aggregatedFileName(Path sourceXml) { + var normalized = sourceXml.normalize(); + var parts = new ArrayList(AGGREGATED_NAME_FIELDS_FROM_END.length); + var nameCount = normalized.getNameCount(); + for (var fieldFromEnd : AGGREGATED_NAME_FIELDS_FROM_END) { + var index = nameCount - fieldFromEnd; + if (index >= 0) { + parts.add(normalized.getName(index).toString()); + } + } + return String.join("_", parts); + } + + private static String fileName(Path path) { + var fileName = path.getFileName(); + return fileName == null ? "" : fileName.toString(); + } + + static String toUnixString(Path path) { + return path.toString().replace(path.getFileSystem().getSeparator(), "/"); + } +} diff --git a/.gitlab/collect-result/SourceFileResolver.java b/.gitlab/collect-result/SourceFileResolver.java new file mode 100644 index 00000000000..bf35fc842be --- /dev/null +++ b/.gitlab/collect-result/SourceFileResolver.java @@ -0,0 +1,177 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +final class SourceFileResolver { + private static final String UNKNOWN = "UNKNOWN"; + private static final Pattern CLASS_DECLARATION = + Pattern.compile("\\b(?:static\\s+)?class\\s+([A-Za-z_$][A-Za-z0-9_$]*)\\b"); + + private final String workspacePrefix; + private final Map indexes = new HashMap<>(); + + SourceFileResolver(Path workspaceDir) { + this.workspacePrefix = ResultCollector.toUnixString(workspaceDir) + "/"; + } + + String resolve(Path resultXml) throws IOException { + var resultXmlPath = ResultCollector.toUnixString(resultXml); + var sourceRoot = sourceRoot(resultXmlPath); + if (resultXmlPath.contains("#")) { + return sourceRoot; + } + + var className = className(resultXml); + if (className.isEmpty()) { + return UNKNOWN; + } + + return indexes.computeIfAbsent(sourceRoot, SourceIndex::new).resolve(className); + } + + private String sourceRoot(String resultXmlPath) { + var buildIndex = resultXmlPath.indexOf("/build"); + var projectPath = buildIndex >= 0 ? resultXmlPath.substring(0, buildIndex) : resultXmlPath; + if (projectPath.startsWith(workspacePrefix)) { + projectPath = projectPath.substring(workspacePrefix.length()); + } + return projectPath + "/src"; + } + + private static String className(Path resultXml) { + var fileName = resultXml.getFileName(); + if (fileName == null) { + return ""; + } + + var name = fileName.toString(); + if (name.endsWith(".xml")) { + name = name.substring(0, name.length() - ".xml".length()); + } + + var testPrefix = name.lastIndexOf("TEST-"); + if (testPrefix >= 0) { + name = name.substring(testPrefix + "TEST-".length()); + } + + var packageSeparator = name.lastIndexOf('.'); + if (packageSeparator >= 0) { + name = name.substring(packageSeparator + 1); + } + + var innerClassSeparator = name.lastIndexOf('$'); + if (innerClassSeparator >= 0) { + name = name.substring(innerClassSeparator + 1); + } + return name; + } + + private static final class SourceIndex { + private final String sourceRoot; + private final Map> classLocations = new HashMap<>(); + private boolean indexed; + + private SourceIndex(String sourceRoot) { + this.sourceRoot = sourceRoot; + } + + private String resolve(String className) { + try { + indexIfNecessary(); + } catch (IOException e) { + return UNKNOWN; + } + + var locations = locations(className); + if (locations.isEmpty()) { + return UNKNOWN; + } + + var commonRoot = commonRoot(locations); + if (commonRoot == null) { + return UNKNOWN; + } + return "/" + ResultCollector.toUnixString(commonRoot); + } + + private List locations(String className) { + var locations = new ArrayList(); + for (var entry : classLocations.entrySet()) { + if (entry.getKey().startsWith(className)) { + locations.addAll(entry.getValue()); + } + } + return locations; + } + + private void indexIfNecessary() throws IOException { + if (indexed) { + return; + } + indexed = true; + + var root = Path.of(sourceRoot); + if (!Files.isDirectory(root)) { + return; + } + + try (var paths = Files.walk(root)) { + var iterator = + paths.filter(Files::isRegularFile).filter(SourceIndex::isSourceFile).iterator(); + while (iterator.hasNext()) { + try { + index(iterator.next()); + } catch (IOException ignored) { + // Match grep's best-effort behavior from the old shell implementation. + } + } + } + } + + private static boolean isSourceFile(Path path) { + var fileName = path.getFileName(); + if (fileName == null) { + return false; + } + var name = fileName.toString(); + return name.endsWith(".java") + || name.endsWith(".groovy") + || name.endsWith(".kt") + || name.endsWith(".scala"); + } + + private void index(Path sourceFile) throws IOException { + try (BufferedReader reader = Files.newBufferedReader(sourceFile, StandardCharsets.UTF_8)) { + String line; + while ((line = reader.readLine()) != null) { + var matcher = CLASS_DECLARATION.matcher(line); + while (matcher.find()) { + classLocations + .computeIfAbsent(matcher.group(1), ignored -> new ArrayList<>()) + .add(sourceFile); + } + } + } + } + + private static Path commonRoot(List locations) { + var commonRoot = locations.get(0); + for (var location : locations) { + while (commonRoot != null && !location.startsWith(commonRoot)) { + commonRoot = commonRoot.getParent(); + } + if (commonRoot == null) { + return null; + } + } + return commonRoot.getNameCount() == 0 ? null : commonRoot; + } + } +} diff --git a/.gitlab/collect_results.sh b/.gitlab/collect_results.sh index 36614632481..de404f48513 100755 --- a/.gitlab/collect_results.sh +++ b/.gitlab/collect_results.sh @@ -3,100 +3,13 @@ # Save all important reports and artifacts into (project-root)/results # This folder will be saved by gitlab and available after test runs. -set -e -# Enable '**' support -shopt -s globstar +set -euo pipefail -TEST_RESULTS_DIR=results -WORKSPACE_DIR=workspace -mkdir -p $TEST_RESULTS_DIR -mkdir -p $WORKSPACE_DIR - -# Main project modules redirect their build directory to workspace//build/ in CI -# (see build.gradle.kts layout.buildDirectory override). buildSrc is a separate Gradle build -# that runs before the main build is configured, so this redirect never applies to it; -# its test results always land in buildSrc/**/build/test-results/, not under workspace/. -SEARCH_DIRS=($WORKSPACE_DIR buildSrc) - -mapfile -t TEST_RESULT_DIRS < <(find "${SEARCH_DIRS[@]}" -name test-results -type d) - -if [[ ${#TEST_RESULT_DIRS[@]} -eq 0 ]]; then - echo "No test results found" - exit 0 +java_bin="${JAVA_25_HOME:-}" +if [[ -n "$java_bin" ]]; then + java_bin="$java_bin/bin/java" +else + java_bin="java" fi -function get_source_file () { - file_path="${RESULT_XML_FILE%%"/build"*}" - file_path="${file_path/#"$WORKSPACE_DIR"\//}/src" - if ! [[ $RESULT_XML_FILE == *"#"* ]]; then - class="${RESULT_XML_FILE%.xml}" - class="${class##*"TEST-"}" - class="${class##*"."}" - class="${class##*"$"}" # remove inner class name if it exists - set +e # allow grep to fail - common_root=$(grep -rl "class $class\|static class $class" "$file_path" 2>/dev/null | head -n 1) - set -e - - if [[ -n "$common_root" ]]; then - while IFS= read -r line; do - while [[ $line != "$common_root"* ]]; do - common_root=$(dirname "$common_root") - if [[ "$common_root" == "$common_root/.." ]] || [[ "$common_root" == "/" ]]; then - common_root="" - break - fi - done - done < <(grep -rl "class $class\|static class $class" "$file_path" 2>/dev/null) - - if [[ -n "$common_root" && "$common_root" != "/" ]]; then - file_path="/$common_root" - else - file_path="UNKNOWN" - fi - else - file_path="UNKNOWN" - fi - fi -} - -echo "Saving test results:" -while IFS= read -r -d '' RESULT_XML_FILE -do - echo -n "- $RESULT_XML_FILE" - # Assuming the path looks like that: dd-java-agent/instrumentation/tomcat/tomcat-5.5/build/test-results/forkedTest/TEST-TomcatServletV1ForkedTest.xml - # it will extracts 3 components from the path (counting from the end), to form the new name AGGREGATED_FILE_NAME: - # - # 1. Field 1 (from end): The XML filename itself - # 2. Field 2 (from end): The test suite type (test, forkedTest, etc.) - # 3. Field 5 (from end): The module/subproject name - # - # E.g. for the example path: tomcat-5.5_forkedTest_TEST-TomcatServletV1ForkedTest.xml - AGGREGATED_FILE_NAME=$(echo "$RESULT_XML_FILE" | rev | cut -d "/" -f 1,2,5 | rev | tr "/" "_") - echo -n " as $AGGREGATED_FILE_NAME" - TARGET_DIR="$TEST_RESULTS_DIR" - mkdir -p "$TARGET_DIR" - cp "$RESULT_XML_FILE" "$TARGET_DIR/$AGGREGATED_FILE_NAME" - # Insert file attribute to testcase XML nodes - get_source_file - sed -i "/ Date: Tue, 19 May 2026 19:03:57 -0400 Subject: [PATCH 049/478] Use bitmask SpanKindFilter for per-span eligibility in metrics aggregator (#11380) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trim per-span work on metrics aggregator publish path ConflatingMetricsAggregator.publish does a handful of redundant operations on every span. None individually is large; together they show as ~2.5% on the existing JMH benchmark once the benchmark actually exercises span.kind. - dedup span.isTopLevel(): publish() reads it into a local, then shouldComputeMetric read it again. Pass the cached value in. - resolve spanKind to String once: master called toString() twice per span (once inside spanKindEligible, once at the getPeerTags call site) and used HashSet contains on a CharSequence (which routes through equals on String). Normalize to String up front and reuse. - lazy-allocate the peer-tag list: getPeerTags() always allocated an ArrayList sized to features.peerTags() even when the span had none of those tags set. Defer allocation until the first match; return Collections.emptyList() when none hit. MetricKey already treats null/empty peerTags as emptyList, so no behavior change. Drop the spanKindEligible helper — the HashSet.contains call inlines fine in shouldComputeMetric. Update the JMH benchmark to set span.kind=client on every span. Without it the filter path short-circuits before the peer-tag and toString work, so the wins above aren't measurable. With it: baseline 6.755 us/op (CI [6.560, 6.950], stdev 0.129) optimized 6.585 us/op (CI [6.536, 6.634], stdev 0.033) 2 forks x 5 iterations x 15s. ~2.5% mean improvement and much tighter variance fork-to-fork. Co-Authored-By: Claude Opus 4.7 (1M context) Add SpanKindFilter and CoreSpan.isKind for bitmask-based kind checks Introduce SpanKindFilter -- a tiny builder-built immutable filter whose state is an int bitmask indexed by the span.kind ordinals already cached on DDSpanContext. Each include* on the builder sets one bit (1 << ordinal); the runtime check is a single AND against (1 << span's ordinal). CoreSpan.isKind(SpanKindFilter) is the new entry point. DDSpan overrides it to do the bit-test directly against the cached ordinal -- no virtual call, no tag-map lookup. The two existing test-only CoreSpan impls (SimpleSpan and TraceGenerator.PojoSpan, the latter in two source sets) implement isKind by reading the span.kind tag and delegating to SpanKindFilter.matches(String), which converts via DDSpanContext.spanKindOrdinalOf and does the same AND. Refactor: DDSpanContext.setSpanKindOrdinal(String) now delegates to a new package-private static spanKindOrdinalOf(String) so the same string-to-ordinal mapping serves both the tag interceptor path and SpanKindFilter.matches. This is groundwork -- nothing in the codebase calls isKind yet. The next commit will replace the HashSet-based eligibility checks in ConflatingMetricsAggregator with SpanKindFilter instances. Co-Authored-By: Claude Opus 4.7 (1M context) Use SpanKindFilter in ConflatingMetricsAggregator Replace the two ELIGIBLE_SPAN_KINDS_FOR_* HashSet constants and the SPAN_KIND_INTERNAL.equals check with three SpanKindFilter instances: METRICS_ELIGIBLE_KINDS, PEER_AGGREGATION_KINDS, INTERNAL_KIND. Eligibility checks now go through span.isKind(filter), which on DDSpan is a volatile byte read against the already-cached span.kind ordinal plus a single bit-test. Also defer the span.kind tag read: previously read at the top of the publish loop and threaded through both shouldComputeMetric and the inner publish. isKind no longer needs the string, so the read can move down into the inner publish where it's still needed for the SPAN_KINDS cache key / MetricKey. Supporting changes: - DDSpanContext.spanKindOrdinalOf(String) is now public so non-DDSpan CoreSpan impls can compute the ordinal at tag-write time. - SpanKindFilter gains a public matches(byte) fast-path overload that callers with a pre-computed ordinal use directly. - SimpleSpan caches the ordinal in setTag(SPAN_KIND, ...), mirroring what TagInterceptor does for DDSpanContext, and its isKind now hits the byte fast path. Without this, the JMH benchmark (which uses SimpleSpan) would re-derive the ordinal on every isKind call and overstate the cost. Benchmark on the bench updated last commit (kind=client on every span, 4 forks x 5 iter x 15s): prior commit 6.585 ± 0.049 us/op this commit 6.903 ± 0.096 us/op The slight regression is a SimpleSpan-via-groovy-dispatch artifact -- the interface call to isKind through CoreSpan, then through SimpleSpan, then through SpanKindFilter.matches, doesn't fold as aggressively as a HashSet contains on a static field. In production DDSpan.isKind inlines to a context field read + ordinal byte read + bit-test, so the production path is faster than the prior HashSet approach. A DDSpan-based benchmark would show this; the existing SimpleSpan-based one doesn't. Co-Authored-By: Claude Opus 4.7 (1M context) Add DDSpan-based variant of ConflatingMetricsAggregator JMH benchmark The existing ConflatingMetricsAggregatorBenchmark uses SimpleSpan, a groovy mock. That's enough for measuring queue/CHM/MetricKey work, but it conceals the production cost of CoreSpan.isKind: SimpleSpan's isKind goes through groovy interface dispatch into SpanKindFilter.matches, while DDSpan.isKind inlines to a context byte-read + bit-test. This new benchmark uses real DDSpan instances created through a CoreTracer (with a NoopWriter so finishing doesn't reach the agent). Same shape as the SimpleSpan bench (64-span trace, span.kind=client, peer.hostname set). Numbers (2 forks x 5 iter x 15s): master: 6.428 +- 0.189 us/op (HashSet eligibility checks) this branch: 6.343 +- 0.115 us/op (SpanKindFilter bitmask) About 1.3% faster on the production path. The SimpleSpan benchmark in the same conditions shows a ~2.2% slowdown -- the mock's dispatch shape gives a misleading signal. Co-Authored-By: Claude Opus 4.7 (1M context) Tighten SpanKindFilter encapsulation Make SpanKindFilter.kindMask and its constructor private now that DDSpan.isKind no longer needs direct field access -- it delegates to SpanKindFilter.matches(byte). The Builder.build() in the same outer class still constructs instances via the private constructor. Co-Authored-By: Claude Opus 4.7 (1M context) Merge branch 'master' into dougqh/conflating-metrics-producer-wins Clear span.kind ordinal cache on ledger removal DDSpanContext.setAllTags(TagMap.Ledger) removed tags via unsafeTags.remove(...) without clearing the cached spanKindOrdinal. A builder that set span.kind and then nulled it on the same SpanBuilder (withTag(SPAN_KIND, "client").withTag(SPAN_KIND, null)) left the cached ordinal stale at CLIENT, so the new bitmask eligibility checks counted spans the previous tag-map-based code correctly skipped. Mirror what removeTag(String) already does: when the removal targets SPAN_KIND, reset the cached ordinal to SPAN_KIND_UNSET before forwarding the remove to unsafeTags. Co-Authored-By: Claude Opus 4.7 (1M context) Apply review feedback on SpanKindFilter rollout - CoreSpan.isKind: now a default method that reads span.kind via unsafeGetTag and delegates to SpanKindFilter.matches(String). The three test-only implementations (SimpleSpan + two PojoSpans) no longer need their own copies, and SimpleSpan's spanKindOrdinal cache can go away too. - DDSpan.isKind: keeps the fast path (cached ordinal + bit-test) and now carries an explicit @Override. - DDSpanContext.spanKindOrdinalOf: package-private now that the only remaining caller is SpanKindFilter (same package). - SpanKindFilter: class-level javadoc spelling out the recognized span.kind values and that arbitrary custom strings collapse to SPAN_KIND_CUSTOM and never match — by design. - ConflatingMetricsAggregator: static-import Collections.emptyList / singletonList / singletonMap per project conventions. - ConflatingMetricsAggregatorDDSpanBenchmark: record the rollout result (~1.3% faster on the DDSpan path) in the class javadoc. Co-Authored-By: Claude Opus 4.7 (1M context) Merge branch 'master' into dougqh/conflating-metrics-producer-wins Remove unused Tags import in TraceGenerator Co-Authored-By: Claude Opus 4.7 (1M context) Merge branch 'master' into dougqh/conflating-metrics-producer-wins Merge branch 'master' into dougqh/conflating-metrics-producer-wins Remove unused Tags import from traceAgentTest TraceGenerator codenarcTraceAgentTest flagged the bootstrap.instrumentation.api.Tags import as never referenced. Same fix as f9822a5529 applied earlier to the test/ copy of TraceGenerator. Co-Authored-By: Claude Opus 4.7 (1M context) Co-authored-by: devflow.devflow-routing-intake --- .../ConflatingMetricsAggregatorBenchmark.java | 3 + ...atingMetricsAggregatorDDSpanBenchmark.java | 109 ++++++++++++++++++ .../metrics/ConflatingMetricsAggregator.java | 74 ++++++------ .../java/datadog/trace/core/CoreSpan.java | 6 + .../main/java/datadog/trace/core/DDSpan.java | 5 + .../datadog/trace/core/DDSpanContext.java | 28 +++-- .../datadog/trace/core/SpanKindFilter.java | 70 +++++++++++ .../datadog/trace/core/DDSpanContextTest.java | 20 ++++ 8 files changed, 267 insertions(+), 48 deletions(-) create mode 100644 dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorDDSpanBenchmark.java create mode 100644 dd-trace-core/src/main/java/datadog/trace/core/SpanKindFilter.java diff --git a/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java b/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java index 971ee5cf6e4..b9a2f7f8c54 100644 --- a/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java +++ b/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorBenchmark.java @@ -1,6 +1,8 @@ package datadog.trace.common.metrics; import static datadog.trace.api.ProtocolVersion.V0_4; +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND; +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CLIENT; import static java.util.concurrent.TimeUnit.MICROSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -52,6 +54,7 @@ static List> generateTrace(int len) { final List> trace = new ArrayList<>(); for (int i = 0; i < len; i++) { SimpleSpan span = new SimpleSpan("", "", "", "", true, true, false, 0, 10, -1); + span.setTag(SPAN_KIND, SPAN_KIND_CLIENT); span.setTag("peer.hostname", Strings.random(10)); trace.add(span); } diff --git a/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorDDSpanBenchmark.java b/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorDDSpanBenchmark.java new file mode 100644 index 00000000000..89059857d9c --- /dev/null +++ b/dd-trace-core/src/jmh/java/datadog/trace/common/metrics/ConflatingMetricsAggregatorDDSpanBenchmark.java @@ -0,0 +1,109 @@ +package datadog.trace.common.metrics; + +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND; +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CLIENT; +import static java.util.concurrent.TimeUnit.MICROSECONDS; +import static java.util.concurrent.TimeUnit.SECONDS; + +import datadog.communication.ddagent.DDAgentFeaturesDiscovery; +import datadog.trace.api.WellKnownTags; +import datadog.trace.common.writer.Writer; +import datadog.trace.core.CoreSpan; +import datadog.trace.core.CoreTracer; +import datadog.trace.core.DDSpan; +import datadog.trace.core.monitor.HealthMetrics; +import datadog.trace.util.Strings; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.infra.Blackhole; + +/** + * Parallels {@link ConflatingMetricsAggregatorBenchmark} but uses real {@link DDSpan} instances + * instead of the lightweight {@code SimpleSpan} mock, so the JIT exercises the production {@link + * CoreSpan#isKind} path (cached span.kind ordinal + bit-test) rather than the groovy mock's + * dispatch. + * + *

SpanKindFilter rollout result vs. the pre-bitmask code on master: ~1.3% faster on the + * production path, with tighter fork-to-fork variance. The CIs overlap so the headline number sits + * inside noise, but the centers move the right way and the new path is structurally cheaper (byte + * read + bit-test vs tag-map read + HashSet.contains). + * MacBook M1 (Java 21), 2 forks x 5 iterations x 15s, AverageTime + * + * Branch Score (avg) CI (99.9%) + * master 6.428 ± 0.189 µs/op [6.239, 6.617] + * this branch 6.343 ± 0.115 µs/op [6.228, 6.458] + * + */ +@State(Scope.Benchmark) +@Warmup(iterations = 1, time = 30, timeUnit = SECONDS) +@Measurement(iterations = 3, time = 30, timeUnit = SECONDS) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(MICROSECONDS) +@Fork(value = 1) +public class ConflatingMetricsAggregatorDDSpanBenchmark { + + private static final CoreTracer TRACER = + CoreTracer.builder().writer(new NoopWriter()).strictTraceWrites(false).build(); + + private final DDAgentFeaturesDiscovery featuresDiscovery = + new ConflatingMetricsAggregatorBenchmark.FixedAgentFeaturesDiscovery( + Collections.singleton("peer.hostname"), Collections.emptySet()); + private final ConflatingMetricsAggregator aggregator = + new ConflatingMetricsAggregator( + new WellKnownTags("", "", "", "", "", ""), + Collections.emptySet(), + featuresDiscovery, + HealthMetrics.NO_OP, + new ConflatingMetricsAggregatorBenchmark.NullSink(), + 2048, + 2048, + false); + private final List> spans = generateTrace(64); + + static List> generateTrace(int len) { + final List> trace = new ArrayList<>(); + for (int i = 0; i < len; i++) { + DDSpan span = (DDSpan) TRACER.startSpan("benchmark", "op"); + span.setTag(SPAN_KIND, SPAN_KIND_CLIENT); + span.setTag("peer.hostname", Strings.random(10)); + // Fix duration; bypasses the wall clock and avoids per-fork drift. + span.finishWithDuration(10); + trace.add(span); + } + return trace; + } + + static class NoopWriter implements Writer { + @Override + public void write(List trace) {} + + @Override + public void start() {} + + @Override + public boolean flush() { + return true; + } + + @Override + public void close() {} + + @Override + public void incrementDropCounts(int spanCount) {} + } + + @Benchmark + public void benchmark(Blackhole blackhole) { + blackhole.consume(aggregator.publish(spans)); + } +} diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java index f60edf1d700..69f1932f2d1 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java @@ -7,11 +7,6 @@ import static datadog.trace.bootstrap.instrumentation.api.Tags.HTTP_ENDPOINT; import static datadog.trace.bootstrap.instrumentation.api.Tags.HTTP_METHOD; import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND; -import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CLIENT; -import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CONSUMER; -import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_INTERNAL; -import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_PRODUCER; -import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_SERVER; import static datadog.trace.common.metrics.AggregateMetric.ERROR_TAG; import static datadog.trace.common.metrics.AggregateMetric.TOP_LEVEL_TAG; import static datadog.trace.common.metrics.SignalItem.ReportSignal.REPORT; @@ -19,7 +14,9 @@ import static datadog.trace.util.AgentThreadFactory.AgentThread.METRICS_AGGREGATOR; import static datadog.trace.util.AgentThreadFactory.THREAD_JOIN_TIMOUT_MS; import static datadog.trace.util.AgentThreadFactory.newAgentThread; -import static java.util.Collections.unmodifiableSet; +import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; +import static java.util.Collections.singletonMap; import static java.util.concurrent.TimeUnit.SECONDS; import datadog.common.queue.Queues; @@ -36,12 +33,10 @@ import datadog.trace.common.writer.ddagent.DDAgentApi; import datadog.trace.core.CoreSpan; import datadog.trace.core.DDTraceCoreInfo; +import datadog.trace.core.SpanKindFilter; import datadog.trace.core.monitor.HealthMetrics; import datadog.trace.util.AgentTaskScheduler; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -50,7 +45,6 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.function.Function; -import javax.annotation.Nonnull; import org.jctools.queues.MessagePassingQueue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,7 +54,7 @@ public final class ConflatingMetricsAggregator implements MetricsAggregator, Eve private static final Logger log = LoggerFactory.getLogger(ConflatingMetricsAggregator.class); private static final Map DEFAULT_HEADERS = - Collections.singletonMap(DDAgentApi.DATADOG_META_TRACER_VERSION, DDTraceCoreInfo.VERSION); + singletonMap(DDAgentApi.DATADOG_META_TRACER_VERSION, DDTraceCoreInfo.VERSION); private static final DDCache SERVICE_NAMES = DDCaches.newFixedSizeCache(32); @@ -82,15 +76,19 @@ public final class ConflatingMetricsAggregator implements MetricsAggregator, Eve value -> UTF8BytesString.create(key + ":" + value)); private static final CharSequence SYNTHETICS_ORIGIN = "synthetics"; - private static final Set ELIGIBLE_SPAN_KINDS_FOR_METRICS = - unmodifiableSet( - new HashSet<>( - Arrays.asList( - SPAN_KIND_SERVER, SPAN_KIND_CLIENT, SPAN_KIND_CONSUMER, SPAN_KIND_PRODUCER))); + private static final SpanKindFilter METRICS_ELIGIBLE_KINDS = + SpanKindFilter.builder() + .includeServer() + .includeClient() + .includeProducer() + .includeConsumer() + .build(); - private static final Set ELIGIBLE_SPAN_KINDS_FOR_PEER_AGGREGATION = - unmodifiableSet( - new HashSet<>(Arrays.asList(SPAN_KIND_CLIENT, SPAN_KIND_PRODUCER, SPAN_KIND_CONSUMER))); + private static final SpanKindFilter PEER_AGGREGATION_KINDS = + SpanKindFilter.builder().includeClient().includeProducer().includeConsumer().build(); + + private static final SpanKindFilter INTERNAL_KIND = + SpanKindFilter.builder().includeInternal().build(); private final Set ignoredResources; private final MessagePassingQueue batchPool; @@ -289,8 +287,7 @@ public boolean publish(List> trace) { if (features.supportsMetrics()) { for (CoreSpan span : trace) { boolean isTopLevel = span.isTopLevel(); - final CharSequence spanKind = span.unsafeGetTag(SPAN_KIND, ""); - if (shouldComputeMetric(span, spanKind)) { + if (shouldComputeMetric(span, isTopLevel)) { final CharSequence resourceName = span.getResourceName(); if (resourceName != null && ignoredResources.contains(resourceName.toString())) { // skip publishing all children @@ -298,7 +295,7 @@ public boolean publish(List> trace) { break; } counted++; - forceKeep |= publish(span, isTopLevel, spanKind); + forceKeep |= publish(span, isTopLevel); } } healthMetrics.onClientStatTraceComputed(counted, trace.size(), !forceKeep); @@ -306,19 +303,14 @@ public boolean publish(List> trace) { return forceKeep; } - private boolean shouldComputeMetric(CoreSpan span, @Nonnull CharSequence spanKind) { - return (span.isMeasured() || span.isTopLevel() || spanKindEligible(spanKind)) + private boolean shouldComputeMetric(CoreSpan span, boolean isTopLevel) { + return (span.isMeasured() || isTopLevel || span.isKind(METRICS_ELIGIBLE_KINDS)) && span.getLongRunningVersion() <= 0 // either not long-running or unpublished long-running span && span.getDurationNano() > 0; } - private boolean spanKindEligible(@Nonnull CharSequence spanKind) { - // use toString since it could be a CharSequence... - return ELIGIBLE_SPAN_KINDS_FOR_METRICS.contains(spanKind.toString()); - } - - private boolean publish(CoreSpan span, boolean isTopLevel, CharSequence spanKind) { + private boolean publish(CoreSpan span, boolean isTopLevel) { // Extract HTTP method and endpoint only if the feature is enabled String httpMethod = null; String httpEndpoint = null; @@ -335,6 +327,9 @@ private boolean publish(CoreSpan span, boolean isTopLevel, CharSequence spanK Object grpcStatusObj = span.unsafeGetTag(InstrumentationTags.GRPC_STATUS_CODE); grpcStatusCode = grpcStatusObj != null ? grpcStatusObj.toString() : null; } + // CharSequence default keeps unsafeGetTag's generic at CharSequence so UTF8BytesString + // tag values don't trigger a ClassCastException on the String assignment. + final String spanKind = span.unsafeGetTag(SPAN_KIND, (CharSequence) "").toString(); MetricKey newKey = new MetricKey( span.getResourceName(), @@ -347,7 +342,7 @@ private boolean publish(CoreSpan span, boolean isTopLevel, CharSequence spanK span.getParentId() == 0, SPAN_KINDS.computeIfAbsent( spanKind, UTF8BytesString::create), // save repeated utf8 conversions - getPeerTags(span, spanKind.toString()), + getPeerTags(span), httpMethod, httpEndpoint, grpcStatusCode); @@ -382,35 +377,38 @@ private boolean publish(CoreSpan span, boolean isTopLevel, CharSequence spanK return span.getError() > 0; } - private List getPeerTags(CoreSpan span, String spanKind) { - if (ELIGIBLE_SPAN_KINDS_FOR_PEER_AGGREGATION.contains(spanKind)) { + private List getPeerTags(CoreSpan span) { + if (span.isKind(PEER_AGGREGATION_KINDS)) { final Set eligiblePeerTags = features.peerTags(); - List peerTags = new ArrayList<>(eligiblePeerTags.size()); + List peerTags = null; for (String peerTag : eligiblePeerTags) { Object value = span.unsafeGetTag(peerTag); if (value != null) { final Pair, Function> cacheAndCreator = PEER_TAGS_CACHE.computeIfAbsent(peerTag, PEER_TAGS_CACHE_ADDER); + if (peerTags == null) { + peerTags = new ArrayList<>(eligiblePeerTags.size()); + } peerTags.add( cacheAndCreator .getLeft() .computeIfAbsent(value.toString(), cacheAndCreator.getRight())); } } - return peerTags; - } else if (SPAN_KIND_INTERNAL.equals(spanKind)) { + return peerTags == null ? emptyList() : peerTags; + } else if (span.isKind(INTERNAL_KIND)) { // in this case only the base service should be aggregated if present final Object baseService = span.unsafeGetTag(BASE_SERVICE); if (baseService != null) { final Pair, Function> cacheAndCreator = PEER_TAGS_CACHE.computeIfAbsent(BASE_SERVICE, PEER_TAGS_CACHE_ADDER); - return Collections.singletonList( + return singletonList( cacheAndCreator .getLeft() .computeIfAbsent(baseService.toString(), cacheAndCreator.getRight())); } } - return Collections.emptyList(); + return emptyList(); } private static boolean isSynthetic(CoreSpan span) { diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java index 8c98cbbc58a..a6ced35967c 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java @@ -1,6 +1,7 @@ package datadog.trace.core; import datadog.trace.api.DDTraceId; +import datadog.trace.bootstrap.instrumentation.api.Tags; import java.util.Map; public interface CoreSpan> { @@ -80,6 +81,11 @@ default U unsafeGetTag(CharSequence name) { boolean isForceKeep(); + default boolean isKind(SpanKindFilter filter) { + Object kind = unsafeGetTag(Tags.SPAN_KIND); + return filter.matches(kind == null ? null : kind.toString()); + } + CharSequence getType(); /** diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java index 2c62819e97a..f539ff84e8c 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java @@ -959,6 +959,11 @@ public boolean isOutbound() { return ordinal == DDSpanContext.SPAN_KIND_CLIENT || ordinal == DDSpanContext.SPAN_KIND_PRODUCER; } + @Override + public boolean isKind(SpanKindFilter filter) { + return filter.matches(context.getSpanKindOrdinal()); + } + @Override public void copyPropagationAndBaggage(final AgentSpan source) { if (source instanceof DDSpan) { diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java index f2eb17fe8a2..e7038db5dbe 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java @@ -771,22 +771,26 @@ static boolean tagEquals(String tagValue, String tagLiteral) { * span.kind is set. */ public void setSpanKindOrdinal(String kind) { + spanKindOrdinal = spanKindOrdinalOf(kind); + } + + static byte spanKindOrdinalOf(String kind) { if (kind == null) { - spanKindOrdinal = SPAN_KIND_UNSET; + return SPAN_KIND_UNSET; } else if (tagEquals(kind, Tags.SPAN_KIND_SERVER)) { - spanKindOrdinal = SPAN_KIND_SERVER; + return SPAN_KIND_SERVER; } else if (tagEquals(kind, Tags.SPAN_KIND_CLIENT)) { - spanKindOrdinal = SPAN_KIND_CLIENT; + return SPAN_KIND_CLIENT; } else if (tagEquals(kind, Tags.SPAN_KIND_PRODUCER)) { - spanKindOrdinal = SPAN_KIND_PRODUCER; + return SPAN_KIND_PRODUCER; } else if (tagEquals(kind, Tags.SPAN_KIND_CONSUMER)) { - spanKindOrdinal = SPAN_KIND_CONSUMER; + return SPAN_KIND_CONSUMER; } else if (tagEquals(kind, Tags.SPAN_KIND_INTERNAL)) { - spanKindOrdinal = SPAN_KIND_INTERNAL; + return SPAN_KIND_INTERNAL; } else if (tagEquals(kind, Tags.SPAN_KIND_BROKER)) { - spanKindOrdinal = SPAN_KIND_BROKER; + return SPAN_KIND_BROKER; } else { - spanKindOrdinal = SPAN_KIND_CUSTOM; + return SPAN_KIND_CUSTOM; } } @@ -1048,12 +1052,16 @@ void setAllTags(final TagMap.Ledger ledger) { synchronized (unsafeTags) { for (final TagMap.EntryChange entryChange : ledger) { + String tag = entryChange.tag(); if (entryChange.isRemoval()) { - unsafeTags.remove(entryChange.tag()); + if (tagEquals(tag, Tags.SPAN_KIND)) { + // mirror removeTag(String): keep the cached ordinal in sync with unsafeTags + spanKindOrdinal = SPAN_KIND_UNSET; + } + unsafeTags.remove(tag); } else { TagMap.Entry entry = (TagMap.Entry) entryChange; - String tag = entry.tag(); Object value = entry.objectValue(); if (!tagInterceptor.interceptTag(this, tag, value)) { diff --git a/dd-trace-core/src/main/java/datadog/trace/core/SpanKindFilter.java b/dd-trace-core/src/main/java/datadog/trace/core/SpanKindFilter.java new file mode 100644 index 00000000000..bc236768c26 --- /dev/null +++ b/dd-trace-core/src/main/java/datadog/trace/core/SpanKindFilter.java @@ -0,0 +1,70 @@ +package datadog.trace.core; + +/** + * Bitmask-based eligibility test over the six recognized {@code span.kind} values (server, client, + * producer, consumer, internal, broker). A filter is built once via {@link #builder()} and then + * applied per span by either matching a cached kind ordinal (fast path on {@link DDSpan}) or + * looking up the {@code span.kind} tag (default path on {@link CoreSpan#isKind}). + * + *

Arbitrary {@code span.kind} strings outside the six recognized values collapse to {@link + * DDSpanContext#SPAN_KIND_CUSTOM} and never match — by design. Callers that need custom-string + * matching should read the tag directly via {@link CoreSpan#unsafeGetTag} instead. + */ +public final class SpanKindFilter { + public static final class Builder { + private int kindMask; + + public Builder includeServer() { + return this.include(DDSpanContext.SPAN_KIND_SERVER); + } + + public Builder includeClient() { + return this.include(DDSpanContext.SPAN_KIND_CLIENT); + } + + public Builder includeProducer() { + return this.include(DDSpanContext.SPAN_KIND_PRODUCER); + } + + public Builder includeConsumer() { + return this.include(DDSpanContext.SPAN_KIND_CONSUMER); + } + + public Builder includeInternal() { + return this.include(DDSpanContext.SPAN_KIND_INTERNAL); + } + + public Builder includeBroker() { + return this.include(DDSpanContext.SPAN_KIND_BROKER); + } + + public final SpanKindFilter build() { + return new SpanKindFilter(this.kindMask); + } + + private Builder include(int spanKindConstant) { + this.kindMask |= (1 << spanKindConstant); + return this; + } + } + + public static final Builder builder() { + return new Builder(); + } + + private final int kindMask; + + private SpanKindFilter(int kindMask) { + this.kindMask = kindMask; + } + + /** Test whether a span with the given span.kind string passes this filter. */ + public boolean matches(String spanKind) { + return matches(DDSpanContext.spanKindOrdinalOf(spanKind)); + } + + /** Fast-path test for callers that already hold the span's cached kind ordinal. */ + public boolean matches(byte spanKindOrdinal) { + return (kindMask & (1 << spanKindOrdinal)) != 0; + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java index d9e60264b7d..4185c9acdab 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/DDSpanContextTest.java @@ -450,6 +450,26 @@ void setSpanKindOrdinalRoundTripsWithSpanKindValues( span.finish(); } + @Test + void builderLedgerRemovalOfSpanKindClearsCachedOrdinal() { + // Setting then nulling span.kind on the same builder routes through + // setAllTags(TagMap.Ledger) at construction time. The removal path must + // keep the cached ordinal in sync with unsafeTags, otherwise eligibility + // checks that read the cached byte see a stale kind. + AgentSpan span = + tracer + .buildSpan("datadog", "test") + .withTag(SPAN_KIND, Tags.SPAN_KIND_CLIENT) + .withTag(SPAN_KIND, (Object) null) + .start(); + DDSpanContext context = (DDSpanContext) span.context(); + + assertNull(context.getTag(SPAN_KIND)); + assertEquals(DDSpanContext.SPAN_KIND_UNSET, context.getSpanKindOrdinal()); + + span.finish(); + } + @TypeConverter public static int toInt(String value) { if (value == null) { From c2e8fe043124b84b1fc86f60312ba6aa6c9768c8 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Tue, 19 May 2026 22:41:11 -0400 Subject: [PATCH 050/478] Remove Tyrus version pin in jakarta-websocket latestDepTest introduced in #10846 (#10859) Remove Tyrus version pin in jakarta-websocket latestDepTest Merge branch 'master' into alexeyk/revert-grizzly-bom-fix Idiomatic way to skip broken dependencies. Merge branch 'master' into alexeyk/revert-grizzly-bom-fix Co-authored-by: alexey.kuznetsov --- .../websocket/jakarta-websocket-2.0/build.gradle | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle index 326c397a648..8b3bacba81f 100644 --- a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle @@ -22,10 +22,12 @@ dependencies { testRuntimeOnly project(":dd-java-agent:instrumentation:websocket:javax-websocket-1.0") testImplementation group: 'org.glassfish.tyrus', name: 'tyrus-container-inmemory', version: '2.0.0' - // `tyrus 2.3.0-M1` pulls `grizzly 5.0.0`, whose POM imports a missing `grizzly-bom 5.0.0-SNAPSHOT`. - // See issue: https://github.com/eclipse-ee4j/glassfish-grizzly/issues/2278 - // This fix must be revisited once correct version of `grizzly-bom` will be released. - latestDepTestImplementation group: 'org.glassfish.tyrus', name: 'tyrus-container-inmemory', version: '2.2.+' + latestDepTestImplementation(group: 'org.glassfish.tyrus', name: 'tyrus-container-inmemory', version: '+') { + version { + reject '2.3.0-M1' + } + because 'Tyrus 2.3.0-M1 depends on broken Grizzly 5.0.0 POM metadata' + } } tasks.named('latestDepTest', Test) { From 5181a21ffc64507772342579647a8c6788415ec7 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 20 May 2026 08:33:32 +0200 Subject: [PATCH 051/478] Make `Config` / `InstrumenterConfig` modifiable via a load-time test agent (#11397) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test: replace WithConfigExtension's retransform agent with a premain agent The JUnit 5 WithConfigExtension used ByteBuddy retransformation at @BeforeAll to make Config and InstrumenterConfig INSTANCE fields public/volatile/non-final. Retransformation is not guaranteed when the class has been loaded before the extension runs (e.g. through CoreTracer), which caused intermittent failures on at least HotSpot 1.8, IBM J9, and OpenJ9 Semeru jobs. This commit switches to a load-time javaagent that rewrites the INSTANCE fields upon class cload. It introduces in particular `dd-trace-java.modifiable-config` convention plugin whose role is to configure the test jvm with the java agent to every Test task. This convention plugin is applied automatically via dd-trace-java.configure-tests which is itself applied via java_no_deps.gradle. `WithConfigExtension` no longer installs a ByteBuddy agent programmatically; instead it just verifies the fields are already modifiable. refactor: simplify WithConfigExtension now that load-time agent guarantees writable Config fields With modifiable-config-agent attached to every test JVM, the `INSTANCE` fields of `Config` and `InstrumenterConfig` are always `public`/`volatile`/non-`final` by the time `WithConfigExtension` is loaded. The runtime state machine that previously guarded the ByteBuddy retransform is therefore dead code. Collapse it: - Move reflective lookups of the INSTANCE fields and default constructors into a static {} block that first calls ensureConfigInstrumentationHasBeenApplied() and then caches the handles as static finals. Failure throws ExceptionInInitializerError, which surfaces as a clear test-class load failure pointing at the Gradle convention plugin. - Remove the isConfigInstanceModifiable / configModificationFailed / configTransformerInstalled flags and every guard they fed. - Drop makeConfigInstanceModifiable(), checkConfigTransformation(), and checkWritable() — all redundant with the static-init check. - Drop the corresponding JUnit assert* static imports. - beforeAll/beforeEach/afterEach/afterAll now call rebuildConfig() unconditionally. - Update the class Javadoc to reflect the new mechanism. Co-Authored-By: Claude ci: trigger non-default JVM tests [ci: NON_DEFAULT_JVMS] Co-Authored-By: Claude Opus 4.7 (1M context) revert: Mark PendingTraceBufferTest tests flaky (#11383) chore: make spotless happy [ci: NON_DEFAULT_JVMS] fix(build): skip modifiable-config agent when Test JVM already has -javaagent The `dd-trace-java.modifiable-config` convention plugin unconditionally attached a second `-javaagent:modifiable-config-agent.jar` to every Test JVM. That breaks the few modules whose tests already launch with the real dd-java-agent attached (currently only `:dd-java-agent`'s integration tests, via the `doFirst` at `dd-java-agent/build.gradle:454-457`): * `AgentBootstrap.installAgentJar` tries the class' CodeSource first, then `getAgentFileFromJavaagentArg`, then a ClassLoader-resource lookup. On the failing matrix the CodeSource is null for the bootstrap class, so it falls through to the `-javaagent:` arg. * `getAgentFileFromJavaagentArg` refuses to pick when more than one `-javaagent:` is present ("multiple javaagents specified") and returns null. * The ClassLoader fallback then throws `IllegalArgumentException: URI is not absolute` for the bootstrap class URL. Net effect: the tracing agent never installs and suites like `OpenTracingTest` / `ShadowPackageRenamingTest` fail across non-default JVMs (ibm8, semeru11/17, zulu11, tip). Alternatives considered and rejected: * Manifest scan in `getAgentFileFromJavaagentArg` to pick the entry whose `Main-Class` is `AgentBootstrap`: meaningful bootstrap- performance cost (open every `-javaagent:` jar, read MANIFEST.MF) on a hot path that runs on every JVM startup. * `-Ddd.agent.jar.path` / `DD_AGENT_JAR_PATH`: no equivalent knob exists today, adds an attacker-controllable file path, and only helps when the CLI is already ambiguous — not worth the surface. Skipping is safe for `:dd-java-agent`'s tests: nothing under `dd-java-agent/src/test` (Java or Groovy) references `Config` / `InstrumenterConfig` `INSTANCE`, and nothing uses `WithConfigExtension`. The tests rely on the real agent's startup to populate `Config.INSTANCE`, not on swapping the singleton mid-test. Implementation: defer the attach to a `doFirst` that inspects `allJvmArgs` for an existing non-modifiable-config `-javaagent:` entry. Gradle prepends each new `doFirst`, so the plugin's check runs after the project's own agent-attach `doFirst` and sees the real arg before the JVM forks. When skipping, emit an `INFO`-level log so the decision is visible under `--info`. [ci: NON_DEFAULT_JVMS] Co-Authored-By: Claude Opus 4.7 (1M context) Increase timeout to pass for ibm8 filling the delaying buffer for test bufferFullYieldsImmediateWrite takes more than 5 seconds on ibm8 and CI [ci: NON_DEFAULT_JVMS] Merge branch 'master' into bdu/moves-with-config-extension-agent-to-commandline-via-convention-plugin Co-authored-by: jpbempel Co-authored-by: devflow.devflow-routing-intake --- buildSrc/build.gradle.kts | 1 + .../modifiable-config-agent/build.gradle.kts | 41 ++++ .../test/config/ModifiableConfigAgent.java | 80 ++++++++ buildSrc/settings.gradle.kts | 1 + .../dd-trace-java.configure-tests.gradle.kts | 4 + ...dd-trace-java.modifiable-config.gradle.kts | 42 +++++ .../trace/core/PendingTraceBufferTest.java | 6 +- utils/junit-utils/build.gradle.kts | 2 - .../utils/config/WithConfigExtension.java | 178 ++++-------------- 9 files changed, 211 insertions(+), 144 deletions(-) create mode 100644 buildSrc/modifiable-config-agent/build.gradle.kts create mode 100644 buildSrc/modifiable-config-agent/src/main/java/datadog/trace/agent/test/config/ModifiableConfigAgent.java create mode 100644 buildSrc/src/main/kotlin/dd-trace-java.modifiable-config.gradle.kts diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index b1be2144929..5d1ef60c3db 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -101,6 +101,7 @@ dependencies { tasks.compileKotlin { dependsOn(":call-site-instrumentation-plugin:build") + dependsOn(":modifiable-config-agent:build") } testing { diff --git a/buildSrc/modifiable-config-agent/build.gradle.kts b/buildSrc/modifiable-config-agent/build.gradle.kts new file mode 100644 index 00000000000..ddef5f7b008 --- /dev/null +++ b/buildSrc/modifiable-config-agent/build.gradle.kts @@ -0,0 +1,41 @@ +plugins { + java + id("com.gradleup.shadow") version "8.3.9" +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +apply { + from("$rootDir/../gradle/repositories.gradle") +} + +dependencies { + implementation(libs.asm) +} + +tasks { + shadowJar { + archiveClassifier.set("") + relocate("org.objectweb.asm", "datadog.trace.agent.test.config.shaded.asm") + manifest { + attributes( + mapOf( + "Premain-Class" to "datadog.trace.agent.test.config.ModifiableConfigAgent", + "Can-Retransform-Classes" to "false", + "Can-Redefine-Classes" to "false", + ), + ) + } + } + + jar { + enabled = false + } + + build { + dependsOn(shadowJar) + } +} diff --git a/buildSrc/modifiable-config-agent/src/main/java/datadog/trace/agent/test/config/ModifiableConfigAgent.java b/buildSrc/modifiable-config-agent/src/main/java/datadog/trace/agent/test/config/ModifiableConfigAgent.java new file mode 100644 index 00000000000..08c216fb905 --- /dev/null +++ b/buildSrc/modifiable-config-agent/src/main/java/datadog/trace/agent/test/config/ModifiableConfigAgent.java @@ -0,0 +1,80 @@ +package datadog.trace.agent.test.config; + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.IllegalClassFormatException; +import java.lang.instrument.Instrumentation; +import java.security.ProtectionDomain; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Opcodes; + +/** + * Test-only Java agent that rewrites the {@code INSTANCE} field of {@code + * datadog.trace.api.Config} and {@code datadog.trace.api.InstrumenterConfig} to be public, + * volatile, and non-final, so tests can swap the singleton with a freshly-built instance. + * + *

Unlike a JUnit 5 extension that uses ByteBuddy to retransform the classes, this agent runs + * before any class is loaded, so the rewrite is guaranteed regardless of which class touches the + * config first. + */ +public final class ModifiableConfigAgent { + + private static final String CONFIG = "datadog/trace/api/Config"; + private static final String INST_CONFIG = "datadog/trace/api/InstrumenterConfig"; + private static final String INSTANCE = "INSTANCE"; + + private ModifiableConfigAgent() {} + + public static void premain(String args, Instrumentation inst) { + inst.addTransformer(new InstanceFieldRewriter(), false); + } + + static final class InstanceFieldRewriter implements ClassFileTransformer { + @Override + public byte[] transform( + ClassLoader loader, + String className, + Class classBeingRedefined, + ProtectionDomain protectionDomain, + byte[] classfileBuffer) + throws IllegalClassFormatException { + if (className == null) { + return null; + } + if (!CONFIG.equals(className) && !INST_CONFIG.equals(className)) { + return null; + } + try { + ClassReader reader = new ClassReader(classfileBuffer); + ClassWriter writer = new ClassWriter(reader, 0); + reader.accept(new InstanceFieldClassVisitor(writer), 0); + return writer.toByteArray(); + } catch (Throwable t) { + System.err.println( + "[modifiable-config-agent] failed to rewrite " + className + ": " + t); + return null; + } + } + } + + static final class InstanceFieldClassVisitor extends ClassVisitor { + InstanceFieldClassVisitor(ClassVisitor cv) { + super(Opcodes.ASM9, cv); + } + + @Override + public FieldVisitor visitField( + int access, String name, String descriptor, String signature, Object value) { + if (INSTANCE.equals(name)) { + int rewritten = + (access & ~(Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED | Opcodes.ACC_FINAL)) + | Opcodes.ACC_PUBLIC + | Opcodes.ACC_VOLATILE; + return super.visitField(rewritten, name, descriptor, signature, value); + } + return super.visitField(access, name, descriptor, signature, value); + } + } +} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts index a59a99083c0..0e2e0c39655 100644 --- a/buildSrc/settings.gradle.kts +++ b/buildSrc/settings.gradle.kts @@ -1,4 +1,5 @@ include(":call-site-instrumentation-plugin") +include(":modifiable-config-agent") dependencyResolutionManagement { versionCatalogs { diff --git a/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts b/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts index ad1d0a2d6ab..ccd25ab6697 100644 --- a/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts +++ b/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts @@ -10,6 +10,10 @@ import org.gradle.testing.base.TestingExtension import java.time.Duration import java.time.temporal.ChronoUnit +plugins { + id("dd-trace-java.modifiable-config") +} + // Need concrete implementation of BuildService in Kotlin abstract class ForkedTestLimit : BuildService // Forked tests will fail with OOM if the memory is set too high. Gitlab allows at least a limit of 3. diff --git a/buildSrc/src/main/kotlin/dd-trace-java.modifiable-config.gradle.kts b/buildSrc/src/main/kotlin/dd-trace-java.modifiable-config.gradle.kts new file mode 100644 index 00000000000..047b64d326d --- /dev/null +++ b/buildSrc/src/main/kotlin/dd-trace-java.modifiable-config.gradle.kts @@ -0,0 +1,42 @@ +import org.gradle.api.tasks.testing.Test +import org.gradle.kotlin.dsl.withType + +/** + * Attaches the modifiable-config Java agent to every Test task so that + * `datadog.trace.api.Config` and `datadog.trace.api.InstrumenterConfig` have + * their `INSTANCE` field rewritten as public/volatile/non-final at load time. + * + * This is the load-time counterpart to + * `datadog.trace.junit.utils.config.WithConfigExtension`, which uses ByteBuddy + * to retransform the same classes at runtime. Retransformation does not always + * succeed when the class has been touched before the JUnit lifecycle starts + * (e.g. through `CoreTracer`); the agent guarantees the rewrite by intercepting + * the class before it is defined. + * + * The agent jar is built by the `:modifiable-config-agent` buildSrc subproject + * and is produced eagerly because the parent `buildSrc` compilation depends on + * it. + */ +val agentJar = rootProject.layout.projectDirectory + .file("buildSrc/modifiable-config-agent/build/libs/modifiable-config-agent.jar") + .asFile + +tasks.withType().configureEach { + inputs.file(agentJar).withPathSensitivity(org.gradle.api.tasks.PathSensitivity.NONE) + // Attach lazily so we can skip when the Test JVM already has another -javaagent. + // doFirst prepends, so this runs after any -javaagent registered later via doFirst. + doFirst { + val foreignAgent = allJvmArgs.firstOrNull { + it.startsWith("-javaagent:") && !it.contains("modifiable-config-agent") + } + if (foreignAgent != null) { + logger.info( + "[modifiable-config] skipping attach for {} — another -javaagent already present: {}", + path, + foreignAgent, + ) + } else { + jvmArgs("-javaagent:${agentJar.absolutePath}") + } + } +} diff --git a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java index fd794bb2231..f64eb105be8 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/PendingTraceBufferTest.java @@ -35,7 +35,6 @@ import datadog.trace.core.propagation.PropagationTags; import datadog.trace.core.scopemanager.ContinuableScopeManager; import datadog.trace.test.util.DDJavaSpecification; -import datadog.trace.test.util.Flaky; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -57,7 +56,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; -@Timeout(5) +@Timeout(10) public class PendingTraceBufferTest extends DDJavaSpecification { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -196,7 +195,6 @@ void prioritySamplingIsAlwaysSent() { assertTrue(metadataChecker.hasSamplingPriority); } - @Flaky("Flaky on ibm8, semeru8, and semeru17 JVMs after migration from Groovy to JUnit") @Test void bufferFullYieldsImmediateWrite() { int capacity = delayingBuffer.getQueue().capacity(); @@ -221,7 +219,6 @@ void bufferFullYieldsImmediateWrite() { assertEquals(0, pendingTrace.getIsEnqueued()); } - @Flaky("Flaky on ibm8, semeru8, and semeru17 JVMs after migration from Groovy to JUnit") @Test void longRunningTraceBufferFullDoesNotTriggerWrite() { int capacity = delayingBuffer.getQueue().capacity(); @@ -381,7 +378,6 @@ public boolean writeOnBufferFull() { assertEquals(3, counter.get()); } - @Flaky("Flaky on semeru17 JVM after migration from Groovy to JUnit") @Test void samePendingTraceIsNotEnqueuedMultipleTimes() { when(tracer.getPartialFlushMinSpans()).thenReturn(10000); diff --git a/utils/junit-utils/build.gradle.kts b/utils/junit-utils/build.gradle.kts index f30b2ebca87..21b6087f968 100644 --- a/utils/junit-utils/build.gradle.kts +++ b/utils/junit-utils/build.gradle.kts @@ -5,8 +5,6 @@ plugins { apply(from = "$rootDir/gradle/java.gradle") dependencies { - api(libs.bytebuddy) - api(libs.bytebuddyagent) api(libs.forbiddenapis) api(project(":components:environment")) diff --git a/utils/junit-utils/src/main/java/datadog/trace/junit/utils/config/WithConfigExtension.java b/utils/junit-utils/src/main/java/datadog/trace/junit/utils/config/WithConfigExtension.java index 82f1b2214b7..416ba4e97ad 100644 --- a/utils/junit-utils/src/main/java/datadog/trace/junit/utils/config/WithConfigExtension.java +++ b/utils/junit-utils/src/main/java/datadog/trace/junit/utils/config/WithConfigExtension.java @@ -1,21 +1,8 @@ package datadog.trace.junit.utils.config; -import static net.bytebuddy.agent.builder.AgentBuilder.RedefinitionStrategy.Listener.ErrorEscalating.FAIL_FAST; -import static net.bytebuddy.agent.builder.AgentBuilder.RedefinitionStrategy.RETRANSFORMATION; -import static net.bytebuddy.description.modifier.FieldManifestation.VOLATILE; -import static net.bytebuddy.description.modifier.Ownership.STATIC; -import static net.bytebuddy.description.modifier.Visibility.PUBLIC; -import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; -import static net.bytebuddy.matcher.ElementMatchers.none; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import datadog.environment.EnvironmentVariables; import de.thetaphi.forbiddenapis.SuppressForbidden; import edu.umd.cs.findbugs.annotations.NonNull; -import java.lang.instrument.Instrumentation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; @@ -24,11 +11,6 @@ import java.util.List; import java.util.Map; import java.util.Properties; -import net.bytebuddy.agent.ByteBuddyAgent; -import net.bytebuddy.agent.builder.AgentBuilder; -import net.bytebuddy.dynamic.ClassFileLocator; -import net.bytebuddy.dynamic.Transformer; -import net.bytebuddy.utility.JavaModule; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; @@ -40,7 +22,9 @@ * JUnit 5 extension that manages DD config injection for tests. Handles: * *