Skip to content

Commit b39beea

Browse files
committed
RUM-9899: Making Sampler backward compatible with AndroidTracer
1 parent 6d8d5b6 commit b39beea

File tree

18 files changed

+281
-51
lines changed

18 files changed

+281
-51
lines changed

features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/utils/forge/LogEventForgeryFactory.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ internal class LogEventForgeryFactory : ForgeryFactory<LogEvent> {
9494
brand = deviceInfo.deviceBrand,
9595
architecture = deviceInfo.architecture
9696
),
97+
dd = LogEvent.Dd(
98+
device = LogEvent.DdDevice(
99+
architecture = deviceInfo.architecture
100+
)
101+
),
97102
os = LogEvent.Os(
98103
name = deviceInfo.osName,
99104
version = deviceInfo.osVersion,

features/dd-sdk-android-trace-api/api/dd-sdk-android-trace-api.api

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ public final class com/datadog/android/trace/api/DatadogTracingConstants$Tags {
5151
public final class com/datadog/android/trace/api/DatadogTracingConstants$TracerConfig {
5252
public static final field INSTANCE Lcom/datadog/android/trace/api/DatadogTracingConstants$TracerConfig;
5353
public static final field PARTIAL_FLUSH_MIN_SPANS Ljava/lang/String;
54-
public static final field PRIORITY_SAMPLING Ljava/lang/String;
5554
public static final field PROPAGATION_STYLE_EXTRACT Ljava/lang/String;
5655
public static final field PROPAGATION_STYLE_INJECT Ljava/lang/String;
56+
public static final field SDK_V2_COMPATIBILITY_FLAG Ljava/lang/String;
5757
public static final field SERVICE_NAME Ljava/lang/String;
5858
public static final field SPAN_TAGS Ljava/lang/String;
5959
public static final field TAGS Ljava/lang/String;

features/dd-sdk-android-trace-api/src/main/kotlin/com/datadog/android/trace/api/DatadogTracingConstants.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ object DatadogTracingConstants {
125125
const val TRACE_RATE_LIMIT: String = "trace.rate.limit"
126126

127127
/**
128-
* A configuration key used to set the minimum number of spans required to trigger a partial flush of trace data.
128+
* A configuration key used to set the minimum number of spans
129+
* required to trigger a partial flush of trace data.
129130
*/
130131
const val PARTIAL_FLUSH_MIN_SPANS: String = "trace.partial.flush.min.spans"
131132

@@ -144,6 +145,16 @@ object DatadogTracingConstants {
144145
*/
145146
const val SERVICE_NAME: String = "service.name"
146147

148+
/**
149+
* A constant flag used to toggle compatibility with SDK version 2 for the tracer.
150+
*
151+
* When this flag is enabled (set to "true"), the SDK adjusts its behavior of a sampler factory,
152+
* making it same sampler as in SDK v2.*.*.
153+
*
154+
* This flag only being used by OTel tracer implementation and disabled by default.
155+
*/
156+
const val SDK_V2_COMPATIBILITY_FLAG: String = "v2.compatibility.enabled"
157+
147158
/**
148159
* A constant representing the configuration key for enabling or disabling the rule
149160
* that uses URLs as resource names in tracing.
@@ -166,7 +177,8 @@ object DatadogTracingConstants {
166177
const val ERROR_KIND: String = "error.kind"
167178

168179
/**
169-
* The actual Throwable/Exception/Error object instance itself. E.g., a [UnsupportedOperationException] instance.
180+
* The actual Throwable/Exception/Error object instance itself.
181+
* E.g., a [UnsupportedOperationException] instance.
170182
*/
171183
const val ERROR_OBJECT: String = "error.object"
172184

features/dd-sdk-android-trace-internal/api/dd-sdk-android-trace-internal.api

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public class com/datadog/trace/api/Config {
107107
public fun isTracePropagationExtractFirst ()Z
108108
public fun isTracePropagationStyleB3PaddingEnabled ()Z
109109
public fun isTraceStrictWritesEnabled ()Z
110+
public fun isV2CompatibilityEnabled ()Z
110111
public static fun jmxFetchIntegrationEnabled (Ljava/util/SortedSet;Z)Z
111112
public fun toString ()Ljava/lang/String;
112113
public static fun traceAnalyticsIntegrationEnabled (Ljava/util/SortedSet;Z)Z
@@ -301,6 +302,7 @@ public final class com/datadog/trace/api/DynamicConfig {
301302
public static fun create (Lcom/datadog/android/trace/internal/compat/function/BiFunction;)Lcom/datadog/trace/api/DynamicConfig$Builder;
302303
public fun current ()Lcom/datadog/trace/api/DynamicConfig$Builder;
303304
public fun initial ()Lcom/datadog/trace/api/DynamicConfig$Builder;
305+
public fun resetTraceConfig ()V
304306
public fun toString ()Ljava/lang/String;
305307
}
306308

@@ -866,6 +868,7 @@ public final class com/datadog/trace/api/config/TracerConfig {
866868
public static final field SCOPE_INHERIT_ASYNC_PROPAGATION Ljava/lang/String;
867869
public static final field SCOPE_ITERATION_KEEP_ALIVE Ljava/lang/String;
868870
public static final field SCOPE_STRICT_MODE Ljava/lang/String;
871+
public static final field SDK_V2_COMPATIBILITY_FLAG Ljava/lang/String;
869872
public static final field SECURE_RANDOM Ljava/lang/String;
870873
public static final field SERVICE_MAPPING Ljava/lang/String;
871874
public static final field SPAN_SAMPLING_RULES Ljava/lang/String;
@@ -995,12 +998,12 @@ public abstract interface class com/datadog/trace/api/interceptor/MutableSpan {
995998
public abstract fun getOperationName ()Ljava/lang/CharSequence;
996999
public abstract fun getResourceName ()Ljava/lang/CharSequence;
9971000
public abstract fun getRootSpan ()Lcom/datadog/trace/api/interceptor/MutableSpan;
998-
public abstract fun getSamplingPriority ()Ljava/lang/Integer;
9991001
public abstract fun getServiceName ()Ljava/lang/String;
10001002
public abstract fun getSpanType ()Ljava/lang/String;
10011003
public abstract fun getStartTime ()J
10021004
public fun getTag (Ljava/lang/String;)Ljava/lang/Object;
10031005
public abstract fun getTags ()Ljava/util/Map;
1006+
public abstract fun getTraceSamplingPriority ()Ljava/lang/Integer;
10041007
public abstract fun isError ()Z
10051008
public abstract fun setError (Z)Lcom/datadog/trace/api/interceptor/MutableSpan;
10061009
public abstract fun setMetric (Ljava/lang/CharSequence;D)Lcom/datadog/trace/api/interceptor/MutableSpan;
@@ -1637,12 +1640,12 @@ public abstract interface class com/datadog/trace/bootstrap/instrumentation/api/
16371640

16381641
public abstract interface class com/datadog/trace/bootstrap/instrumentation/api/AgentSpan$Context {
16391642
public abstract fun baggageItems ()Ljava/lang/Iterable;
1640-
public abstract fun getInstanceSamplingPriority ()I
16411643
public abstract fun getPathwayContext ()Lcom/datadog/trace/bootstrap/instrumentation/api/PathwayContext;
1642-
public abstract fun getSamplingPriority ()I
16431644
public abstract fun getSpanId ()J
1645+
public abstract fun getSpanSamplingPriority ()I
16441646
public abstract fun getTrace ()Lcom/datadog/trace/bootstrap/instrumentation/api/AgentTrace;
16451647
public abstract fun getTraceId ()Lcom/datadog/trace/api/DDTraceId;
1648+
public abstract fun getTraceSamplingPriority ()I
16461649
public fun mergePathwayContext (Lcom/datadog/trace/bootstrap/instrumentation/api/PathwayContext;)V
16471650
}
16481651

@@ -1729,7 +1732,6 @@ public final class com/datadog/trace/bootstrap/instrumentation/api/AgentTracer$N
17291732
public fun getResourceNamePriority ()B
17301733
public synthetic fun getRootSpan ()Lcom/datadog/trace/api/interceptor/MutableSpan;
17311734
public fun getRootSpan ()Lcom/datadog/trace/bootstrap/instrumentation/api/AgentSpan;
1732-
public fun getSamplingPriority ()Ljava/lang/Integer;
17331735
public fun getServiceName ()Ljava/lang/String;
17341736
public fun getSpanId ()J
17351737
public synthetic fun getSpanName ()Ljava/lang/CharSequence;
@@ -1739,6 +1741,7 @@ public final class com/datadog/trace/bootstrap/instrumentation/api/AgentTracer$N
17391741
public fun getTag (Ljava/lang/String;)Ljava/lang/Object;
17401742
public fun getTags ()Ljava/util/Map;
17411743
public fun getTraceId ()Lcom/datadog/trace/api/DDTraceId;
1744+
public fun getTraceSamplingPriority ()Ljava/lang/Integer;
17421745
public fun hasResourceName ()Z
17431746
public fun isError ()Z
17441747
public fun isSameTrace (Lcom/datadog/trace/bootstrap/instrumentation/api/AgentSpan;)Z
@@ -1801,13 +1804,13 @@ public final class com/datadog/trace/bootstrap/instrumentation/api/AgentTracer$N
18011804
public fun getFastlyClientIp ()Ljava/lang/String;
18021805
public fun getForwarded ()Ljava/lang/String;
18031806
public fun getForwardedFor ()Ljava/lang/String;
1804-
public fun getInstanceSamplingPriority ()I
18051807
public fun getPathwayContext ()Lcom/datadog/trace/bootstrap/instrumentation/api/PathwayContext;
1806-
public fun getSamplingPriority ()I
18071808
public fun getSpanId ()J
1809+
public fun getSpanSamplingPriority ()I
18081810
public fun getTerminatedContextLinks ()Ljava/util/List;
18091811
public fun getTrace ()Lcom/datadog/trace/bootstrap/instrumentation/api/AgentTrace;
18101812
public fun getTraceId ()Lcom/datadog/trace/api/DDTraceId;
1813+
public fun getTraceSamplingPriority ()I
18111814
public fun getTrueClientIp ()Ljava/lang/String;
18121815
public fun getUserAgent ()Ljava/lang/String;
18131816
public fun getXClientIp ()Ljava/lang/String;
@@ -2129,19 +2132,19 @@ public class com/datadog/trace/bootstrap/instrumentation/api/TagContext : com/da
21292132
public fun getFastlyClientIp ()Ljava/lang/String;
21302133
public fun getForwarded ()Ljava/lang/String;
21312134
public fun getForwardedFor ()Ljava/lang/String;
2132-
public fun getInstanceSamplingPriority ()I
21332135
public final fun getOrigin ()Ljava/lang/CharSequence;
21342136
public fun getPathwayContext ()Lcom/datadog/trace/bootstrap/instrumentation/api/PathwayContext;
21352137
public fun getPropagationStyle ()Lcom/datadog/trace/api/TracePropagationStyle;
21362138
public final fun getRequestContextDataAppSec ()Ljava/lang/Object;
21372139
public final fun getRequestContextDataIast ()Ljava/lang/Object;
2138-
public final fun getSamplingPriority ()I
21392140
public fun getSpanId ()J
2141+
public fun getSpanSamplingPriority ()I
21402142
public final fun getTags ()Ljava/util/Map;
21412143
public fun getTerminatedContextLinks ()Ljava/util/List;
21422144
public final fun getTrace ()Lcom/datadog/trace/bootstrap/instrumentation/api/AgentTrace;
21432145
public fun getTraceConfig ()Lcom/datadog/trace/api/TraceConfig;
21442146
public fun getTraceId ()Lcom/datadog/trace/api/DDTraceId;
2147+
public final fun getTraceSamplingPriority ()I
21452148
public fun getTrueClientIp ()Ljava/lang/String;
21462149
public fun getUserAgent ()Ljava/lang/String;
21472150
public fun getXClientIp ()Ljava/lang/String;
@@ -2378,6 +2381,8 @@ public class com/datadog/trace/common/sampling/PrioritySampling {
23782381
public class com/datadog/trace/common/sampling/RateByServiceTraceSampler : com/datadog/trace/common/sampling/PrioritySampler, com/datadog/trace/common/sampling/Sampler, com/datadog/trace/common/writer/RemoteResponseListener {
23792382
public static final field SAMPLING_AGENT_RATE Ljava/lang/String;
23802383
public fun <init> ()V
2384+
public fun <init> (Ljava/lang/Double;)V
2385+
public fun getSampleRate ()D
23812386
public fun onResponse (Ljava/lang/String;Ljava/util/Map;)V
23822387
public fun sample (Lcom/datadog/trace/core/CoreSpan;)Z
23832388
public fun setSamplingPriority (Lcom/datadog/trace/core/CoreSpan;)V
@@ -2447,6 +2452,19 @@ public final class com/datadog/trace/common/sampling/SamplingRule$TraceSamplingR
24472452
public fun matches (Lcom/datadog/trace/core/CoreSpan;)Z
24482453
}
24492454

2455+
public abstract interface class com/datadog/trace/common/sampling/SingleSpanSampler {
2456+
public abstract fun setSamplingPriority (Lcom/datadog/trace/core/CoreSpan;)Z
2457+
}
2458+
2459+
public final class com/datadog/trace/common/sampling/SingleSpanSampler$Builder {
2460+
public static fun forConfig (Lcom/datadog/trace/api/Config;)Lcom/datadog/trace/common/sampling/SingleSpanSampler;
2461+
}
2462+
2463+
public final class com/datadog/trace/common/sampling/SingleSpanSampler$RuleBasedSingleSpanSampler : com/datadog/trace/common/sampling/SingleSpanSampler {
2464+
public fun <init> (Lcom/datadog/trace/common/sampling/SpanSamplingRules;)V
2465+
public fun setSamplingPriority (Lcom/datadog/trace/core/CoreSpan;)Z
2466+
}
2467+
24502468
public class com/datadog/trace/common/sampling/SpanSamplingRules {
24512469
public static final field EMPTY Lcom/datadog/trace/common/sampling/SpanSamplingRules;
24522470
public fun <init> (Ljava/util/List;)V
@@ -2566,6 +2584,7 @@ public abstract interface class com/datadog/trace/core/CoreSpan {
25662584
public abstract fun getResourceName ()Ljava/lang/CharSequence;
25672585
public abstract fun getServiceName ()Ljava/lang/String;
25682586
public abstract fun getSpanId ()J
2587+
public abstract fun getSpanSamplingPriority ()I
25692588
public abstract fun getStartTime ()J
25702589
public abstract fun getTag (Ljava/lang/CharSequence;)Ljava/lang/Object;
25712590
public abstract fun getTag (Ljava/lang/CharSequence;Ljava/lang/Object;)Ljava/lang/Object;
@@ -2577,7 +2596,6 @@ public abstract interface class com/datadog/trace/core/CoreSpan {
25772596
public abstract fun isTopLevel ()Z
25782597
public abstract fun processTagsAndBaggage (Lcom/datadog/trace/core/MetadataConsumer;)V
25792598
public abstract fun removeTag (Ljava/lang/String;)Lcom/datadog/trace/core/CoreSpan;
2580-
public abstract fun samplingPriority ()I
25812599
public abstract fun setErrorMessage (Ljava/lang/String;)Lcom/datadog/trace/core/CoreSpan;
25822600
public abstract fun setFlag (Ljava/lang/CharSequence;Z)Lcom/datadog/trace/core/CoreSpan;
25832601
public abstract fun setMeasured (Z)Lcom/datadog/trace/core/CoreSpan;
@@ -2724,10 +2742,10 @@ public class com/datadog/trace/core/DDSpan : com/datadog/trace/api/profiling/Tra
27242742
public fun getResourceNamePriority ()B
27252743
public synthetic fun getRootSpan ()Lcom/datadog/trace/api/interceptor/MutableSpan;
27262744
public fun getRootSpan ()Lcom/datadog/trace/bootstrap/instrumentation/api/AgentSpan;
2727-
public fun getSamplingPriority ()Ljava/lang/Integer;
27282745
public fun getServiceName ()Ljava/lang/String;
27292746
public fun getSpanId ()J
27302747
public fun getSpanName ()Ljava/lang/CharSequence;
2748+
public fun getSpanSamplingPriority ()I
27312749
public fun getSpanType ()Ljava/lang/String;
27322750
public fun getStartTime ()J
27332751
public fun getStartTimeNano ()J
@@ -2736,6 +2754,7 @@ public class com/datadog/trace/core/DDSpan : com/datadog/trace/api/profiling/Tra
27362754
public fun getTag (Ljava/lang/String;)Ljava/lang/Object;
27372755
public fun getTags ()Ljava/util/Map;
27382756
public fun getTraceId ()Lcom/datadog/trace/api/DDTraceId;
2757+
public fun getTraceSamplingPriority ()Ljava/lang/Integer;
27392758
public fun getType ()Ljava/lang/CharSequence;
27402759
public fun getWrapper ()Ljava/lang/Object;
27412760
public fun hasResourceName ()Z
@@ -2753,7 +2772,6 @@ public class com/datadog/trace/core/DDSpan : com/datadog/trace/api/profiling/Tra
27532772
public final fun publish ()V
27542773
public synthetic fun removeTag (Ljava/lang/String;)Lcom/datadog/trace/core/CoreSpan;
27552774
public fun removeTag (Ljava/lang/String;)Lcom/datadog/trace/core/DDSpan;
2756-
public fun samplingPriority ()I
27572775
public synthetic fun setBaggageItem (Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/trace/bootstrap/instrumentation/api/AgentSpan;
27582776
public final fun setBaggageItem (Ljava/lang/String;Ljava/lang/String;)Lcom/datadog/trace/core/DDSpan;
27592777
public fun setEndpointTracker (Lcom/datadog/trace/api/EndpointTracker;)V
@@ -2864,7 +2882,6 @@ public class com/datadog/trace/core/DDSpanContext : com/datadog/trace/api/gatewa
28642882
public fun getEndToEndStartTime ()J
28652883
public fun getErrorFlag ()Z
28662884
public fun getHttpStatusCode ()S
2867-
public fun getInstanceSamplingPriority ()I
28682885
public fun getOperationName ()Ljava/lang/CharSequence;
28692886
public fun getOrigin ()Ljava/lang/CharSequence;
28702887
public fun getParentId ()J
@@ -2874,14 +2891,15 @@ public class com/datadog/trace/core/DDSpanContext : com/datadog/trace/api/gatewa
28742891
public fun getResourceName ()Ljava/lang/CharSequence;
28752892
public fun getResourceNamePriority ()B
28762893
public fun getRootSpanId ()J
2877-
public fun getSamplingPriority ()I
28782894
public fun getServiceName ()Ljava/lang/String;
28792895
public fun getSpanId ()J
2896+
public fun getSpanSamplingPriority ()I
28802897
public fun getSpanType ()Ljava/lang/CharSequence;
28812898
public fun getTags ()Ljava/util/Map;
28822899
public synthetic fun getTrace ()Lcom/datadog/trace/bootstrap/instrumentation/api/AgentTrace;
28832900
public fun getTrace ()Lcom/datadog/trace/core/PendingTrace;
28842901
public fun getTraceId ()Lcom/datadog/trace/api/DDTraceId;
2902+
public fun getTraceSamplingPriority ()I
28852903
public fun getTraceSegment ()Lcom/datadog/trace/api/internal/TraceSegment;
28862904
public fun getTracer ()Lcom/datadog/trace/core/CoreTracer;
28872905
public fun hasResourceName ()Z

features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/api/Config.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1803,6 +1803,10 @@ public boolean isSamplingMechanismValidationDisabled() {
18031803
return configProvider.getBoolean(TracerConfig.SAMPLING_MECHANISM_VALIDATION_DISABLED, false);
18041804
}
18051805

1806+
public boolean isV2CompatibilityEnabled() {
1807+
return configProvider.getBoolean(TracerConfig.SDK_V2_COMPATIBILITY_FLAG, false);
1808+
}
1809+
18061810
/**
18071811
* @param integrationNames
18081812
* @param defaultEnabled

features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/api/config/TracerConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public final class TracerConfig {
5050
public static final String TRACE_SAMPLING_OPERATION_RULES = "trace.sampling.operation.rules";
5151
// JSON rules
5252
public static final String TRACE_SAMPLING_RULES = "trace.sampling.rules";
53+
public static final String SDK_V2_COMPATIBILITY_FLAG = "v2.compatibility.enabled";
5354
public static final String SPAN_SAMPLING_RULES = "span.sampling.rules";
5455
public static final String SPAN_SAMPLING_RULES_FILE = "span.sampling.rules.file";
5556
// a global rate used for all services (that don’t have a dedicated rule defined).

features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/common/sampling/ForcePrioritySampler.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.datadog.trace.common.sampling;
22

3+
import androidx.annotation.VisibleForTesting;
4+
35
import com.datadog.trace.core.CoreSpan;
46

57
/** A sampler which forces the sampling priority */
68
public class ForcePrioritySampler implements Sampler, PrioritySampler {
79

8-
private final int prioritySampling;
9-
private final int samplingMechanism;
10+
@VisibleForTesting
11+
final int prioritySampling;
12+
13+
@VisibleForTesting
14+
final int samplingMechanism;
1015

1116
public ForcePrioritySampler(final int prioritySampling, final int samplingMechanism) {
1217
this.prioritySampling = prioritySampling;

0 commit comments

Comments
 (0)