@@ -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 ) {
0 commit comments