Skip to content

Commit ed31fba

Browse files
author
Anuraag Agrawal
authored
Don't use static client ID to allow multiple xray samplers in same process, usually for testing. (#57)
1 parent 84bef28 commit ed31fba

File tree

5 files changed

+32
-25
lines changed

5 files changed

+32
-25
lines changed

aws-xray/src/awsTest/java/io/opentelemetry/contrib/aws/xray/AwsXrayRemoteSamplerIntegrationTest.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import io.opentelemetry.contrib.awsxray.AwsXrayRemoteSampler;
1111
import io.opentelemetry.sdk.resources.Resource;
1212
import io.opentelemetry.sdk.trace.IdGenerator;
13+
import io.opentelemetry.sdk.trace.samplers.Sampler;
14+
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
1315
import java.time.Duration;
1416
import java.util.Collections;
1517
import org.junit.jupiter.api.Test;
@@ -49,29 +51,38 @@ class AwsXrayRemoteSamplerIntegrationTest {
4951

5052
@Test
5153
void keepSampling() throws Exception {
52-
AwsXrayRemoteSampler sampler =
54+
// Initialize two samplers to try to see centralized reservoir behavior.
55+
AwsXrayRemoteSampler sampler1 =
56+
AwsXrayRemoteSampler.newBuilder(Resource.getDefault())
57+
.setEndpoint("http://localhost:" + otelCollector.getMappedPort(2000))
58+
.setPollingInterval(Duration.ofSeconds(5))
59+
.build();
60+
61+
AwsXrayRemoteSampler sampler2 =
5362
AwsXrayRemoteSampler.newBuilder(Resource.getDefault())
5463
.setEndpoint("http://localhost:" + otelCollector.getMappedPort(2000))
5564
.setPollingInterval(Duration.ofSeconds(5))
5665
.build();
5766

5867
try {
5968
while (true) {
60-
logger.info(
61-
"Sampling Decision: {}",
62-
sampler
63-
.shouldSample(
64-
Context.root(),
65-
IdGenerator.random().generateTraceId(),
66-
"cat-service",
67-
SpanKind.SERVER,
68-
Attributes.empty(),
69-
Collections.emptyList())
70-
.getDecision());
69+
logger.info("[Sampler 1] Sampling Decision: {}", doSample(sampler1).getDecision());
70+
logger.info("[Sampler 2] Sampling Decision: {}", doSample(sampler2).getDecision());
7171
Thread.sleep(500);
7272
}
7373
} finally {
74-
sampler.close();
74+
sampler1.close();
75+
sampler2.close();
7576
}
7677
}
78+
79+
private static SamplingResult doSample(Sampler sampler) {
80+
return sampler.shouldSample(
81+
Context.root(),
82+
IdGenerator.random().generateTraceId(),
83+
"cat-service",
84+
SpanKind.SERVER,
85+
Attributes.empty(),
86+
Collections.emptyList());
87+
}
7788
}

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
@@ -40,14 +40,13 @@ public final class AwsXrayRemoteSampler implements Sampler, Closeable {
4040
private static final Random RANDOM = new Random();
4141
private static final Logger logger = Logger.getLogger(AwsXrayRemoteSampler.class.getName());
4242

43-
// Unique per-process client ID, generated as a random string.
44-
private static final String CLIENT_ID = generateClientId();
45-
4643
private final Resource resource;
4744
private final Clock clock;
4845
private final Sampler initialSampler;
4946
private final XraySamplerClient client;
5047
private final ScheduledExecutorService executor;
48+
// Unique per-sampler client ID, generated as a random string.
49+
private final String clientId;
5150
private final long pollingIntervalNanos;
5251
private final int jitterNanos;
5352

@@ -89,6 +88,8 @@ public static AwsXrayRemoteSamplerBuilder newBuilder(Resource resource) {
8988
return t;
9089
});
9190

91+
clientId = generateClientId();
92+
9293
sampler = initialSampler;
9394

9495
this.pollingIntervalNanos = pollingIntervalNanos;
@@ -123,7 +124,7 @@ private void getAndUpdateSampler() {
123124
if (!response.equals(previousRulesResponse)) {
124125
sampler =
125126
new XrayRulesSampler(
126-
CLIENT_ID,
127+
clientId,
127128
resource,
128129
clock,
129130
initialSampler,

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*/
55
package io.opentelemetry.contrib.awsxray;
66

7-
import com.fasterxml.jackson.annotation.JsonFormat;
87
import com.fasterxml.jackson.annotation.JsonProperty;
98
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
109
import com.google.auto.value.AutoValue;
@@ -47,10 +46,6 @@ static SamplingStatisticsDocument.Builder newBuilder() {
4746
abstract long getSampledCount();
4847

4948
@JsonProperty("Timestamp")
50-
@JsonFormat(
51-
shape = JsonFormat.Shape.STRING,
52-
pattern = "yyyy-MM-dd'T'HH:mm:ss",
53-
timezone = "UTC")
5449
abstract Date getTimestamp();
5550

5651
@AutoValue.Builder

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ String fetchString(
8484
if (responseCode != 200) {
8585
logger.log(
8686
Level.FINE,
87-
"Error reponse from "
87+
"Error response from "
8888
+ urlStr
8989
+ " code ("
9090
+ responseCode

aws-xray/src/test/resources/get-sampling-targets-request.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
{
44
"RuleName":"Test",
55
"ClientID":"ABCDEF1234567890ABCDEF10",
6-
"Timestamp":"2021-06-21T06:46:07",
6+
"Timestamp":1624257967000,
77
"RequestCount":110,
88
"SampledCount":30,
99
"BorrowCount":20
1010
},
1111
{
1212
"RuleName":"polling-scorekeep",
1313
"ClientID":"ABCDEF1234567890ABCDEF11",
14-
"Timestamp":"2018-07-07T00:20:06",
14+
"Timestamp":1530922806000,
1515
"RequestCount":10500,
1616
"SampledCount":31,
1717
"BorrowCount":0

0 commit comments

Comments
 (0)