Skip to content

Commit 69de3dc

Browse files
Revert #403 and #404 (#407)
1 parent 63ace4a commit 69de3dc

File tree

9 files changed

+29
-71
lines changed

9 files changed

+29
-71
lines changed

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
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;
2221
import com.amazonaws.xray.entities.Segment;
2322
import com.amazonaws.xray.entities.Subsegment;
2423
import com.amazonaws.xray.entities.TraceHeader;
@@ -104,7 +103,7 @@ public static void addRequestInformation(Subsegment subsegment, HttpRequest requ
104103
subsegment.setNamespace(Namespace.REMOTE.toString());
105104
Segment parentSegment = subsegment.getParentSegment();
106105

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

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-67891233-abcdef012345678912345678;Sampled=0")));
102+
equalTo("Root=1-00000000-000000000000000000000000;Sampled=0")));
103103
}
104104

105105
@Test

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
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;
2524
import com.amazonaws.xray.entities.Subsegment;
2625
import com.amazonaws.xray.entities.TraceHeader;
2726
import com.amazonaws.xray.handlers.config.AWSOperationHandler;
@@ -293,7 +292,7 @@ public SdkHttpRequest modifyHttpRequest(Context.ModifyHttpRequest context, Execu
293292
}
294293

295294
Subsegment subsegment = executionAttributes.getAttribute(entityKey);
296-
if (!subsegment.shouldPropagate() || subsegment instanceof NoOpSubSegment) {
295+
if (!subsegment.shouldPropagate()) {
297296
return httpRequest;
298297
}
299298

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

+1-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
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;
3534
import com.amazonaws.xray.entities.Subsegment;
3635
import com.amazonaws.xray.entities.TraceHeader;
3736
import com.amazonaws.xray.handlers.config.AWSOperationHandler;
@@ -192,9 +191,7 @@ public void beforeRequest(Request<?> request) {
192191
}
193192
currentSubsegment.setNamespace(Namespace.AWS.toString());
194193

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

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

+3-9
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
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;
3433
import com.amazonaws.xray.entities.TraceHeader;
3534
import com.amazonaws.xray.strategy.sampling.NoSamplingStrategy;
3635
import org.junit.FixMethodOrder;
@@ -138,17 +137,12 @@ public static void lambdaTestHelper(AWSXRayRecorder recorder, String name, boole
138137
TraceHeader traceHeader = TraceHeader.fromString(request.getHeaders().get(TraceHeader.HEADER_KEY));
139138
String serviceEntityId = recorder.getCurrentSubsegment().getId();
140139

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(
140+
assertThat(traceHeader.getSampled()).isEqualTo(
148141
subsegment.isSampled() ?
149142
TraceHeader.SampleDecision.SAMPLED :
150143
TraceHeader.SampleDecision.NOT_SAMPLED);
151-
}
144+
assertThat(traceHeader.getRootTraceId()).isEqualTo(subsegment.getTraceId());
145+
assertThat(traceHeader.getParentId()).isEqualTo(subsegment.isSampled() ? serviceEntityId : null);
152146

153147
tracingHandler.afterResponse(request, new Response(new InvokeResult(), new HttpResponse(request, null)));
154148

aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/contexts/LambdaSegmentContext.java

+16-22
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
import com.amazonaws.xray.AWSXRayRecorder;
1919
import com.amazonaws.xray.entities.Entity;
2020
import com.amazonaws.xray.entities.FacadeSegment;
21-
import com.amazonaws.xray.entities.NoOpSegment;
2221
import com.amazonaws.xray.entities.Segment;
2322
import com.amazonaws.xray.entities.Subsegment;
2423
import com.amazonaws.xray.entities.SubsegmentImpl;
2524
import com.amazonaws.xray.entities.TraceHeader;
25+
import com.amazonaws.xray.entities.TraceHeader.SampleDecision;
2626
import com.amazonaws.xray.entities.TraceID;
2727
import com.amazonaws.xray.exceptions.SubsegmentNotFoundException;
2828
import com.amazonaws.xray.listeners.SegmentListener;
@@ -35,44 +35,40 @@ public class LambdaSegmentContext implements SegmentContext {
3535
private static final Log logger = LogFactory.getLog(LambdaSegmentContext.class);
3636

3737
private static final String LAMBDA_TRACE_HEADER_KEY = "_X_AMZN_TRACE_ID";
38-
38+
3939
// See: https://github.com/aws/aws-xray-sdk-java/issues/251
4040
private static final String LAMBDA_TRACE_HEADER_PROP = "com.amazonaws.xray.traceHeader";
4141

4242
private static TraceHeader getTraceHeaderFromEnvironment() {
4343
String lambdaTraceHeaderKey = System.getenv(LAMBDA_TRACE_HEADER_KEY);
44-
return TraceHeader.fromString(lambdaTraceHeaderKey != null && lambdaTraceHeaderKey.length() > 0
45-
? lambdaTraceHeaderKey
44+
return TraceHeader.fromString(lambdaTraceHeaderKey != null && lambdaTraceHeaderKey.length() > 0
45+
? lambdaTraceHeaderKey
4646
: System.getProperty(LAMBDA_TRACE_HEADER_PROP));
4747
}
4848

4949
private static boolean isInitializing(TraceHeader traceHeader) {
5050
return traceHeader.getRootTraceId() == null || traceHeader.getSampled() == null || traceHeader.getParentId() == null;
5151
}
5252

53+
private static FacadeSegment newFacadeSegment(AWSXRayRecorder recorder, String name) {
54+
TraceHeader traceHeader = getTraceHeaderFromEnvironment();
55+
if (isInitializing(traceHeader)) {
56+
logger.warn(LAMBDA_TRACE_HEADER_KEY + " is missing a trace ID, parent ID, or sampling decision. Subsegment "
57+
+ name + " discarded.");
58+
return new FacadeSegment(recorder, TraceID.create(recorder), "", SampleDecision.NOT_SAMPLED);
59+
}
60+
return new FacadeSegment(recorder, traceHeader.getRootTraceId(), traceHeader.getParentId(), traceHeader.getSampled());
61+
}
62+
5363
@Override
5464
public Subsegment beginSubsegment(AWSXRayRecorder recorder, String name) {
5565
if (logger.isDebugEnabled()) {
5666
logger.debug("Beginning subsegment named: " + name);
5767
}
5868

59-
TraceHeader traceHeader = LambdaSegmentContext.getTraceHeaderFromEnvironment();
6069
Entity entity = getTraceEntity();
61-
if (entity == null) { // First subsegment of a subsegment branch
62-
Segment parentSegment;
63-
if (isInitializing(traceHeader)) {
64-
if (logger.isDebugEnabled()) {
65-
logger.debug("Creating No-Op parent segment");
66-
}
67-
parentSegment = Segment.noOp(TraceID.create(recorder), recorder);
68-
} else {
69-
parentSegment = new FacadeSegment(
70-
recorder,
71-
traceHeader.getRootTraceId(),
72-
traceHeader.getParentId(),
73-
traceHeader.getSampled()
74-
);
75-
}
70+
if (entity == null) { // First subsgment of a subsegment branch.
71+
Segment parentSegment = newFacadeSegment(recorder, name);
7672

7773
boolean isRecording = parentSegment.isRecording();
7874

@@ -149,8 +145,6 @@ public void endSubsegment(AWSXRayRecorder recorder) {
149145
current.getCreator().getEmitter().sendSubsegment((Subsegment) current);
150146
}
151147
clearTraceEntity();
152-
} else if (parentEntity instanceof NoOpSegment) {
153-
clearTraceEntity();
154148
} else {
155149
setTraceEntity(current.getParent());
156150
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import java.util.concurrent.locks.ReentrantLock;
2323
import org.checkerframework.checker.nullness.qual.Nullable;
2424

25-
public class NoOpSegment implements Segment {
25+
class NoOpSegment implements Segment {
2626

2727
private final TraceID traceId;
2828
private final AWSXRayRecorder creator;

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-
public class NoOpSubSegment implements Subsegment {
28+
class NoOpSubSegment implements Subsegment {
2929
private final Segment parentSegment;
3030
private final AWSXRayRecorder creator;
3131
private final boolean shouldPropagate;

aws-xray-recorder-sdk-core/src/test/java/com/amazonaws/xray/contexts/LambdaSegmentContextTest.java

+4-29
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.amazonaws.xray.AWSXRayRecorderBuilder;
2323
import com.amazonaws.xray.emitters.Emitter;
2424
import com.amazonaws.xray.entities.FacadeSegment;
25-
import com.amazonaws.xray.entities.NoOpSegment;
2625
import com.amazonaws.xray.entities.Subsegment;
2726
import com.amazonaws.xray.exceptions.SubsegmentNotFoundException;
2827
import com.amazonaws.xray.strategy.LogErrorContextMissingStrategy;
@@ -50,10 +49,6 @@ class LambdaSegmentContextTest {
5049

5150
private static final String MALFORMED_TRACE_HEADER =
5251
";;Root=1-57ff426a-80c11c39b0c928905eb0828d;;Parent=1234abcd1234abcd;;;Sampled=1;;;";
53-
private static final String MALFORMED_TRACE_HEADER_2 = ";;root-missing;;Parent=1234abcd1234abcd;;;Sampled=1;;;";
54-
55-
private static final String ROOT_LAMBDA_PASSTHROUGH_TRACE_HEADER =
56-
"Root=1-5759e988-bd862e3fe1be46a994272711;Lineage=10:1234abcd:3";
5752

5853
@BeforeEach
5954
public void setupAWSXRay() {
@@ -68,14 +63,14 @@ public void setupAWSXRay() {
6863
}
6964

7065
@Test
71-
void testBeginSubsegmentWithNullTraceHeaderEnvironmentVariableResultsInANoOpSegmentParent() {
72-
testContextResultsInNoOpSegmentParent();
66+
void testBeginSubsegmentWithNullTraceHeaderEnvironmentVariableResultsInAFacadeSegmentParent() {
67+
testContextResultsInFacadeSegmentParent();
7368
}
7469

7570
@Test
7671
@SetEnvironmentVariable(key = "_X_AMZN_TRACE_ID", value = "a")
77-
void testBeginSubsegmentWithIncompleteTraceHeaderEnvironmentVariableResultsInANoOpSegmentParent() {
78-
testContextResultsInNoOpSegmentParent();
72+
void testBeginSubsegmentWithIncompleteTraceHeaderEnvironmentVariableResultsInAFacadeSegmentParent() {
73+
testContextResultsInFacadeSegmentParent();
7974
}
8075

8176
@Test
@@ -90,18 +85,6 @@ void testBeginSubsegmentWithCompleteButMalformedTraceHeaderEnvironmentVariableRe
9085
testContextResultsInFacadeSegmentParent();
9186
}
9287

93-
@Test
94-
@SetEnvironmentVariable(key = "_X_AMZN_TRACE_ID", value = MALFORMED_TRACE_HEADER_2)
95-
void testBeginSubsegmentWithIncompleteAndMalformedTraceHeaderEnvironmentVariableResultsInANoOpSegmentParent() {
96-
testContextResultsInNoOpSegmentParent();
97-
}
98-
99-
@Test
100-
@SetEnvironmentVariable(key = "_X_AMZN_TRACE_ID", value = ROOT_LAMBDA_PASSTHROUGH_TRACE_HEADER)
101-
void testBeginSubsegmentWithRootLambdaPassthroughTraceHeaderEnvironmentVariableResultsInANoOpSegmentParent() {
102-
testContextResultsInNoOpSegmentParent();
103-
}
104-
10588
@Test
10689
@SetEnvironmentVariable(key = "_X_AMZN_TRACE_ID", value = TRACE_HEADER_2)
10790
void testNotSampledSetsParentToSubsegment() {
@@ -166,12 +149,4 @@ private static void testContextResultsInFacadeSegmentParent() {
166149
mockContext.endSubsegment(AWSXRay.getGlobalRecorder());
167150
assertThat(AWSXRay.getTraceEntity()).isNull();
168151
}
169-
170-
private static void testContextResultsInNoOpSegmentParent() {
171-
LambdaSegmentContext mockContext = new LambdaSegmentContext();
172-
assertThat(mockContext.beginSubsegment(AWSXRay.getGlobalRecorder(), "test").getParent())
173-
.isInstanceOf(NoOpSegment.class);
174-
mockContext.endSubsegment(AWSXRay.getGlobalRecorder());
175-
assertThat(AWSXRay.getTraceEntity()).isNull();
176-
}
177152
}

0 commit comments

Comments
 (0)