Skip to content

Commit 3e8b607

Browse files
AsakerMohdKielek
andauthored
[Sampler.AWS] Wrapped root sampler with ParentBasedSampler (open-telemetry#2188)
Co-authored-by: Piotr Kiełkowicz <[email protected]>
1 parent ad5d037 commit 3e8b607

File tree

6 files changed

+35
-21
lines changed

6 files changed

+35
-21
lines changed

src/OpenTelemetry.Sampler.AWS/.publicApi/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
OpenTelemetry.Sampler.AWS.AWSXRayRemoteSampler
33
OpenTelemetry.Sampler.AWS.AWSXRayRemoteSampler.Dispose() -> void
44
OpenTelemetry.Sampler.AWS.AWSXRayRemoteSamplerBuilder
5-
OpenTelemetry.Sampler.AWS.AWSXRayRemoteSamplerBuilder.Build() -> OpenTelemetry.Sampler.AWS.AWSXRayRemoteSampler!
5+
OpenTelemetry.Sampler.AWS.AWSXRayRemoteSamplerBuilder.Build() -> OpenTelemetry.Trace.Sampler!
66
OpenTelemetry.Sampler.AWS.AWSXRayRemoteSamplerBuilder.SetEndpoint(string! endpoint) -> OpenTelemetry.Sampler.AWS.AWSXRayRemoteSamplerBuilder!
77
OpenTelemetry.Sampler.AWS.AWSXRayRemoteSamplerBuilder.SetPollingInterval(System.TimeSpan pollingInterval) -> OpenTelemetry.Sampler.AWS.AWSXRayRemoteSamplerBuilder!
88
override OpenTelemetry.Sampler.AWS.AWSXRayRemoteSampler.ShouldSample(in OpenTelemetry.Trace.SamplingParameters samplingParameters) -> OpenTelemetry.Trace.SamplingResult

src/OpenTelemetry.Sampler.AWS/AWSXRayRemoteSamplerBuilder.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
using OpenTelemetry.Resources;
5+
using OpenTelemetry.Trace;
56

67
namespace OpenTelemetry.Sampler.AWS;
78

@@ -66,10 +67,11 @@ public AWSXRayRemoteSamplerBuilder SetEndpoint(string endpoint)
6667
/// <summary>
6768
/// Returns a <see cref="AWSXRayRemoteSampler"/> with configuration of this builder.
6869
/// </summary>
69-
/// <returns>an instance of <see cref="AWSXRayRemoteSampler"/>.</returns>
70-
public AWSXRayRemoteSampler Build()
70+
/// <returns>an instance of <see cref="Trace.Sampler"/>.</returns>
71+
public Trace.Sampler Build()
7172
{
72-
return new AWSXRayRemoteSampler(this.resource, this.pollingInterval, this.endpoint, this.clock);
73+
var rootSampler = new AWSXRayRemoteSampler(this.resource, this.pollingInterval, this.endpoint, this.clock);
74+
return new ParentBasedSampler(rootSampler);
7375
}
7476

7577
// This is intended for testing with a mock clock.

src/OpenTelemetry.Sampler.AWS/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
* Updated OpenTelemetry core component version(s) to `1.10.0`.
1818
([#2317](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2317))
1919

20+
* `AWSXRayRemoteSamplerBuilder.Build()` now returns `ParentBasedSampler` which
21+
which is of type `Sampler` instead of `AWSXRayRemoteSampler`.
22+
([#2188](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2188))
23+
2024
## 0.1.0-alpha.2
2125

2226
Released 2024-Sep-09

src/OpenTelemetry.Sampler.AWS/FallbackSampler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ internal class FallbackSampler : Trace.Sampler
1212

1313
public FallbackSampler(Clock clock)
1414
{
15-
this.reservoirSampler = new ParentBasedSampler(new RateLimitingSampler(1, clock));
16-
this.fixedRateSampler = new ParentBasedSampler(new TraceIdRatioBasedSampler(0.05));
15+
this.reservoirSampler = new RateLimitingSampler(1, clock);
16+
this.fixedRateSampler = new TraceIdRatioBasedSampler(0.05);
1717
}
1818

1919
public override SamplingResult ShouldSample(in SamplingParameters samplingParameters)

src/OpenTelemetry.Sampler.AWS/SamplingRuleApplier.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public SamplingRuleApplier(string clientId, Clock clock, SamplingRule rule, Stat
2020
{
2121
// Until calling GetSamplingTargets, the default is to borrow 1/s if reservoir size is
2222
// positive.
23-
this.ReservoirSampler = new ParentBasedSampler(new RateLimitingSampler(1, this.Clock));
23+
this.ReservoirSampler = new RateLimitingSampler(1, this.Clock);
2424
this.Borrowing = true;
2525
}
2626
else
@@ -30,7 +30,7 @@ public SamplingRuleApplier(string clientId, Clock clock, SamplingRule rule, Stat
3030
this.Borrowing = false;
3131
}
3232

33-
this.FixedRateSampler = new ParentBasedSampler(new TraceIdRatioBasedSampler(rule.FixedRate));
33+
this.FixedRateSampler = new TraceIdRatioBasedSampler(rule.FixedRate);
3434

3535
// We either have no reservoir sampling or borrow until we get a quota so have no end time.
3636
this.ReservoirEndTime = DateTimeOffset.MaxValue;
@@ -191,15 +191,15 @@ public SamplingStatisticsDocument Snapshot(DateTimeOffset now)
191191
public SamplingRuleApplier WithTarget(SamplingTargetDocument target, DateTimeOffset now)
192192
{
193193
var newFixedRateSampler = target.FixedRate != null
194-
? new ParentBasedSampler(new TraceIdRatioBasedSampler(target.FixedRate.Value))
194+
? new TraceIdRatioBasedSampler(target.FixedRate.Value)
195195
: this.FixedRateSampler;
196196

197197
Trace.Sampler newReservoirSampler = new AlwaysOffSampler();
198198
var newReservoirEndTime = DateTimeOffset.MaxValue;
199199
if (target.ReservoirQuota != null && target.ReservoirQuotaTTL != null)
200200
{
201201
newReservoirSampler = target.ReservoirQuota > 0
202-
? new ParentBasedSampler(new RateLimitingSampler(target.ReservoirQuota.Value, this.Clock))
202+
? new RateLimitingSampler(target.ReservoirQuota.Value, this.Clock)
203203
: new AlwaysOffSampler();
204204

205205
newReservoirEndTime = this.Clock.ToDateTime(target.ReservoirQuotaTTL.Value);

test/OpenTelemetry.Sampler.AWS.Tests/TestAWSXRayRemoteSampler.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
using System.Diagnostics;
5+
using System.Reflection;
56
using OpenTelemetry.Resources;
67
using OpenTelemetry.Trace;
78
using WireMock.RequestBuilders;
@@ -18,27 +19,34 @@ public void TestSamplerWithConfiguration()
1819
{
1920
var pollingInterval = TimeSpan.FromSeconds(5);
2021
var endpoint = "http://localhost:3000";
21-
22-
var sampler = AWSXRayRemoteSampler.Builder(ResourceBuilder.CreateEmpty().Build())
22+
var parentBasedSampler = AWSXRayRemoteSampler.Builder(ResourceBuilder.CreateEmpty().Build())
2323
.SetPollingInterval(pollingInterval)
2424
.SetEndpoint(endpoint)
2525
.Build();
2626

27-
Assert.Equal(pollingInterval, sampler.PollingInterval);
28-
Assert.Equal(endpoint, sampler.Endpoint);
29-
Assert.NotNull(sampler.RulePollerTimer);
30-
Assert.NotNull(sampler.Client);
27+
FieldInfo? rootSamplerFieldInfo = typeof(ParentBasedSampler).GetField("rootSampler", BindingFlags.NonPublic | BindingFlags.Instance);
28+
29+
var xraySampler = (AWSXRayRemoteSampler?)rootSamplerFieldInfo?.GetValue(parentBasedSampler);
30+
31+
Assert.Equal(pollingInterval, xraySampler?.PollingInterval);
32+
Assert.Equal(endpoint, xraySampler?.Endpoint);
33+
Assert.NotNull(xraySampler?.RulePollerTimer);
34+
Assert.NotNull(xraySampler?.Client);
3135
}
3236

3337
[Fact]
3438
public void TestSamplerWithDefaults()
3539
{
36-
var sampler = AWSXRayRemoteSampler.Builder(ResourceBuilder.CreateEmpty().Build()).Build();
40+
var parentBasedSampler = AWSXRayRemoteSampler.Builder(ResourceBuilder.CreateEmpty().Build()).Build();
41+
42+
FieldInfo? rootSamplerFieldInfo = typeof(ParentBasedSampler).GetField("rootSampler", BindingFlags.NonPublic | BindingFlags.Instance);
43+
44+
var xraySampler = (AWSXRayRemoteSampler?)rootSamplerFieldInfo?.GetValue(parentBasedSampler);
3745

38-
Assert.Equal(TimeSpan.FromMinutes(5), sampler.PollingInterval);
39-
Assert.Equal("http://localhost:2000", sampler.Endpoint);
40-
Assert.NotNull(sampler.RulePollerTimer);
41-
Assert.NotNull(sampler.Client);
46+
Assert.Equal(TimeSpan.FromMinutes(5), xraySampler?.PollingInterval);
47+
Assert.Equal("http://localhost:2000", xraySampler?.Endpoint);
48+
Assert.NotNull(xraySampler?.RulePollerTimer);
49+
Assert.NotNull(xraySampler?.Client);
4250
}
4351

4452
[Fact(Skip = "Flaky test. Related issue: https://github.com/open-telemetry/opentelemetry-dotnet-contrib/issues/1219")]

0 commit comments

Comments
 (0)