in skywalking/trace/context.py [0:0]
def new_span(self, parent: Optional[Span], SpanType: type, **kwargs) -> Span: # noqa
finished = parent and not parent.depth
context = SpanContext() if finished else self
span = SpanType(context=context,
sid=context._sid.next(),
pid=parent.sid if parent and not finished else -1,
**kwargs)
# if parent finished and segment was archived before this child starts then we need to refer to parent
if finished:
carrier = Carrier(
trace_id=str(parent.context.segment.related_traces[0]),
segment_id=str(parent.context.segment.segment_id),
span_id=str(parent.sid),
service=config.agent_name,
service_instance=config.agent_instance_name,
endpoint=parent.op,
client_address=parent.peer,
correlation=parent.context._correlation,
)
Span.extract(span, carrier)
return span