diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ffec508a0b..4e08acb84b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +### Unreleased + +### Fixes + +- Do not store No-Op scopes onto OpenTelemetry Context when wrapping ([#4631](https://github.com/getsentry/sentry-java/pull/4631)) + - In 8.18.0 and 8.19.0 the SDK could break when initialized too late. + ## 8.19.0 ### Features diff --git a/codecov.yml b/codecov.yml index bbb853b3556..9b1af61b4c6 100644 --- a/codecov.yml +++ b/codecov.yml @@ -8,7 +8,7 @@ coverage: project: default: target: 78% - threshold: 3% + threshold: 4% patch: off range: 78...100 precision: 3 diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java index 1b0581fc9e2..e4a3d9d4c02 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java @@ -47,7 +47,11 @@ private boolean isOpentelemetrySpan(final @NotNull ContextKey contextKey) if (sentrySpan != null) { forkedScopes.setActiveSpan(sentrySpan); } - return context.with(SENTRY_SCOPES_KEY, forkedScopes); + if (forkedScopes.isNoOp()) { + return context; + } else { + return context.with(SENTRY_SCOPES_KEY, forkedScopes); + } } private static @NotNull IScopes forkCurrentScopeInternal( diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/test/kotlin/io/sentry/opentelemetry/SentryContextWrapperTest.kt b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/test/kotlin/io/sentry/opentelemetry/SentryContextWrapperTest.kt new file mode 100644 index 00000000000..c0647cd9c01 --- /dev/null +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/test/kotlin/io/sentry/opentelemetry/SentryContextWrapperTest.kt @@ -0,0 +1,20 @@ +package io.sentry.opentelemetry + +import io.opentelemetry.context.Context +import io.sentry.Sentry +import io.sentry.opentelemetry.SentryOtelKeys.SENTRY_SCOPES_KEY +import junit.framework.TestCase.assertNull +import junit.framework.TestCase.assertTrue +import kotlin.test.Test + +class SentryContextWrapperTest { + + @Test + fun `ensure noop scopes are not stored on Context`() { + val context = Context.root() + assertNull(context.get(SENTRY_SCOPES_KEY)) + assertTrue(Sentry.getCurrentScopes().isNoOp) + val wrappedContext = SentryContextWrapper.wrap(context) + assertNull(wrappedContext.get(SENTRY_SCOPES_KEY)) + } +}