Skip to content

Commit d1ff46f

Browse files
[Lambda] Do not propagate trace header if dummy subsegment (#404)
1 parent c275035 commit d1ff46f

File tree

6 files changed

+19
-8
lines changed

6 files changed

+19
-8
lines changed

aws-xray-recorder-sdk-apache-http/src/main/java/com/amazonaws/xray/proxies/apache/http/TracedHttpClient.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.amazonaws.xray.AWSXRay;
1919
import com.amazonaws.xray.AWSXRayRecorder;
2020
import com.amazonaws.xray.entities.Namespace;
21+
import com.amazonaws.xray.entities.NoOpSubSegment;
2122
import com.amazonaws.xray.entities.Segment;
2223
import com.amazonaws.xray.entities.Subsegment;
2324
import com.amazonaws.xray.entities.TraceHeader;
@@ -103,7 +104,7 @@ public static void addRequestInformation(Subsegment subsegment, HttpRequest requ
103104
subsegment.setNamespace(Namespace.REMOTE.toString());
104105
Segment parentSegment = subsegment.getParentSegment();
105106

106-
if (subsegment.shouldPropagate()) {
107+
if (!(subsegment instanceof NoOpSubSegment) && subsegment.shouldPropagate()) {
107108
request.addHeader(TraceHeader.HEADER_KEY, TraceHeader.fromEntity(subsegment).toString());
108109
}
109110

aws-xray-recorder-sdk-apache-http/src/test/java/com/amazonaws/xray/proxies/apache/http/TracedHttpClientTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void unsampledPropagation() throws Exception {
9999

100100
verify(getRequestedFor(urlPathEqualTo("/"))
101101
.withHeader(TraceHeader.HEADER_KEY,
102-
equalTo("Root=1-00000000-000000000000000000000000;Sampled=0")));
102+
equalTo("Root=1-67891233-abcdef012345678912345678;Sampled=0")));
103103
}
104104

105105
@Test

aws-xray-recorder-sdk-aws-sdk-v2/src/main/java/com/amazonaws/xray/interceptors/TracingInterceptor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.amazonaws.xray.entities.EntityDataKeys;
2222
import com.amazonaws.xray.entities.EntityHeaderKeys;
2323
import com.amazonaws.xray.entities.Namespace;
24+
import com.amazonaws.xray.entities.NoOpSubSegment;
2425
import com.amazonaws.xray.entities.Subsegment;
2526
import com.amazonaws.xray.entities.TraceHeader;
2627
import com.amazonaws.xray.handlers.config.AWSOperationHandler;
@@ -292,7 +293,7 @@ public SdkHttpRequest modifyHttpRequest(Context.ModifyHttpRequest context, Execu
292293
}
293294

294295
Subsegment subsegment = executionAttributes.getAttribute(entityKey);
295-
if (!subsegment.shouldPropagate()) {
296+
if (!subsegment.shouldPropagate() || subsegment instanceof NoOpSubSegment) {
296297
return httpRequest;
297298
}
298299

aws-xray-recorder-sdk-aws-sdk/src/main/java/com/amazonaws/xray/handlers/TracingHandler.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.amazonaws.xray.entities.EntityDataKeys;
3232
import com.amazonaws.xray.entities.EntityHeaderKeys;
3333
import com.amazonaws.xray.entities.Namespace;
34+
import com.amazonaws.xray.entities.NoOpSubSegment;
3435
import com.amazonaws.xray.entities.Subsegment;
3536
import com.amazonaws.xray.entities.TraceHeader;
3637
import com.amazonaws.xray.handlers.config.AWSOperationHandler;
@@ -191,7 +192,9 @@ public void beforeRequest(Request<?> request) {
191192
}
192193
currentSubsegment.setNamespace(Namespace.AWS.toString());
193194

194-
if (recorder.getCurrentSegment() != null && recorder.getCurrentSubsegment().shouldPropagate()) {
195+
if (recorder.getCurrentSegment() != null &&
196+
!(currentSubsegment instanceof NoOpSubSegment) &&
197+
recorder.getCurrentSubsegment().shouldPropagate()) {
195198
request.addHeader(TraceHeader.HEADER_KEY, TraceHeader.fromEntity(currentSubsegment).toString());
196199
}
197200
}

aws-xray-recorder-sdk-aws-sdk/src/test/java/com/amazonaws/xray/handlers/TracingHandlerLambdaTest.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.amazonaws.xray.emitters.DefaultEmitter;
3131
import com.amazonaws.xray.emitters.Emitter;
3232
import com.amazonaws.xray.entities.Subsegment;
33+
import com.amazonaws.xray.entities.SubsegmentImpl;
3334
import com.amazonaws.xray.entities.TraceHeader;
3435
import com.amazonaws.xray.strategy.sampling.NoSamplingStrategy;
3536
import org.junit.FixMethodOrder;
@@ -137,12 +138,17 @@ public static void lambdaTestHelper(AWSXRayRecorder recorder, String name, boole
137138
TraceHeader traceHeader = TraceHeader.fromString(request.getHeaders().get(TraceHeader.HEADER_KEY));
138139
String serviceEntityId = recorder.getCurrentSubsegment().getId();
139140

140-
assertThat(traceHeader.getSampled()).isEqualTo(
141+
if (!sampled) {
142+
assertThat(subsegment).isInstanceOf(SubsegmentImpl.class);
143+
} else {
144+
assertThat(subsegment).isInstanceOf(SubsegmentImpl.class);
145+
assertThat(traceHeader.getRootTraceId()).isEqualTo(subsegment.getTraceId());
146+
assertThat(traceHeader.getParentId()).isEqualTo(subsegment.isSampled() ? serviceEntityId : null);
147+
assertThat(traceHeader.getSampled()).isEqualTo(
141148
subsegment.isSampled() ?
142149
TraceHeader.SampleDecision.SAMPLED :
143150
TraceHeader.SampleDecision.NOT_SAMPLED);
144-
assertThat(traceHeader.getRootTraceId()).isEqualTo(subsegment.getTraceId());
145-
assertThat(traceHeader.getParentId()).isEqualTo(subsegment.isSampled() ? serviceEntityId : null);
151+
}
146152

147153
tracingHandler.afterResponse(request, new Response(new InvokeResult(), new HttpResponse(request, null)));
148154

aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/entities/NoOpSubSegment.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import java.util.concurrent.locks.ReentrantLock;
2626
import org.checkerframework.checker.nullness.qual.Nullable;
2727

28-
class NoOpSubSegment implements Subsegment {
28+
public class NoOpSubSegment implements Subsegment {
2929
private final Segment parentSegment;
3030
private final AWSXRayRecorder creator;
3131
private final boolean shouldPropagate;

0 commit comments

Comments
 (0)