use of org.apache.skywalking.apm.agent.core.context.trace.EntrySpan in project incubator-skywalking by apache.
the class TracingContext method createEntrySpan.
/**
* Create an entry span
*
* @param operationName most likely a service name
* @return span instance.
* Ref to {@link EntrySpan}
*/
@Override
public AbstractSpan createEntrySpan(final String operationName) {
if (isLimitMechanismWorking()) {
NoopSpan span = new NoopSpan();
return push(span);
}
AbstractSpan entrySpan;
final AbstractSpan parentSpan = peek();
final int parentSpanId = parentSpan == null ? -1 : parentSpan.getSpanId();
if (parentSpan != null && parentSpan.isEntry()) {
entrySpan = (AbstractTracingSpan) DictionaryManager.findOperationNameCodeSection().findOnly(segment.getApplicationId(), operationName).doInCondition(new PossibleFound.FoundAndObtain() {
@Override
public Object doProcess(int operationId) {
return parentSpan.setOperationId(operationId);
}
}, new PossibleFound.NotFoundAndObtain() {
@Override
public Object doProcess() {
return parentSpan.setOperationName(operationName);
}
});
return entrySpan.start();
} else {
entrySpan = (AbstractTracingSpan) DictionaryManager.findOperationNameCodeSection().findOnly(segment.getApplicationId(), operationName).doInCondition(new PossibleFound.FoundAndObtain() {
@Override
public Object doProcess(int operationId) {
return new EntrySpan(spanIdGenerator++, parentSpanId, operationId);
}
}, new PossibleFound.NotFoundAndObtain() {
@Override
public Object doProcess() {
return new EntrySpan(spanIdGenerator++, parentSpanId, operationName);
}
});
entrySpan.start();
return push(entrySpan);
}
}
use of org.apache.skywalking.apm.agent.core.context.trace.EntrySpan in project incubator-skywalking by apache.
the class TracingContext method extract.
/**
* Extract the carrier to build the reference for the pre segment.
*
* @param carrier carried the context from a cross-process segment.
* Ref to {@link AbstractTracerContext#extract(ContextCarrier)}
*/
@Override
public void extract(ContextCarrier carrier) {
TraceSegmentRef ref = new TraceSegmentRef(carrier);
this.segment.ref(ref);
this.segment.relatedGlobalTraces(carrier.getDistributedTraceId());
AbstractSpan span = this.activeSpan();
if (span instanceof EntrySpan) {
span.ref(ref);
}
}
Aggregations