From afe9c107c88243e0a3decee3fa426d320fe62444 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 13 Oct 2026 17:08:00 +0200 Subject: [PATCH 1/2] ref(core): Remove deprecated Instrumenter option Remove the Instrumenter enum and its tracing configuration now that OpenTelemetry no longer depends on instrumenter selection. Simplify span creation to use SpanOptions for explicit start timestamps. Co-Authored-By: Claude --- .../core/ActivityLifecycleIntegration.java | 31 ++---- .../ActivityLifecycleSpanHelper.java | 4 +- .../sentry/android/sqlite/OpenHelperSpans.kt | 5 +- .../main/java/io/sentry/sqlite/DriverSpans.kt | 3 +- .../io/sentry/compose/SentryComposeTracing.kt | 18 ++-- .../api/sentry-opentelemetry-bootstrap.api | 4 - .../OtelStrongRefSpanWrapper.java | 20 ---- .../OtelTransactionSpanForwarder.java | 22 +---- .../api/sentry-opentelemetry-core.api | 2 - .../OpenTelemetryLinkErrorEventProcessor.java | 73 ++++++-------- .../sentry/opentelemetry/OtelSpanWrapper.java | 37 +------ .../opentelemetry/SentrySpanExporter.java | 3 - .../opentelemetry/SentrySpanProcessor.java | 18 +--- .../src/test/kotlin/OtelSpanWrapperTest.kt | 4 +- .../test/kotlin/SentrySpanProcessorTest.kt | 37 +------ sentry/api/sentry.api | 21 ---- sentry/src/main/java/io/sentry/ISpan.java | 21 +--- .../src/main/java/io/sentry/Instrumenter.java | 12 --- sentry/src/main/java/io/sentry/NoOpSpan.java | 19 ---- .../main/java/io/sentry/NoOpTransaction.java | 19 ---- sentry/src/main/java/io/sentry/Scopes.java | 9 -- .../main/java/io/sentry/SentryOptions.java | 29 ------ .../src/main/java/io/sentry/SentryTracer.java | 99 +------------------ sentry/src/main/java/io/sentry/Span.java | 28 +----- .../src/main/java/io/sentry/SpanContext.java | 10 -- .../test/java/io/sentry/InstrumenterTest.kt | 18 ---- .../java/io/sentry/NoOpTransactionTest.kt | 4 - sentry/src/test/java/io/sentry/ScopesTest.kt | 33 ------- sentry/src/test/java/io/sentry/SpanTest.kt | 26 +---- 29 files changed, 70 insertions(+), 559 deletions(-) delete mode 100644 sentry/src/main/java/io/sentry/Instrumenter.java delete mode 100644 sentry/src/test/java/io/sentry/InstrumenterTest.kt diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/ActivityLifecycleIntegration.java b/sentry-android-core/src/main/java/io/sentry/android/core/ActivityLifecycleIntegration.java index 505bb84ea2c..6c0a629d084 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/ActivityLifecycleIntegration.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/ActivityLifecycleIntegration.java @@ -17,7 +17,6 @@ import io.sentry.ISentryLifecycleToken; import io.sentry.ISpan; import io.sentry.ITransaction; -import io.sentry.Instrumenter; import io.sentry.Integration; import io.sentry.NoOpTransaction; import io.sentry.PropagationContext; @@ -361,34 +360,22 @@ private void startTracing(final @NotNull Activity activity) { if (isAppStart) { if (!createStandaloneAppStart && !options.isEnableStandaloneAppStartTracing()) { + spanOptions.setStartTimestamp(appStartTime); appStartSpan = transaction.startChild( - getAppStartOp(coldStart), - getAppStartDesc(coldStart), - appStartTime, - Instrumenter.SENTRY, - spanOptions); + getAppStartOp(coldStart), getAppStartDesc(coldStart), spanOptions); finishAppStartSpan(); } } + spanOptions.setStartTimestamp(ttidStartTime); final @NotNull ISpan ttidSpan = - transaction.startChild( - TTID_OP, - getTtidDesc(activityName), - ttidStartTime, - Instrumenter.SENTRY, - spanOptions); + transaction.startChild(TTID_OP, getTtidDesc(activityName), spanOptions); ttidSpanMap.put(activity, ttidSpan); if (timeToFullDisplaySpanEnabled && fullyDisplayedReporter != null && options != null) { final @NotNull ISpan ttfdSpan = - transaction.startChild( - TTFD_OP, - getTtfdDesc(activityName), - ttidStartTime, - Instrumenter.SENTRY, - spanOptions); + transaction.startChild(TTFD_OP, getTtfdDesc(activityName), spanOptions); try { ttfdSpanMap.put(activity, ttfdSpan); ttfdAutoCloseFuture = @@ -1125,13 +1112,9 @@ private void onHeadlessAppStart() { final SpanOptions spanOptions = new SpanOptions(); setSpanOrigin(spanOptions); + spanOptions.setStartTimestamp(AndroidDateUtils.getCurrentSentryDateTime()); final @NotNull ISpan extendedSpan = - transaction.startChild( - APP_START_EXTENDED_OP, - APP_START_EXTENDED_DESC, - AndroidDateUtils.getCurrentSentryDateTime(), - Instrumenter.SENTRY, - spanOptions); + transaction.startChild(APP_START_EXTENDED_OP, APP_START_EXTENDED_DESC, spanOptions); return new AppStartExtension.ExtendedAppStart(transaction, extendedSpan); } diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/performance/ActivityLifecycleSpanHelper.java b/sentry-android-core/src/main/java/io/sentry/android/core/performance/ActivityLifecycleSpanHelper.java index accb56db0dc..61ee186bc99 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/performance/ActivityLifecycleSpanHelper.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/performance/ActivityLifecycleSpanHelper.java @@ -3,7 +3,6 @@ import android.os.Looper; import android.os.SystemClock; import io.sentry.ISpan; -import io.sentry.Instrumenter; import io.sentry.SentryDate; import io.sentry.SpanDataConvention; import io.sentry.SpanStatus; @@ -111,8 +110,7 @@ public void saveSpanToAppStartMetrics() { final @NotNull String description, final @NotNull SentryDate startTimestamp) { final @NotNull ISpan span = - parentSpan.startChild( - APP_METRICS_ACTIVITIES_OP, description, startTimestamp, Instrumenter.SENTRY); + parentSpan.startChild(APP_METRICS_ACTIVITIES_OP, description, startTimestamp); setDefaultStartSpanData(span); return span; } diff --git a/sentry-android-sqlite/src/main/java/io/sentry/android/sqlite/OpenHelperSpans.kt b/sentry-android-sqlite/src/main/java/io/sentry/android/sqlite/OpenHelperSpans.kt index 059eb1bb1b5..4aa08a6f261 100644 --- a/sentry-android-sqlite/src/main/java/io/sentry/android/sqlite/OpenHelperSpans.kt +++ b/sentry-android-sqlite/src/main/java/io/sentry/android/sqlite/OpenHelperSpans.kt @@ -4,7 +4,6 @@ import android.database.CrossProcessCursor import android.database.SQLException import io.sentry.IScopes import io.sentry.ISpan -import io.sentry.Instrumenter import io.sentry.ScopesAdapter import io.sentry.SentryIntegrationPackageStorage import io.sentry.SentryStackTraceFactory @@ -46,12 +45,12 @@ internal class OpenHelperSpans( if (result is CrossProcessCursor) { return SentryCrossProcessCursor(result, this, sql) as T } - span = scopes.span?.startChild("db.sql.query", sql, startTimestamp, Instrumenter.SENTRY) + span = scopes.span?.startChild("db.sql.query", sql, startTimestamp) span?.spanContext?.origin = TRACE_ORIGIN span?.status = SpanStatus.OK result } catch (e: Throwable) { - span = scopes.span?.startChild("db.sql.query", sql, startTimestamp, Instrumenter.SENTRY) + span = scopes.span?.startChild("db.sql.query", sql, startTimestamp) span?.spanContext?.origin = TRACE_ORIGIN span?.status = SpanStatus.INTERNAL_ERROR span?.throwable = e diff --git a/sentry-android-sqlite/src/main/java/io/sentry/sqlite/DriverSpans.kt b/sentry-android-sqlite/src/main/java/io/sentry/sqlite/DriverSpans.kt index b3c0eb7c713..018cee2742e 100644 --- a/sentry-android-sqlite/src/main/java/io/sentry/sqlite/DriverSpans.kt +++ b/sentry-android-sqlite/src/main/java/io/sentry/sqlite/DriverSpans.kt @@ -2,7 +2,6 @@ package io.sentry.sqlite import io.sentry.IScopes import io.sentry.ISpan -import io.sentry.Instrumenter import io.sentry.ScopesAdapter import io.sentry.SentryDate import io.sentry.SentryLongDate @@ -50,7 +49,7 @@ internal class DriverSpans(private val scopes: IScopes, private val dbMetadata: val startTimestamp = SentryLongDate(startTimestampNanos) val endTimestamp = SentryLongDate(startTimestampNanos + durationNanos) - parent.startChild("db.sql.query", sql, startTimestamp, Instrumenter.SENTRY).apply { + parent.startChild("db.sql.query", sql, startTimestamp).apply { spanContext.origin = SQLITE_TRACE_ORIGIN throwable?.let { this.throwable = it } diff --git a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryComposeTracing.kt b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryComposeTracing.kt index a5e7a84ce6e..59749084cba 100644 --- a/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryComposeTracing.kt +++ b/sentry-compose/src/androidMain/kotlin/io/sentry/compose/SentryComposeTracing.kt @@ -9,7 +9,6 @@ import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawWithContent import io.sentry.ISpan -import io.sentry.Instrumenter import io.sentry.Sentry import io.sentry.SentryDate import io.sentry.SpanOptions @@ -128,9 +127,10 @@ private fun recordCompositionSpan( .startChild( OP_COMPOSITION_SPAN, tag, - startTimestamp, - Instrumenter.SENTRY, - SpanOptions().apply { origin = OP_TRACE_ORIGIN }, + SpanOptions().apply { + origin = OP_TRACE_ORIGIN + this.startTimestamp = startTimestamp + }, ) .run { finish(null, endTimestamp) } } @@ -153,9 +153,10 @@ private fun recordRenderSpan( .startChild( OP_RENDER_SPAN, tag, - startTimestamp, - Instrumenter.SENTRY, - SpanOptions().apply { origin = OP_TRACE_ORIGIN }, + SpanOptions().apply { + origin = OP_TRACE_ORIGIN + this.startTimestamp = startTimestamp + }, ) .run { finish(null, endTimestamp) } } @@ -243,10 +244,9 @@ private class BucketSpans { ownerSpan.startChild( operation, description, - startTimestamp, - Instrumenter.SENTRY, SpanOptions().apply { origin = OP_TRACE_ORIGIN + this.startTimestamp = startTimestamp isTrimStart = true isTrimEnd = true isIdle = true diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api index 1f81e4324d4..f9b2c24938f 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/api/sentry-opentelemetry-bootstrap.api @@ -86,8 +86,6 @@ public final class io/sentry/opentelemetry/OtelStrongRefSpanWrapper : io/sentry/ public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun storeInContext (Lio/opentelemetry/context/Context;)Lio/opentelemetry/context/Context; public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; @@ -141,8 +139,6 @@ public final class io/sentry/opentelemetry/OtelTransactionSpanForwarder : io/sen public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelStrongRefSpanWrapper.java b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelStrongRefSpanWrapper.java index 907d71a278b..15b35c33f33 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelStrongRefSpanWrapper.java +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelStrongRefSpanWrapper.java @@ -7,7 +7,6 @@ import io.sentry.IScopes; import io.sentry.ISentryLifecycleToken; import io.sentry.ISpan; -import io.sentry.Instrumenter; import io.sentry.MeasurementUnit; import io.sentry.SentryDate; import io.sentry.SentryTraceHeader; @@ -131,25 +130,6 @@ public void setTransactionName(@NotNull String name, @NotNull TransactionNameSou return delegate.startChild(operation, description, timestamp); } - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter) { - return delegate.startChild(operation, description, timestamp, instrumenter); - } - - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions) { - return delegate.startChild(operation, description, timestamp, instrumenter, spanOptions); - } - @Override public @NotNull ISpan startChild(@NotNull String operation, @Nullable String description) { return delegate.startChild(operation, description); diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java index e3cdfc4be3b..ff7674d0311 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/OtelTransactionSpanForwarder.java @@ -7,7 +7,6 @@ import io.sentry.ISentryLifecycleToken; import io.sentry.ISpan; import io.sentry.ITransaction; -import io.sentry.Instrumenter; import io.sentry.MeasurementUnit; import io.sentry.SentryDate; import io.sentry.SentryTraceHeader; @@ -52,25 +51,6 @@ public OtelTransactionSpanForwarder(final @NotNull IOtelSpanWrapper rootSpan) { return rootSpan.startChild(spanContext, spanOptions); } - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter) { - return rootSpan.startChild(operation, description, timestamp, instrumenter); - } - - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions) { - return rootSpan.startChild(operation, description, timestamp, instrumenter, spanOptions); - } - @Override public @NotNull ISpan startChild(@NotNull String operation, @Nullable String description) { return rootSpan.startChild(operation, description); @@ -224,7 +204,7 @@ public boolean isNoOp() { @Override public @NotNull ISpan startChild( @NotNull String operation, @Nullable String description, @Nullable SentryDate timestamp) { - return rootSpan.startChild(operation, description, timestamp, Instrumenter.SENTRY); + return rootSpan.startChild(operation, description, timestamp); } @Override diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/api/sentry-opentelemetry-core.api b/sentry-opentelemetry/sentry-opentelemetry-core/api/sentry-opentelemetry-core.api index 3ed25d1a9cf..60f1edef0d7 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/api/sentry-opentelemetry-core.api +++ b/sentry-opentelemetry/sentry-opentelemetry-core/api/sentry-opentelemetry-core.api @@ -100,8 +100,6 @@ public final class io/sentry/opentelemetry/OtelSpanWrapper : io/sentry/opentelem public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun storeInContext (Lio/opentelemetry/context/Context;)Lio/opentelemetry/context/Context; public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OpenTelemetryLinkErrorEventProcessor.java b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OpenTelemetryLinkErrorEventProcessor.java index cf1e530cd9e..18ce4513ba6 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OpenTelemetryLinkErrorEventProcessor.java +++ b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OpenTelemetryLinkErrorEventProcessor.java @@ -7,7 +7,6 @@ import io.sentry.Hint; import io.sentry.IScopes; import io.sentry.ISpan; -import io.sentry.Instrumenter; import io.sentry.ScopesAdapter; import io.sentry.SentryEvent; import io.sentry.SentryLevel; @@ -40,57 +39,40 @@ public OpenTelemetryLinkErrorEventProcessor() { @Override public @Nullable SentryEvent process(final @NotNull SentryEvent event, final @NotNull Hint hint) { - final @NotNull Instrumenter instrumenter = scopes.getOptions().getInstrumenter(); - if (Instrumenter.OTEL.equals(instrumenter)) { - @NotNull final Span otelSpan = Span.current(); - @NotNull final String traceId = otelSpan.getSpanContext().getTraceId(); - @NotNull final String spanId = otelSpan.getSpanContext().getSpanId(); + @NotNull final Span otelSpan = Span.current(); + @NotNull final String traceId = otelSpan.getSpanContext().getTraceId(); + @NotNull final String spanId = otelSpan.getSpanContext().getSpanId(); - if (TraceId.isValid(traceId) && SpanId.isValid(spanId)) { - final @Nullable ISpan sentrySpan = spanStorage.get(spanId); - if (sentrySpan != null) { - final @NotNull SpanContext sentrySpanSpanContext = sentrySpan.getSpanContext(); - final @NotNull String operation = sentrySpanSpanContext.getOperation(); - final @Nullable io.sentry.SpanId parentSpanId = sentrySpanSpanContext.getParentSpanId(); - final @NotNull SpanContext spanContext = - new SpanContext( - new SentryId(traceId), - new io.sentry.SpanId(spanId), - operation, - parentSpanId, - null); + if (TraceId.isValid(traceId) && SpanId.isValid(spanId)) { + final @Nullable ISpan sentrySpan = spanStorage.get(spanId); + if (sentrySpan != null) { + final @NotNull SpanContext sentrySpanSpanContext = sentrySpan.getSpanContext(); + final @NotNull String operation = sentrySpanSpanContext.getOperation(); + final @Nullable io.sentry.SpanId parentSpanId = sentrySpanSpanContext.getParentSpanId(); + final @NotNull SpanContext spanContext = + new SpanContext( + new SentryId(traceId), new io.sentry.SpanId(spanId), operation, parentSpanId, null); - event.getContexts().setTrace(spanContext); - scopes - .getOptions() - .getLogger() - .log( - SentryLevel.DEBUG, - "Linking Sentry event %s to span %s created via OpenTelemetry (trace %s).", - event.getEventId(), - spanId, - traceId); - } else { - scopes - .getOptions() - .getLogger() - .log( - SentryLevel.DEBUG, - "Not linking Sentry event %s to any transaction created via OpenTelemetry as none has been found for span %s (trace %s).", - event.getEventId(), - spanId, - traceId); - } + event.getContexts().setTrace(spanContext); + scopes + .getOptions() + .getLogger() + .log( + SentryLevel.DEBUG, + "Linking Sentry event %s to span %s created via OpenTelemetry (trace %s).", + event.getEventId(), + spanId, + traceId); } else { scopes .getOptions() .getLogger() .log( SentryLevel.DEBUG, - "Not linking Sentry event %s to any transaction created via OpenTelemetry as traceId %s or spanId %s are invalid.", + "Not linking Sentry event %s to any transaction created via OpenTelemetry as none has been found for span %s (trace %s).", event.getEventId(), - traceId, - spanId); + spanId, + traceId); } } else { scopes @@ -98,9 +80,10 @@ public OpenTelemetryLinkErrorEventProcessor() { .getLogger() .log( SentryLevel.DEBUG, - "Not linking Sentry event %s to any transaction created via OpenTelemetry as instrumenter is set to %s.", + "Not linking Sentry event %s to any transaction created via OpenTelemetry as traceId %s or spanId %s are invalid.", event.getEventId(), - instrumenter); + traceId, + spanId); } return event; diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java index 80da51f9db7..a9d060061ab 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java +++ b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/OtelSpanWrapper.java @@ -10,7 +10,6 @@ import io.sentry.IScopes; import io.sentry.ISentryLifecycleToken; import io.sentry.ISpan; -import io.sentry.Instrumenter; import io.sentry.MeasurementUnit; import io.sentry.NoOpScopesLifecycleToken; import io.sentry.NoOpSpan; @@ -144,43 +143,9 @@ public OtelSpanWrapper( @Override public @NotNull ISpan startChild( @NotNull String operation, @Nullable String description, @Nullable SentryDate timestamp) { - return startChild(operation, description, timestamp, Instrumenter.SENTRY); - } - - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter) { - final @NotNull SpanContext spanContext = - context.copyForChild(operation, getSpanContext().getSpanId(), null); - spanContext.setDescription(description); - spanContext.setInstrumenter(instrumenter); - final @NotNull SpanOptions spanOptions = new SpanOptions(); spanOptions.setStartTimestamp(timestamp); - - return startChild(spanContext, spanOptions); - } - - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions) { - if (timestamp != null) { - spanOptions.setStartTimestamp(timestamp); - } - - final @NotNull SpanContext spanContext = - context.copyForChild(operation, getSpanContext().getSpanId(), null); - spanContext.setDescription(description); - spanContext.setInstrumenter(instrumenter); - - return startChild(spanContext, spanOptions); + return startChild(operation, description, spanOptions); } @Override diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanExporter.java b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanExporter.java index 2583f4a0469..3cc492a9e4c 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanExporter.java +++ b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanExporter.java @@ -21,7 +21,6 @@ import io.sentry.IScopes; import io.sentry.ISpan; import io.sentry.ITransaction; -import io.sentry.Instrumenter; import io.sentry.ScopeType; import io.sentry.ScopesAdapter; import io.sentry.SentryDate; @@ -222,7 +221,6 @@ private void createAndFinishSpanForOtelSpan( parentSentrySpan.getSpanContext().getSpanId(), new SpanId(spanId)); spanContext.setDescription(spanInfo.getDescription()); - spanContext.setInstrumenter(Instrumenter.SENTRY); if (sentrySpanMaybe != null) { spanContext.setSamplingDecision(sentrySpanMaybe.getSamplingDecision()); spanOptions.setOrigin(sentrySpanMaybe.getSpanContext().getOrigin()); @@ -339,7 +337,6 @@ private void transferSpanDetails( transactionName == null ? DEFAULT_TRANSACTION_NAME : transactionName); transactionContext.setTransactionNameSource(transactionNameSource); transactionContext.setOperation(spanInfo.getOp()); - transactionContext.setInstrumenter(Instrumenter.SENTRY); transactionContext.setProfilerId(profilerId); if (sentrySpanMaybe != null) { transactionContext.setSamplingDecision(sentrySpanMaybe.getSamplingDecision()); diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanProcessor.java b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanProcessor.java index 31bd6368318..d7ae028657d 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanProcessor.java +++ b/sentry-opentelemetry/sentry-opentelemetry-core/src/main/java/io/sentry/opentelemetry/SentrySpanProcessor.java @@ -19,7 +19,6 @@ import io.sentry.IScopes; import io.sentry.ISpan; import io.sentry.ITransaction; -import io.sentry.Instrumenter; import io.sentry.PropagationContext; import io.sentry.ScopesAdapter; import io.sentry.SentryDate; @@ -103,9 +102,9 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri new SentryLongDate(otelSpan.toSpanData().getStartEpochNanos()); final @NotNull SpanOptions spanOptions = new SpanOptions(); spanOptions.setOrigin(TRACE_ORIGN); + spanOptions.setStartTimestamp(startDate); final @NotNull ISpan sentryChildSpan = - sentryParentSpan.startChild( - otelSpan.getName(), otelSpan.getName(), startDate, Instrumenter.OTEL, spanOptions); + sentryParentSpan.startChild(otelSpan.getName(), otelSpan.getName(), spanOptions); spanStorage.store(traceData.getSpanId(), sentryChildSpan); } else { scopes @@ -135,7 +134,6 @@ public void onStart(final @NotNull Context parentContext, final @NotNull ReadWri transactionContext.setName(transactionName); transactionContext.setTransactionNameSource(transactionNameSource); transactionContext.setOperation(op); - transactionContext.setInstrumenter(Instrumenter.OTEL); TransactionOptions transactionOptions = new TransactionOptions(); transactionOptions.setStartTimestamp( @@ -232,18 +230,6 @@ private boolean ensurePrerequisites(final @NotNull ReadableSpan otelSpan) { return false; } - final @NotNull Instrumenter instrumenter = scopes.getOptions().getInstrumenter(); - if (!Instrumenter.OTEL.equals(instrumenter)) { - scopes - .getOptions() - .getLogger() - .log( - SentryLevel.DEBUG, - "Not forwarding OpenTelemetry span to Sentry as instrumenter has been set to %s.", - instrumenter); - return false; - } - final @NotNull SpanContext otelSpanContext = otelSpan.getSpanContext(); if (!otelSpanContext.isValid()) { scopes diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/OtelSpanWrapperTest.kt b/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/OtelSpanWrapperTest.kt index 98d3989aaaf..0dc7a207d1b 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/OtelSpanWrapperTest.kt +++ b/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/OtelSpanWrapperTest.kt @@ -8,7 +8,6 @@ import io.opentelemetry.sdk.trace.ReadWriteSpan import io.sentry.IScopes import io.sentry.ISpan import io.sentry.ISpanFactory -import io.sentry.Instrumenter import io.sentry.SentryLongDate import io.sentry.SentryOptions import io.sentry.SpanOptions @@ -22,7 +21,7 @@ import org.mockito.kotlin.whenever class OtelSpanWrapperTest { @Test - fun `startChild with timestamp forwards timestamp and Sentry instrumenter`() { + fun `startChild with timestamp forwards timestamp`() { val otelSpan = mock() whenever(otelSpan.spanContext) .thenReturn( @@ -55,6 +54,5 @@ class OtelSpanWrapperTest { assertThat(spanOptions.firstValue.startTimestamp).isSameInstanceAs(timestamp) assertThat(spanContext.firstValue.operation).isEqualTo("child-op") assertThat(spanContext.firstValue.description).isEqualTo("description") - assertThat(spanContext.firstValue.instrumenter).isEqualTo(Instrumenter.SENTRY) } } diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/SentrySpanProcessorTest.kt b/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/SentrySpanProcessorTest.kt index df2cf9596dd..f8bc7a023cb 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/SentrySpanProcessorTest.kt +++ b/sentry-opentelemetry/sentry-opentelemetry-core/src/test/kotlin/SentrySpanProcessorTest.kt @@ -25,7 +25,6 @@ import io.sentry.Hint import io.sentry.IScopes import io.sentry.ISpan import io.sentry.ITransaction -import io.sentry.Instrumenter import io.sentry.SentryDate import io.sentry.SentryEvent import io.sentry.SentryOptions @@ -64,11 +63,7 @@ class SentrySpanProcessorTest { private class Fixture { - val options = - SentryOptions().also { - it.dsn = "https://key@sentry.io/proj" - it.instrumenter = Instrumenter.OTEL - } + val options = SentryOptions().also { it.dsn = "https://key@sentry.io/proj" } val scopes = mock() val transaction = mock() val span = mock() @@ -96,15 +91,7 @@ class SentrySpanProcessorTest { whenever(span.toBaggageHeader(any())).thenReturn(baggageHeader) whenever(transaction.toBaggageHeader(any())).thenReturn(baggageHeader) - whenever( - transaction.startChild( - any(), - anyOrNull(), - anyOrNull(), - eq(Instrumenter.OTEL), - any(), - ) - ) + whenever(transaction.startChild(any(), anyOrNull(), any())) .thenReturn(span) val sdkTracerProvider = @@ -371,17 +358,6 @@ class SentrySpanProcessorTest { } } - @Test - fun `does not link error to OTEL transaction if instrumenter does not match`() { - fixture.options.instrumenter = Instrumenter.SENTRY - fixture.setup() - - val processedEvent = - OpenTelemetryLinkErrorEventProcessor(fixture.scopes).process(SentryEvent(), Hint()) - - thenNoTraceContextHasBeenAddedToEvent(processedEvent) - } - private fun givenSpanBuilder( spanKind: SpanKind = SpanKind.SERVER, parentSpan: Span? = null, @@ -483,14 +459,7 @@ class SentrySpanProcessorTest { } private fun thenChildSpanIsStarted() { - verify(fixture.transaction) - .startChild( - eq("childspan"), - eq("childspan"), - any(), - eq(Instrumenter.OTEL), - any(), - ) + verify(fixture.transaction).startChild(eq("childspan"), eq("childspan"), any()) } private fun thenChildSpanIsFinished(status: SpanStatus = SpanStatus.OK) { diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 2007edf00c9..d2335291993 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -1274,8 +1274,6 @@ public abstract interface class io/sentry/ISpan { public abstract fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public abstract fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public abstract fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public abstract fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public abstract fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public abstract fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; public abstract fun toSentryTrace ()Lio/sentry/SentryTraceHeader; @@ -1328,13 +1326,6 @@ public final class io/sentry/InitPriority : java/lang/Enum { public static fun values ()[Lio/sentry/InitPriority; } -public final class io/sentry/Instrumenter : java/lang/Enum { - public static final field OTEL Lio/sentry/Instrumenter; - public static final field SENTRY Lio/sentry/Instrumenter; - public static fun valueOf (Ljava/lang/String;)Lio/sentry/Instrumenter; - public static fun values ()[Lio/sentry/Instrumenter; -} - public abstract interface class io/sentry/Integration { public abstract fun register (Lio/sentry/IScopes;Lio/sentry/SentryOptions;)V } @@ -2045,8 +2036,6 @@ public final class io/sentry/NoOpSpan : io/sentry/ISpan { public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; @@ -2105,8 +2094,6 @@ public final class io/sentry/NoOpTransaction : io/sentry/ITransaction { public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; @@ -3813,7 +3800,6 @@ public class io/sentry/SentryOptions : io/sentry/transport/RateLimiterConfig { public fun getInAppExcludes ()Ljava/util/List; public fun getInAppIncludes ()Ljava/util/List; public fun getInitPriority ()Lio/sentry/InitPriority; - public fun getInstrumenter ()Lio/sentry/Instrumenter; public fun getIntegrations ()Ljava/util/List; public fun getInternalTracesSampler ()Lio/sentry/TracesSampler; public fun getLogger ()Lio/sentry/ILogger; @@ -3982,7 +3968,6 @@ public class io/sentry/SentryOptions : io/sentry/transport/RateLimiterConfig { public fun setIgnoredSpanOrigins (Ljava/util/List;)V public fun setIgnoredTransactions (Ljava/util/List;)V public fun setInitPriority (Lio/sentry/InitPriority;)V - public fun setInstrumenter (Lio/sentry/Instrumenter;)V public fun setLogger (Lio/sentry/ILogger;)V public fun setLogs (Lio/sentry/SentryOptions$Logs;)V public fun setMaxAttachmentSize (J)V @@ -4374,8 +4359,6 @@ public final class io/sentry/SentryTracer : io/sentry/ITransaction { public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; @@ -4511,8 +4494,6 @@ public final class io/sentry/Span : io/sentry/ISpan { public fun startChild (Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;)Lio/sentry/ISpan; - public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SentryDate;Lio/sentry/Instrumenter;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun startChild (Ljava/lang/String;Ljava/lang/String;Lio/sentry/SpanOptions;)Lio/sentry/ISpan; public fun toBaggageHeader (Ljava/util/List;)Lio/sentry/BaggageHeader; public fun toSentryTrace ()Lio/sentry/SentryTraceHeader; @@ -4543,7 +4524,6 @@ public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonU public fun getData ()Ljava/util/Map; public fun getDescription ()Ljava/lang/String; public fun getFeatureFlagBuffer ()Lio/sentry/featureflags/IFeatureFlagBuffer; - public fun getInstrumenter ()Lio/sentry/Instrumenter; public fun getOperation ()Ljava/lang/String; public fun getOrigin ()Ljava/lang/String; public fun getParentSpanId ()Lio/sentry/SpanId; @@ -4560,7 +4540,6 @@ public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonU public fun serialize (Lio/sentry/ObjectWriter;Lio/sentry/ILogger;)V public fun setData (Ljava/lang/String;Ljava/lang/Object;)V public fun setDescription (Ljava/lang/String;)V - public fun setInstrumenter (Lio/sentry/Instrumenter;)V public fun setOperation (Ljava/lang/String;)V public fun setOrigin (Ljava/lang/String;)V public fun setProfilerId (Lio/sentry/protocol/SentryId;)V diff --git a/sentry/src/main/java/io/sentry/ISpan.java b/sentry/src/main/java/io/sentry/ISpan.java index 9c55cdc3201..6b6af7bbbb3 100644 --- a/sentry/src/main/java/io/sentry/ISpan.java +++ b/sentry/src/main/java/io/sentry/ISpan.java @@ -39,23 +39,6 @@ ISpan startChild( @NotNull ISpan startChild(@NotNull SpanContext spanContext, @NotNull SpanOptions spanOptions); - @ApiStatus.Internal - @NotNull - ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter); - - @ApiStatus.Internal - @NotNull - ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions); - /** * Starts a child Span. * @@ -77,7 +60,9 @@ ISpan startChild( @NotNull default ISpan startChild( @NotNull String operation, @Nullable String description, @Nullable SentryDate timestamp) { - return startChild(operation, description, timestamp, Instrumenter.SENTRY); + final @NotNull SpanOptions spanOptions = new SpanOptions(); + spanOptions.setStartTimestamp(timestamp); + return startChild(operation, description, spanOptions); } /** diff --git a/sentry/src/main/java/io/sentry/Instrumenter.java b/sentry/src/main/java/io/sentry/Instrumenter.java deleted file mode 100644 index f72535bde81..00000000000 --- a/sentry/src/main/java/io/sentry/Instrumenter.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.sentry; - -/** - * Which framework is responsible for instrumenting. This includes starting and stopping of - * transactions and spans. - */ -public enum Instrumenter { - SENTRY, - - /** OpenTelemetry */ - OTEL -} diff --git a/sentry/src/main/java/io/sentry/NoOpSpan.java b/sentry/src/main/java/io/sentry/NoOpSpan.java index 676c539942d..3c00c536236 100644 --- a/sentry/src/main/java/io/sentry/NoOpSpan.java +++ b/sentry/src/main/java/io/sentry/NoOpSpan.java @@ -35,25 +35,6 @@ public static NoOpSpan getInstance() { return NoOpSpan.getInstance(); } - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter) { - return NoOpSpan.getInstance(); - } - - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions) { - return NoOpSpan.getInstance(); - } - @Override public @NotNull ISpan startChild( final @NotNull String operation, final @Nullable String description) { diff --git a/sentry/src/main/java/io/sentry/NoOpTransaction.java b/sentry/src/main/java/io/sentry/NoOpTransaction.java index 1f34870c9ad..b89b0f0e57a 100644 --- a/sentry/src/main/java/io/sentry/NoOpTransaction.java +++ b/sentry/src/main/java/io/sentry/NoOpTransaction.java @@ -54,25 +54,6 @@ public void setName(@NotNull String name, @NotNull TransactionNameSource transac return NoOpSpan.getInstance(); } - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter) { - return NoOpSpan.getInstance(); - } - - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions) { - return NoOpSpan.getInstance(); - } - @Override public @NotNull ISpan startChild( final @NotNull String operation, final @Nullable String description) { diff --git a/sentry/src/main/java/io/sentry/Scopes.java b/sentry/src/main/java/io/sentry/Scopes.java index d3926d56993..b0e5cdd8068 100644 --- a/sentry/src/main/java/io/sentry/Scopes.java +++ b/sentry/src/main/java/io/sentry/Scopes.java @@ -950,15 +950,6 @@ public void flush(long timeoutMillis) { transactionContext.getOrigin()); transaction = NoOpTransaction.getInstance(); - } else if (!getOptions().getInstrumenter().equals(transactionContext.getInstrumenter())) { - getOptions() - .getLogger() - .log( - SentryLevel.DEBUG, - "Returning no-op for instrumenter %s as the SDK has been configured to use instrumenter %s", - transactionContext.getInstrumenter(), - getOptions().getInstrumenter()); - transaction = NoOpTransaction.getInstance(); } else if (!getOptions().isTracingEnabled()) { getOptions() .getLogger() diff --git a/sentry/src/main/java/io/sentry/SentryOptions.java b/sentry/src/main/java/io/sentry/SentryOptions.java index 36b34630d4e..0bcbc128dda 100644 --- a/sentry/src/main/java/io/sentry/SentryOptions.java +++ b/sentry/src/main/java/io/sentry/SentryOptions.java @@ -503,9 +503,6 @@ public class SentryOptions implements RateLimiterConfig { /** Enable or disable automatic breadcrumbs for User interactions */ private boolean enableUserInteractionBreadcrumbs = true; - /** Which framework is responsible for instrumenting. */ - private @NotNull Instrumenter instrumenter = Instrumenter.SENTRY; - /** Contains a list of GestureTargetLocator instances used for user interaction tracking */ private final @NotNull List gestureTargetLocators = new ArrayList<>(); @@ -2620,32 +2617,6 @@ public void setEnableUserInteractionBreadcrumbs(boolean enableUserInteractionBre this.enableUserInteractionBreadcrumbs = enableUserInteractionBreadcrumbs; } - /** - * Sets the instrumenter used for performance instrumentation. - * - *

If you set this to something other than {@link Instrumenter#SENTRY} Sentry will not create - * any transactions automatically nor will it create transactions if you call - * startTransaction(...), nor will it create child spans if you call startChild(...) - * - * @param instrumenter - the instrumenter to use - * @deprecated this should no longer be needed with our current OpenTelmetry integration. Use - * {@link SentryOptions#setIgnoredSpanOrigins(List)} instead if you need fine grained control - * over what integrations can create spans. - */ - @Deprecated - public void setInstrumenter(final @NotNull Instrumenter instrumenter) { - this.instrumenter = instrumenter; - } - - /** - * Returns the instrumenter used for performance instrumentation - * - * @return the configured instrumenter - */ - public @NotNull Instrumenter getInstrumenter() { - return instrumenter; - } - /** * Returns a ClientReportRecorder or a NoOp if sending of client reports has been disabled. * diff --git a/sentry/src/main/java/io/sentry/SentryTracer.java b/sentry/src/main/java/io/sentry/SentryTracer.java index d60187cb4d5..11fa6b5b068 100644 --- a/sentry/src/main/java/io/sentry/SentryTracer.java +++ b/sentry/src/main/java/io/sentry/SentryTracer.java @@ -50,7 +50,6 @@ public final class SentryTracer implements ITransaction { private final @NotNull AtomicBoolean isDeadlineTimerRunning = new AtomicBoolean(false); private @NotNull TransactionNameSource transactionNameSource; - private final @NotNull Instrumenter instrumenter; private final @NotNull Contexts contexts = new Contexts(); private final @Nullable CompositePerformanceCollector compositePerformanceCollector; private final @NotNull TransactionOptions transactionOptions; @@ -77,7 +76,6 @@ public SentryTracer( this.root = new Span(context, this, scopes, transactionOptions); this.name = context.getName(); - this.instrumenter = context.getInstrumenter(); this.scopes = scopes; // Let's collect performance data (cpu, ram, frames) only when the transaction is sampled this.compositePerformanceCollector = @@ -388,42 +386,6 @@ ISpan startChild( return createChild(parentSpanId, operation, description, spanOptions); } - @NotNull - ISpan startChild( - final @NotNull SpanId parentSpanId, - final @NotNull String operation, - final @Nullable String description, - final @Nullable SentryDate timestamp, - final @NotNull Instrumenter instrumenter) { - final @NotNull SpanContext spanContext = - getSpanContext().copyForChild(operation, parentSpanId, null); - spanContext.setDescription(description); - spanContext.setInstrumenter(instrumenter); - - final @NotNull SpanOptions spanOptions = new SpanOptions(); - spanOptions.setStartTimestamp(timestamp); - - return createChild(spanContext, spanOptions); - } - - @NotNull - ISpan startChild( - final @NotNull SpanId parentSpanId, - final @NotNull String operation, - final @Nullable String description, - final @Nullable SentryDate timestamp, - final @NotNull Instrumenter instrumenter, - final @NotNull SpanOptions spanOptions) { - final @NotNull SpanContext spanContext = - getSpanContext().copyForChild(operation, parentSpanId, null); - spanContext.setDescription(description); - spanContext.setInstrumenter(instrumenter); - - spanOptions.setStartTimestamp(timestamp); - - return createChild(spanContext, spanOptions); - } - /** * Starts a child Span with given trace id and parent span id. * @@ -442,7 +404,6 @@ private ISpan createChild( final @NotNull SpanContext spanContext = getSpanContext().copyForChild(operation, parentSpanId, null); spanContext.setDescription(description); - spanContext.setInstrumenter(Instrumenter.SENTRY); return createChild(spanContext, options); } @@ -454,10 +415,6 @@ private ISpan createChild( return NoOpSpan.getInstance(); } - if (!this.instrumenter.equals(spanContext.getInstrumenter())) { - return NoOpSpan.getInstance(); - } - if (SpanUtils.isIgnored(scopes.getOptions().getIgnoredSpanOrigins(), spanOptions.getOrigin())) { return NoOpSpan.getInstance(); } @@ -622,43 +579,26 @@ private boolean isProfileMissing( return this.startChild(operation, (String) null); } - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter) { - return startChild(operation, description, timestamp, instrumenter, new SpanOptions()); - } - - @Override - public @NotNull ISpan startChild( - final @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions) { - return createChild(operation, description, timestamp, instrumenter, spanOptions); - } - @Override public @NotNull ISpan startChild( final @NotNull String operation, @Nullable String description, @Nullable SentryDate timestamp) { - return createChild(operation, description, timestamp, Instrumenter.SENTRY, new SpanOptions()); + final @NotNull SpanOptions spanOptions = new SpanOptions(); + spanOptions.setStartTimestamp(timestamp); + return root.startChild(operation, description, spanOptions); } @Override public @NotNull ISpan startChild( final @NotNull String operation, final @Nullable String description) { - return startChild(operation, description, null, Instrumenter.SENTRY, new SpanOptions()); + return root.startChild(operation, description); } @Override public @NotNull ISpan startChild( @NotNull String operation, @Nullable String description, @NotNull SpanOptions spanOptions) { - return createChild(operation, description, null, Instrumenter.SENTRY, spanOptions); + return root.startChild(operation, description, spanOptions); } @Override @@ -667,35 +607,6 @@ private boolean isProfileMissing( return createChild(spanContext, spanOptions); } - private @NotNull ISpan createChild( - final @NotNull String operation, - final @Nullable String description, - @Nullable SentryDate timestamp, - final @NotNull Instrumenter instrumenter, - final @NotNull SpanOptions spanOptions) { - if (root.isFinished()) { - return NoOpSpan.getInstance(); - } - - if (!this.instrumenter.equals(instrumenter)) { - return NoOpSpan.getInstance(); - } - - if (children.size() < scopes.getOptions().getMaxSpans()) { - return root.startChild(operation, description, timestamp, instrumenter, spanOptions); - } else { - scopes - .getOptions() - .getLogger() - .log( - SentryLevel.WARNING, - "Span operation: %s, description: %s dropped due to limit reached. Returning NoOpSpan.", - operation, - description); - return NoOpSpan.getInstance(); - } - } - @Override public @NotNull SentryTraceHeader toSentryTrace() { return root.toSentryTrace(); diff --git a/sentry/src/main/java/io/sentry/Span.java b/sentry/src/main/java/io/sentry/Span.java index 7ee7eed1900..0e4d0266a81 100644 --- a/sentry/src/main/java/io/sentry/Span.java +++ b/sentry/src/main/java/io/sentry/Span.java @@ -103,25 +103,12 @@ public Span( return this.startChild(operation, (String) null); } - @Override - public @NotNull ISpan startChild( - final @NotNull String operation, - final @Nullable String description, - final @Nullable SentryDate timestamp, - final @NotNull Instrumenter instrumenter, - @NotNull SpanOptions spanOptions) { - if (finished) { - return NoOpSpan.getInstance(); - } - - return transaction.startChild( - context.getSpanId(), operation, description, timestamp, instrumenter, spanOptions); - } - @Override public @NotNull ISpan startChild( @NotNull String operation, @Nullable String description, @Nullable SentryDate timestamp) { - return startChild(operation, description, timestamp, Instrumenter.SENTRY); + final @NotNull SpanOptions spanOptions = new SpanOptions(); + spanOptions.setStartTimestamp(timestamp); + return startChild(operation, description, spanOptions); } @Override @@ -149,15 +136,6 @@ public Span( return transaction.startChild(spanContext, spanOptions); } - @Override - public @NotNull ISpan startChild( - @NotNull String operation, - @Nullable String description, - @Nullable SentryDate timestamp, - @NotNull Instrumenter instrumenter) { - return startChild(operation, description, timestamp, instrumenter, new SpanOptions()); - } - @Override public @NotNull SentryTraceHeader toSentryTrace() { return new SentryTraceHeader(context.getTraceId(), context.getSpanId(), context.getSampled()); diff --git a/sentry/src/main/java/io/sentry/SpanContext.java b/sentry/src/main/java/io/sentry/SpanContext.java index 19ab2c3ad87..2f93d582f1e 100644 --- a/sentry/src/main/java/io/sentry/SpanContext.java +++ b/sentry/src/main/java/io/sentry/SpanContext.java @@ -53,8 +53,6 @@ public class SpanContext implements JsonUnknown, JsonSerializable { private @Nullable Map unknown; - private @NotNull Instrumenter instrumenter = Instrumenter.SENTRY; - protected @Nullable Baggage baggage; protected @NotNull IFeatureFlagBuffer featureFlags = SpanFeatureFlagBuffer.create(); @@ -253,14 +251,6 @@ public void setOrigin(final @Nullable String origin) { this.origin = origin; } - public @NotNull Instrumenter getInstrumenter() { - return instrumenter; - } - - public void setInstrumenter(final @NotNull Instrumenter instrumenter) { - this.instrumenter = instrumenter; - } - public @Nullable Baggage getBaggage() { return baggage; } diff --git a/sentry/src/test/java/io/sentry/InstrumenterTest.kt b/sentry/src/test/java/io/sentry/InstrumenterTest.kt deleted file mode 100644 index 639541c12c8..00000000000 --- a/sentry/src/test/java/io/sentry/InstrumenterTest.kt +++ /dev/null @@ -1,18 +0,0 @@ -package io.sentry - -import kotlin.test.Test -import kotlin.test.assertEquals - -class InstrumenterTest { - @Test - fun `can create from otel string`() { - val instrumenter = Instrumenter.valueOf("OTEL") - assertEquals(instrumenter, Instrumenter.OTEL) - } - - @Test - fun `can create from sentry string`() { - val instrumenter = Instrumenter.valueOf("SENTRY") - assertEquals(instrumenter, Instrumenter.SENTRY) - } -} diff --git a/sentry/src/test/java/io/sentry/NoOpTransactionTest.kt b/sentry/src/test/java/io/sentry/NoOpTransactionTest.kt index a1a81d37407..2d146aab84d 100644 --- a/sentry/src/test/java/io/sentry/NoOpTransactionTest.kt +++ b/sentry/src/test/java/io/sentry/NoOpTransactionTest.kt @@ -16,10 +16,6 @@ class NoOpTransactionTest { assertNotNull(transaction.startChild("op", "desc")) assertNotNull(transaction.startChild("op", "desc", SpanOptions())) assertNotNull(transaction.startChild("op", "desc", SentryNanotimeDate())) - assertNotNull(transaction.startChild("op", "desc", SentryNanotimeDate(), Instrumenter.SENTRY)) - assertNotNull( - transaction.startChild("op", "desc", SentryNanotimeDate(), Instrumenter.SENTRY, SpanOptions()) - ) } @Test diff --git a/sentry/src/test/java/io/sentry/ScopesTest.kt b/sentry/src/test/java/io/sentry/ScopesTest.kt index 324a097a7fd..982441e1160 100644 --- a/sentry/src/test/java/io/sentry/ScopesTest.kt +++ b/sentry/src/test/java/io/sentry/ScopesTest.kt @@ -1101,39 +1101,6 @@ class ScopesTest { assertEquals("test", scope?.transactionName) } - @Test - fun `when startTransaction is called with different instrumenter, no-op is returned`() { - val scopes = generateScopes() - - val transactionContext = - TransactionContext("test", "op").also { it.instrumenter = Instrumenter.OTEL } - val transactionOptions = TransactionOptions() - val tx = scopes.startTransaction(transactionContext, transactionOptions) - - assertTrue(tx is NoOpTransaction) - } - - @Test - fun `when startTransaction is called with different instrumenter, no-op is returned 2`() { - val scopes = generateScopes() { it.instrumenter = Instrumenter.OTEL } - - val tx = scopes.startTransaction("test", "op") - - assertTrue(tx is NoOpTransaction) - } - - @Test - fun `when startTransaction is called with configured instrumenter, it works`() { - val scopes = generateScopes() { it.instrumenter = Instrumenter.OTEL } - - val transactionContext = - TransactionContext("test", "op").also { it.instrumenter = Instrumenter.OTEL } - val transactionOptions = TransactionOptions() - val tx = scopes.startTransaction(transactionContext, transactionOptions) - - assertFalse(tx is NoOpTransaction) - } - // endregion // region setUser tests diff --git a/sentry/src/test/java/io/sentry/SpanTest.kt b/sentry/src/test/java/io/sentry/SpanTest.kt index b61e12ad87f..f8704f1e251 100644 --- a/sentry/src/test/java/io/sentry/SpanTest.kt +++ b/sentry/src/test/java/io/sentry/SpanTest.kt @@ -184,26 +184,6 @@ class SpanTest { assertEquals(2, transaction.spans.size) } - @Test - fun `starting a child with different instrumenter no-ops`() { - val transaction = - getTransaction(TransactionContext("name", "op").also { it.instrumenter = Instrumenter.OTEL }) - val span = transaction.startChild("operation", "description") - - span.startChild("op") - assertEquals(0, transaction.spans.size) - } - - @Test - fun `starting a child with same instrumenter adds span to transaction`() { - val transaction = - getTransaction(TransactionContext("name", "op").also { it.instrumenter = Instrumenter.OTEL }) - val span = transaction.startChild("operation", "description", null, Instrumenter.OTEL) - - span.startChild("op", "desc", null, Instrumenter.OTEL) - assertEquals(2, transaction.spans.size) - } - @Test fun `when span was not finished, isFinished returns false`() { val span = startChildFromSpan() @@ -313,9 +293,9 @@ class SpanTest { span.startChild( "op1", "desc", - SentryLongDate(span.startDate.nanoTimestamp() - 1000L), - Instrumenter.SENTRY, - SpanOptions(), + SpanOptions().apply { + startTimestamp = SentryLongDate(span.startDate.nanoTimestamp() - 1000L) + }, ) as Span child1.finish() span.finish(SpanStatus.OK) From ab3998107654ff234eb3428c4a7b0afbfe103433 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 13 Oct 2026 17:09:44 +0200 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 295f7d46508..6319b17d5f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ - Manually constructed `SentryTimberIntegration` and `SentryTimberTree` instances require a `logsEnabled` argument. Pass `false` to keep Sentry Logs disabled. - Remove the Apache HttpClient transport and stop publishing `sentry-apache-http-client-5` ([#6214](https://github.com/getsentry/sentry-java/pull/6214)) +- Remove the deprecated `Instrumenter` enum, option, span context property, and `startChild` overloads ([#6252](https://github.com/getsentry/sentry-java/pull/6252)) ### Features