From 48d3cb7ee5def0bac04b391b0234544b0370059c Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Thu, 25 Sep 2025 15:53:31 +0800 Subject: [PATCH 1/6] fix async eventbus traceId 00000 --- .../ignore/AdditionalLibraryIgnoredTypesConfigurer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java index 5bc4e05babd4..02e4c5039cd3 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java @@ -250,7 +250,8 @@ public void configure(IgnoredTypesBuilder builder) { .ignoreClass("com.google.common.") .allowClass("com.google.common.util.concurrent.") .allowClass("com.google.common.base.internal.Finalizer") - .allowClass("com.google.common.base.Java8Usage$$Lambda"); + .allowClass("com.google.common.base.Java8Usage$$Lambda") + .allowClass("com.google.common.eventbus.Subscriber$"); builder .ignoreClass("com.google.inject.") From 30b591a65a3017569c6a99635b59ef2809d4d0ea Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Sun, 28 Sep 2025 10:46:14 +0800 Subject: [PATCH 2/6] test for async event bus --- .../guava/v10_0/AsyncEventBusTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java diff --git a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java new file mode 100644 index 000000000000..912d9fd3e67d --- /dev/null +++ b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java @@ -0,0 +1,34 @@ +package io.opentelemetry.javaagent.instrumentation.guava.v10_0; + +import com.google.common.eventbus.AsyncEventBus; +import com.google.common.eventbus.Subscribe; +import io.opentelemetry.api.trace.Span; +import org.junit.jupiter.api.Test; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class AsyncEventBusTest { + + static final ExecutorService executor = Executors.newSingleThreadExecutor(); + + static final AsyncEventBus asyncEventBus = new AsyncEventBus(executor); + + @Test + void testAsyncEventBusTakeEffect() { + String traceId = Span.current().getSpanContext().getTraceId(); + + class EventListener { + @Subscribe + public void handleEvent(String event) { + String eventTraceId = Span.current().getSpanContext().getTraceId(); + assertThat(eventTraceId).isNotEqualTo("00000000000000000000000000000000"); + assertThat(eventTraceId).isEqualTo(traceId); + } + } + + asyncEventBus.register(new EventListener()); + asyncEventBus.post("Hello, AsyncEventBus!"); + } +} From fdff8244639dbee611f3ee1959ef186b756316a7 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Sun, 28 Sep 2025 15:09:26 +0800 Subject: [PATCH 3/6] event bus testcase --- .../guava/v10_0/AsyncEventBusTest.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java index 912d9fd3e67d..ba4b19a49bff 100644 --- a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java +++ b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java @@ -3,7 +3,10 @@ import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.Subscribe; import io.opentelemetry.api.trace.Span; +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -11,24 +14,45 @@ public class AsyncEventBusTest { + @RegisterExtension + static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + static final ExecutorService executor = Executors.newSingleThreadExecutor(); static final AsyncEventBus asyncEventBus = new AsyncEventBus(executor); @Test void testAsyncEventBusTakeEffect() { - String traceId = Span.current().getSpanContext().getTraceId(); + class Listener { + String receivedTraceId; - class EventListener { @Subscribe - public void handleEvent(String event) { - String eventTraceId = Span.current().getSpanContext().getTraceId(); - assertThat(eventTraceId).isNotEqualTo("00000000000000000000000000000000"); - assertThat(eventTraceId).isEqualTo(traceId); + public void onEvent(String event) { + testing.runWithSpan("listener", () -> { + receivedTraceId = Span.current().getSpanContext().getTraceId(); + }); } } - asyncEventBus.register(new EventListener()); - asyncEventBus.post("Hello, AsyncEventBus!"); + Listener listener = new Listener(); + asyncEventBus.register(listener); + + String[] parentTraceId = new String[1]; + testing.runWithSpan("parent", () -> { + parentTraceId[0] = Span.current().getSpanContext().getTraceId(); + asyncEventBus.post("test"); + }); + + testing.waitAndAssertTraces( + trace + -> trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent"), + span -> span.hasName("listener") + )); + + assertThat(listener.receivedTraceId) + .isNotNull() + .isNotEqualTo("00000000000000000000000000000000") + .isEqualTo(parentTraceId[0]); } } From 5d9d3cd895118f4cda9c755498367c58c8e01f73 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Sun, 28 Sep 2025 15:12:53 +0800 Subject: [PATCH 4/6] fix --- .../instrumentation/guava/v10_0/AsyncEventBusTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java index ba4b19a49bff..35807f970ad6 100644 --- a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java +++ b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java @@ -1,16 +1,16 @@ package io.opentelemetry.javaagent.instrumentation.guava.v10_0; +import static org.assertj.core.api.Assertions.assertThat; + import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.Subscribe; import io.opentelemetry.api.trace.Span; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; - -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; public class AsyncEventBusTest { From 91a604d2b34649837effc573f5aef382fbff94a2 Mon Sep 17 00:00:00 2001 From: otelbot <197425009+otelbot@users.noreply.github.com> Date: Sun, 28 Sep 2025 07:19:58 +0000 Subject: [PATCH 5/6] ./gradlew spotlessApply --- .../guava/v10_0/AsyncEventBusTest.java | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java index 35807f970ad6..0c1a312d1d64 100644 --- a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java +++ b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java @@ -1,3 +1,8 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.guava.v10_0; import static org.assertj.core.api.Assertions.assertThat; @@ -28,9 +33,11 @@ class Listener { @Subscribe public void onEvent(String event) { - testing.runWithSpan("listener", () -> { - receivedTraceId = Span.current().getSpanContext().getTraceId(); - }); + testing.runWithSpan( + "listener", + () -> { + receivedTraceId = Span.current().getSpanContext().getTraceId(); + }); } } @@ -38,17 +45,17 @@ public void onEvent(String event) { asyncEventBus.register(listener); String[] parentTraceId = new String[1]; - testing.runWithSpan("parent", () -> { - parentTraceId[0] = Span.current().getSpanContext().getTraceId(); - asyncEventBus.post("test"); - }); + testing.runWithSpan( + "parent", + () -> { + parentTraceId[0] = Span.current().getSpanContext().getTraceId(); + asyncEventBus.post("test"); + }); testing.waitAndAssertTraces( - trace - -> trace.hasSpansSatisfyingExactly( - span -> span.hasName("parent"), - span -> span.hasName("listener") - )); + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent"), span -> span.hasName("listener"))); assertThat(listener.receivedTraceId) .isNotNull() From 0377f5c0477cf55d07fd7d9ce083f7f9bf210b3c Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 29 Sep 2025 13:51:00 +0300 Subject: [PATCH 6/6] review --- .../guava/v10_0/AsyncEventBusTest.java | 31 +++---------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java index 0c1a312d1d64..6b28bcaf91f5 100644 --- a/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java +++ b/instrumentation/guava-10.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/AsyncEventBusTest.java @@ -5,11 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.guava.v10_0; -import static org.assertj.core.api.Assertions.assertThat; - import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.Subscribe; -import io.opentelemetry.api.trace.Span; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import java.util.concurrent.ExecutorService; @@ -17,49 +14,31 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -public class AsyncEventBusTest { +class AsyncEventBusTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); static final ExecutorService executor = Executors.newSingleThreadExecutor(); - static final AsyncEventBus asyncEventBus = new AsyncEventBus(executor); @Test - void testAsyncEventBusTakeEffect() { + void contextPropagation() { class Listener { - String receivedTraceId; @Subscribe public void onEvent(String event) { - testing.runWithSpan( - "listener", - () -> { - receivedTraceId = Span.current().getSpanContext().getTraceId(); - }); + testing.runWithSpan("listener", () -> {}); } } - Listener listener = new Listener(); - asyncEventBus.register(listener); + asyncEventBus.register(new Listener()); - String[] parentTraceId = new String[1]; - testing.runWithSpan( - "parent", - () -> { - parentTraceId[0] = Span.current().getSpanContext().getTraceId(); - asyncEventBus.post("test"); - }); + testing.runWithSpan("parent", () -> asyncEventBus.post("test")); testing.waitAndAssertTraces( trace -> trace.hasSpansSatisfyingExactly( span -> span.hasName("parent"), span -> span.hasName("listener"))); - - assertThat(listener.receivedTraceId) - .isNotNull() - .isNotEqualTo("00000000000000000000000000000000") - .isEqualTo(parentTraceId[0]); } }