Skip to content

Commit bbf988d

Browse files
committed
More expected sampling override behavior
1 parent 77b32ad commit bbf988d

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/sampling/AiSampler.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public class AiSampler implements Sampler {
3030
private static final double SAMPLE_RATE_TO_DISABLE_INGESTION_SAMPLING = 99.99;
3131

3232
private final boolean ingestionSamplingEnabled;
33-
private final boolean localParentBased;
33+
private final boolean sampleWhenLocalParentSampled;
34+
private final boolean dropWhenLocalParentDropped;
3435
private final SamplingPercentage requestSamplingPercentage;
3536
// when localParentBased=false, then this applies to all dependencies, not only parentless
3637
private final SamplingPercentage parentlessDependencySamplingPercentage;
@@ -44,18 +45,21 @@ public AiSampler(
4445
requestSamplingPercentage,
4546
parentlessDependencySamplingPercentage,
4647
ingestionSamplingEnabled,
48+
true,
4749
true);
4850
}
4951

5052
public AiSampler(
5153
SamplingPercentage requestSamplingPercentage,
5254
SamplingPercentage parentlessDependencySamplingPercentage,
5355
boolean ingestionSamplingEnabled,
54-
boolean localParentBased) {
56+
boolean sampleWhenLocalParentSampled,
57+
boolean dropWhenLocalParentDropped) {
5558
this.requestSamplingPercentage = requestSamplingPercentage;
5659
this.parentlessDependencySamplingPercentage = parentlessDependencySamplingPercentage;
5760
this.ingestionSamplingEnabled = ingestionSamplingEnabled;
58-
this.localParentBased = localParentBased;
61+
this.sampleWhenLocalParentSampled = sampleWhenLocalParentSampled;
62+
this.dropWhenLocalParentDropped = dropWhenLocalParentDropped;
5963
}
6064

6165
@Override
@@ -66,7 +70,8 @@ public SamplingResult shouldSample(
6670
SpanKind spanKind,
6771
Attributes attributes,
6872
List<LinkData> parentLinks) {
69-
if (localParentBased) {
73+
74+
if (sampleWhenLocalParentSampled || dropWhenLocalParentDropped) {
7075
SamplingResult samplingResult = useLocalParentDecisionIfPossible(parentContext);
7176
if (samplingResult != null) {
7277
return samplingResult;
@@ -114,7 +119,7 @@ public SamplingResult shouldSample(
114119
}
115120

116121
@Nullable
117-
private static SamplingResult useLocalParentDecisionIfPossible(Context parentContext) {
122+
private SamplingResult useLocalParentDecisionIfPossible(Context parentContext) {
118123
// remote parent-based sampling messes up item counts since item count is not propagated in
119124
// tracestate (yet), but local parent-based sampling doesn't have this issue since we are
120125
// propagating item count locally
@@ -124,9 +129,9 @@ private static SamplingResult useLocalParentDecisionIfPossible(Context parentCon
124129
return null;
125130
}
126131
if (!parentSpanContext.isSampled()) {
127-
return SamplingResult.drop();
132+
return dropWhenLocalParentDropped ? SamplingResult.drop() : null;
128133
}
129-
if (parentSpan instanceof ReadableSpan) {
134+
if (sampleWhenLocalParentSampled && parentSpan instanceof ReadableSpan) {
130135
Double parentSampleRate =
131136
((ReadableSpan) parentSpan).getAttribute(AiSemanticAttributes.SAMPLE_RATE);
132137
if (parentSampleRate != null) {

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/sampling/SamplingOverrides.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,16 @@ private MatcherGroup(SamplingOverride override) {
7070
}
7171
}
7272
samplingPercentage = SamplingPercentage.fixed(override.percentage);
73-
sampler = new AiSampler(samplingPercentage, samplingPercentage, false, false);
73+
// setting sampleWhenLocalParentSampled = (override.percentage == 100) would end up the same
74+
boolean sampleWhenLocalParentSampled = false;
75+
boolean dropWhenLocalParentDropped = override.percentage < 100;
76+
sampler =
77+
new AiSampler(
78+
samplingPercentage,
79+
samplingPercentage,
80+
false,
81+
sampleWhenLocalParentSampled,
82+
dropWhenLocalParentDropped);
7483
}
7584

7685
Sampler getSampler() {

0 commit comments

Comments
 (0)