in xray/default_streaming_strategy.go [56:86]
func (dSS *DefaultStreamingStrategy) StreamCompletedSubsegments(seg *Segment) [][]byte {
logger.Debug("Beginning to stream subsegments.")
var outSegments [][]byte
for i := 0; i < len(seg.rawSubsegments); i++ {
child := seg.rawSubsegments[i]
seg.rawSubsegments[i] = seg.rawSubsegments[len(seg.rawSubsegments)-1]
seg.rawSubsegments[len(seg.rawSubsegments)-1] = nil
seg.rawSubsegments = seg.rawSubsegments[:len(seg.rawSubsegments)-1]
seg.Subsegments[i] = seg.Subsegments[len(seg.Subsegments)-1]
seg.Subsegments[len(seg.Subsegments)-1] = nil
seg.Subsegments = seg.Subsegments[:len(seg.Subsegments)-1]
atomic.AddUint32(&seg.ParentSegment.totalSubSegments, ^uint32(0))
// Add extra information into child subsegment
child.Lock()
child.beforeEmitSubsegment(seg)
cb, err := json.Marshal(child)
if err != nil {
logger.Errorf("JSON error while marshalling subsegment: %v", err)
}
outSegments = append(outSegments, cb)
logger.Debugf("Streaming subsegment named '%s' from segment tree.", child.Name)
child.Unlock()
break
}
logger.Debug("Finished streaming subsegments.")
return outSegments
}