Skip to content

Commit 8992822

Browse files
author
Anuraag Agrawal
authored
Don't attempt to cast to HashMap when Map can do, and also make sure runtimeContext isn't poisoned by a Segment. (#202)
1 parent 38f038c commit 8992822

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ private Segment beginSegment(Segment segment) {
475475
+ "named '" + current.getName() + "' to start new segment named '" + segment.getName() + "'.");
476476
}
477477

478-
segment.setAws(getAwsRuntimeContext());
478+
segment.putAllAws(getAwsRuntimeContext());
479479
if (origin != null) {
480480
segment.setOrigin(origin);
481481
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void setRuleName(String ruleName) {
149149
checkAlreadyEmitted();
150150
if (getAws().get("xray") instanceof Map) {
151151
@SuppressWarnings("unchecked")
152-
Map<String, Object> a = (HashMap<String, Object>) getAws().get("xray");
152+
Map<String, Object> a = (Map<String, Object>) getAws().get("xray");
153153
HashMap<String, Object> referA = new HashMap<>();
154154
if (a != null) {
155155
referA.putAll(a);

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,26 @@ public void testSubsegmentEmittedInLambdaContext() throws JSONException {
334334
captured.getEndTime()).toString(), captured.streamSerialize(), JSONCompareMode.NON_EXTENSIBLE);
335335
}
336336

337+
@Test
338+
public void testBeginSegment_awsRuntimeContextNotMutableBySegment() {
339+
Segment segment = AWSXRay.beginSegment("test");
340+
segment.putAws("foo", "bar");
341+
assertThat(segment.getAws().get("foo")).isEqualTo("bar");
342+
AWSXRay.endSegment();
343+
344+
segment = AWSXRay.beginSegment("test");
345+
assertThat(segment.getAws().get("foo")).isNull();
346+
AWSXRay.endSegment();
347+
}
348+
349+
@Test
350+
public void testBeginSegment_canSetRuleName() {
351+
Segment segment = AWSXRay.beginSegment("test");
352+
segment.setRuleName("rule");
353+
assertThat(segment.getAws().get("xray")).isInstanceOfSatisfying(
354+
Map.class, xray -> assertThat(xray.get("rule_name")).isEqualTo("rule"));
355+
}
356+
337357
private ObjectNode expectedLambdaSubsegment(
338358
TraceID traceId, String segmentId, String subsegmentId, double startTime, double endTime) {
339359
ObjectNode expected = JsonNodeFactory.instance.objectNode();

0 commit comments

Comments
 (0)