Skip to content

Commit a6946bc

Browse files
committed
use hypothetical resource getter on ExtendedOpenTelemetrySdk
1 parent 661794d commit a6946bc

File tree

4 files changed

+34
-15
lines changed

4 files changed

+34
-15
lines changed

aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSampler.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.util.concurrent.ScheduledExecutorService;
4444
import java.util.concurrent.ScheduledFuture;
4545
import java.util.concurrent.ThreadLocalRandom;
46+
import java.util.function.Supplier;
4647
import java.util.logging.Logger;
4748
import javax.annotation.Nullable;
4849

@@ -56,7 +57,7 @@ public final class AwsXrayRemoteSampler implements Sampler, Closeable {
5657
// Default batch size to be same as OTel BSP default
5758
private static final int maxExportBatchSize = 512;
5859

59-
private final Resource resource;
60+
private final Supplier<Resource> resource;
6061
private final Clock clock;
6162
private final String endpoint;
6263
private final Sampler initialSampler;
@@ -81,12 +82,12 @@ public final class AwsXrayRemoteSampler implements Sampler, Closeable {
8182
*/
8283
// TODO(anuraaga): Deprecate after
8384
// https://github.com/open-telemetry/opentelemetry-specification/issues/1588
84-
public static AwsXrayRemoteSamplerBuilder newBuilder(Resource resource) {
85+
public static AwsXrayRemoteSamplerBuilder newBuilder(Supplier<Resource> resource) {
8586
return new AwsXrayRemoteSamplerBuilder(resource);
8687
}
8788

8889
AwsXrayRemoteSampler(
89-
Resource resource,
90+
Supplier<Resource> resource,
9091
Clock clock,
9192
String endpoint,
9293
Sampler initialSampler,
@@ -296,7 +297,7 @@ XraySamplerClient getClient() {
296297

297298
// Visible for testing
298299
Resource getResource() {
299-
return resource;
300+
return resource.get();
300301
}
301302

302303
@Override

aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayRemoteSamplerBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.opentelemetry.sdk.trace.samplers.Sampler;
1616
import java.time.Duration;
1717
import java.util.concurrent.TimeUnit;
18+
import java.util.function.Supplier;
1819
import javax.annotation.Nullable;
1920

2021
/** A builder for {@link AwsXrayRemoteSampler}. */
@@ -23,14 +24,14 @@ public final class AwsXrayRemoteSamplerBuilder {
2324
private static final String DEFAULT_ENDPOINT = "http://localhost:2000";
2425
private static final long DEFAULT_POLLING_INTERVAL_SECS = 300;
2526

26-
private final Resource resource;
27+
private final Supplier<Resource> resource;
2728

2829
private Clock clock = Clock.getDefault();
2930
private String endpoint = DEFAULT_ENDPOINT;
3031
@Nullable private Sampler initialSampler;
3132
private long pollingIntervalNanos = SECONDS.toNanos(DEFAULT_POLLING_INTERVAL_SECS);
3233

33-
AwsXrayRemoteSamplerBuilder(Resource resource) {
34+
AwsXrayRemoteSamplerBuilder(Supplier<Resource> resource) {
3435
this.resource = resource;
3536
}
3637

aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XrayRulesSampler.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import java.util.Objects;
4242
import java.util.Set;
4343
import java.util.function.Consumer;
44+
import java.util.function.Supplier;
4445
import java.util.logging.Logger;
4546
import javax.annotation.Nullable;
4647

@@ -60,7 +61,7 @@ final class XrayRulesSampler implements Sampler {
6061
private static final AttributeKey<String> HTTP_METHOD = AttributeKey.stringKey("http.method");
6162

6263
private final String clientId;
63-
private final Resource resource;
64+
private final Supplier<Resource> resource;
6465
private final Clock clock;
6566
private final Sampler fallbackSampler;
6667
private final SamplingRuleApplier[] ruleAppliers;
@@ -75,7 +76,7 @@ final class XrayRulesSampler implements Sampler {
7576

7677
XrayRulesSampler(
7778
String clientId,
78-
Resource resource,
79+
Supplier<Resource> resource,
7980
Clock clock,
8081
Sampler fallbackSampler,
8182
List<GetSamplingRulesResponse.SamplingRule> rules,
@@ -91,7 +92,7 @@ final class XrayRulesSampler implements Sampler {
9192
.map(
9293
rule ->
9394
new SamplingRuleApplier(
94-
clientId, rule, resource.getAttribute(SERVICE_NAME), clock))
95+
clientId, rule, resource.get().getAttribute(SERVICE_NAME), clock))
9596
.toArray(SamplingRuleApplier[]::new),
9697
createRuleHashMaps(rules),
9798
rules.stream().anyMatch(r -> r.getSamplingRateBoost() != null),
@@ -105,7 +106,7 @@ final class XrayRulesSampler implements Sampler {
105106

106107
private XrayRulesSampler(
107108
String clientId,
108-
Resource resource,
109+
Supplier<Resource> resource,
109110
Clock clock,
110111
Sampler fallbackSampler,
111112
SamplingRuleApplier[] ruleAppliers,
@@ -161,7 +162,7 @@ public SamplingResult shouldSample(
161162
: null;
162163
}
163164
for (SamplingRuleApplier applier : ruleAppliers) {
164-
if (applier.matches(attributes, resource)) {
165+
if (applier.matches(attributes, resource.get())) {
165166
SamplingResult result =
166167
applier.shouldSample(parentContext, traceId, name, spanKind, attributes, parentLinks);
167168

@@ -263,7 +264,7 @@ void adaptSampling(ReadableSpan span, SpanData spanData, Consumer<ReadableSpan>
263264
ruleToReportTo = applier;
264265
break;
265266
}
266-
if (applier.matches(spanData.getAttributes(), resource)) {
267+
if (applier.matches(spanData.getAttributes(), resource.get())) {
267268
matchedRule = applier;
268269
}
269270
}

aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/internal/AwsXrayRemoteSamplerComponentProvider.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@
99
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1010
import io.opentelemetry.contrib.awsxray.AwsXrayRemoteSampler;
1111
import io.opentelemetry.contrib.awsxray.AwsXrayRemoteSamplerBuilder;
12+
import io.opentelemetry.sdk.OpenTelemetrySdk;
13+
import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener;
1214
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
15+
import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk;
1316
import io.opentelemetry.sdk.resources.Resource;
1417
import io.opentelemetry.sdk.trace.samplers.Sampler;
18+
import java.util.function.Supplier;
1519

1620
/**
1721
* File configuration SPI implementation for {@link AwsXrayRemoteSampler}.
@@ -21,7 +25,13 @@
2125
*/
2226
@SuppressWarnings("rawtypes")
2327
@AutoService(ComponentProvider.class)
24-
public class AwsXrayRemoteSamplerComponentProvider implements ComponentProvider<Sampler> {
28+
public class AwsXrayRemoteSamplerComponentProvider
29+
implements ComponentProvider<Sampler>, AutoConfigureListener {
30+
31+
private Resource resource;
32+
33+
private final Supplier<Resource> resourceSupplier = () -> resource;
34+
2535
@Override
2636
public Class<Sampler> getType() {
2737
return Sampler.class;
@@ -34,8 +44,7 @@ public String getName() {
3444

3545
@Override
3646
public Sampler create(DeclarativeConfigProperties config) {
37-
Resource resource = io.opentelemetry.contrib.awsxray.ResourceHolder.getResource();
38-
AwsXrayRemoteSamplerBuilder builder = AwsXrayRemoteSampler.newBuilder(resource);
47+
AwsXrayRemoteSamplerBuilder builder = AwsXrayRemoteSampler.newBuilder(resourceSupplier);
3948

4049
String endpoint = config.getString("endpoint");
4150
if (endpoint != null) {
@@ -44,4 +53,11 @@ public Sampler create(DeclarativeConfigProperties config) {
4453

4554
return builder.build();
4655
}
56+
57+
@Override
58+
public void afterAutoConfigure(OpenTelemetrySdk sdk) {
59+
if (sdk instanceof ExtendedOpenTelemetrySdk) {
60+
this.resource = ((ExtendedOpenTelemetrySdk) sdk).getResource();
61+
}
62+
}
4763
}

0 commit comments

Comments
 (0)