public void endSubsegment()

in aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/contexts/ThreadLocalSegmentContext.java [63:99]


    public void endSubsegment(AWSXRayRecorder recorder) {
        Entity current = getTraceEntity();
        if (current instanceof Subsegment) {
            if (logger.isDebugEnabled()) {
                if (current.getName().isEmpty() && !current.getParentSegment().isSampled()) {
                    logger.debug("Ending no-op subsegment");
                } else {
                    logger.debug("Ending subsegment named: " + current.getName());
                }
            }
            Subsegment currentSubsegment = (Subsegment) current;

            List<SegmentListener> segmentListeners = recorder.getSegmentListeners();
            segmentListeners
                    .stream()
                    .filter(Objects::nonNull)
                    .forEach(listener -> listener.beforeEndSubsegment(currentSubsegment));

            if (currentSubsegment.end() && currentSubsegment.isSampled()) {
                recorder.sendSegment(currentSubsegment.getParentSegment());
            } else {
                if (recorder.getStreamingStrategy().requiresStreaming(currentSubsegment.getParentSegment())) {
                    recorder.getStreamingStrategy().streamSome(currentSubsegment.getParentSegment(), recorder.getEmitter());
                }

                segmentListeners
                        .stream()
                        .filter(Objects::nonNull)
                        .forEach(listener -> listener.afterEndSubsegment(currentSubsegment));

                setTraceEntity(current.getParent());
            }
        } else {
            recorder.getContextMissingStrategy().contextMissing("Failed to end subsegment: subsegment cannot be found.",
                                                                SubsegmentNotFoundException.class);
        }
    }