in aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/AWSXRayRecorder.java [528:568]
public void endSegment() {
SegmentContext context = getSegmentContext();
if (context != null) {
context.endSegment(this);
}
Entity current = getTraceEntity();
if (current != null) {
Segment segment = current.getParentSegment();
// Return immediately if ending a no-op segment
if (!segment.isRecording()) {
clearTraceEntity();
return;
}
logger.debug("Ending segment named '" + segment.getName() + "'.");
segmentListeners
.stream()
.filter(Objects::nonNull)
.forEach(listener -> listener.beforeEndSegment(segment));
if (segment.end()) {
sendSegment(segment);
} else {
logger.debug("Not emitting segment named '" + segment.getName() + "' as it parents in-progress subsegments.");
}
segmentListeners
.stream()
.filter(Objects::nonNull)
.forEach(listener -> listener.afterEndSegment(segment));
clearTraceEntity();
} else {
getContextMissingStrategy().contextMissing("Failed to end segment: segment cannot be found.",
SegmentNotFoundException.class);
}
}