Skip to content

Commit d5ccae2

Browse files
author
Anuraag Agrawal
authored
Don't lock segment from subsegment (#306)
* Don't lock segment from subsegment * synchronized list
1 parent 0fe77bb commit d5ccae2

File tree

3 files changed

+13
-23
lines changed

3 files changed

+13
-23
lines changed

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

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
3737
import com.google.errorprone.annotations.concurrent.GuardedBy;
3838
import java.util.ArrayList;
39+
import java.util.Collections;
3940
import java.util.HashMap;
4041
import java.util.List;
4142
import java.util.Map;
@@ -197,7 +198,7 @@ protected EntityImpl(AWSXRayRecorder creator, String name) {
197198

198199
this.creator = creator;
199200
this.name = name;
200-
this.subsegments = new ArrayList<>();
201+
this.subsegments = Collections.synchronizedList(new ArrayList<>());
201202
this.subsegmentsLock = new ReentrantLock();
202203
this.cause = new Cause();
203204
this.http = new HashMap<>();
@@ -531,25 +532,21 @@ public void setParentId(@Nullable String parentId) {
531532

532533
@Override
533534
public List<Subsegment> getSubsegments() {
534-
synchronized (lock) {
535-
return subsegments;
536-
}
535+
return subsegments;
537536
}
538537

539538
@JsonIgnore
540539
@Override
541540
public List<Subsegment> getSubsegmentsCopy() {
542-
synchronized (lock) {
543-
return new ArrayList<>(subsegments);
544-
}
541+
return new ArrayList<>(subsegments);
545542
}
546543

547544
@Override
548545
public void addSubsegment(Subsegment subsegment) {
549546
synchronized (lock) {
550547
checkAlreadyEmitted();
551-
subsegments.add(subsegment);
552548
}
549+
subsegments.add(subsegment);
553550
}
554551

555552
@Override
@@ -675,8 +672,8 @@ public void incrementReferenceCount() {
675672
synchronized (lock) {
676673
checkAlreadyEmitted();
677674
referenceCount++;
678-
totalSize.increment();
679675
}
676+
totalSize.increment();
680677
}
681678

682679
@Override
@@ -706,9 +703,7 @@ public int getReferenceCount() {
706703
*/
707704
@Override
708705
public LongAdder getTotalSize() {
709-
synchronized (lock) {
710-
return totalSize;
711-
}
706+
return totalSize;
712707
}
713708

714709
/**
@@ -770,10 +765,8 @@ public String prettySerialize() {
770765

771766
@Override
772767
public void removeSubsegment(Subsegment subsegment) {
773-
synchronized (lock) {
774-
subsegments.remove(subsegment);
775-
getParentSegment().getTotalSize().decrement();
776-
}
768+
subsegments.remove(subsegment);
769+
getParentSegment().getTotalSize().decrement();
777770
}
778771

779772

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ public class SegmentImpl extends EntityImpl implements Segment {
3434
protected Map<String, Object> service;
3535

3636
@JsonIgnore
37-
@GuardedBy("lock")
38-
private boolean sampled;
37+
private volatile boolean sampled;
3938

4039
@SuppressWarnings({ "unused", "nullness" })
4140
private SegmentImpl() {
@@ -88,17 +87,15 @@ public boolean isRecording() {
8887

8988
@Override
9089
public boolean isSampled() {
91-
synchronized (lock) {
92-
return sampled;
93-
}
90+
return sampled;
9491
}
9592

9693
@Override
9794
public void setSampled(boolean sampled) {
9895
synchronized (lock) {
9996
checkAlreadyEmitted();
100-
this.sampled = sampled;
10197
}
98+
this.sampled = sampled;
10299
}
103100

104101
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public int getMaxSegmentSize() {
6767
*/
6868
@Override
6969
public boolean requiresStreaming(Segment segment) {
70-
if (segment.isSampled() && null != segment.getTotalSize()) {
70+
if (segment.isSampled()) {
7171
return segment.getTotalSize().intValue() > maxSegmentSize;
7272
}
7373
return false;

0 commit comments

Comments
 (0)