Add new extract method.
This commit is contained in:
parent
0a7369b2ab
commit
f2fb5ca9fa
|
|
@ -87,22 +87,40 @@ public class TraceSegment implements ISerializable<SegmentMessage> {
|
|||
|
||||
/**
|
||||
* Establish the link between this segment and its parents.
|
||||
* When {@param primaryOnly} is true;
|
||||
* The first time, you {@link #ref(TraceSegmentRef)} to parent, it is affirmed as {@link #primaryRef}.
|
||||
* And others are affirmed as {@link #refs}.
|
||||
*
|
||||
* @param refSegment {@link TraceSegmentRef}
|
||||
* @param primaryOnly if true, set {@param refSegment} to {@link #primaryRef} only.
|
||||
*/
|
||||
public void ref(TraceSegmentRef refSegment) {
|
||||
if (primaryRef == null) {
|
||||
primaryRef = refSegment;
|
||||
} else {
|
||||
if (refs == null) {
|
||||
refs = new LinkedList<TraceSegmentRef>();
|
||||
public void ref(TraceSegmentRef refSegment, boolean primaryOnly) {
|
||||
if(primaryOnly){
|
||||
if (primaryRef == null) {
|
||||
primaryRef = refSegment;
|
||||
}
|
||||
}else {
|
||||
if (primaryRef == null) {
|
||||
primaryRef = refSegment;
|
||||
} else {
|
||||
if (refs == null) {
|
||||
refs = new LinkedList<TraceSegmentRef>();
|
||||
}
|
||||
refs.add(refSegment);
|
||||
}
|
||||
refs.add(refSegment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set to {@link #primaryRef} only,
|
||||
* based on {@link #ref(TraceSegmentRef, boolean)}
|
||||
*
|
||||
* @param refSegment {@link TraceSegmentRef}
|
||||
*/
|
||||
public void ref(TraceSegmentRef refSegment){
|
||||
ref(refSegment, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* After {@link Span} is finished, as be controller by "skywalking-api" module,
|
||||
* notify the {@link TraceSegment} to archive it.
|
||||
|
|
|
|||
|
|
@ -24,17 +24,17 @@ public class TraceSegmentTestCase {
|
|||
TraceSegmentRef ref1 = new TraceSegmentRef();
|
||||
ref1.setTraceSegmentId("parent_trace_0");
|
||||
ref1.setSpanId(1);
|
||||
segment.ref(ref1);
|
||||
segment.ref(ref1, false);
|
||||
|
||||
TraceSegmentRef ref2 = new TraceSegmentRef();
|
||||
ref2.setTraceSegmentId("parent_trace_1");
|
||||
ref2.setSpanId(5);
|
||||
segment.ref(ref2);
|
||||
segment.ref(ref2, false);
|
||||
|
||||
TraceSegmentRef ref3 = new TraceSegmentRef();
|
||||
ref3.setTraceSegmentId("parent_trace_1");
|
||||
ref3.setSpanId(5);
|
||||
segment.ref(ref3);
|
||||
segment.ref(ref3, false);
|
||||
|
||||
Assert.assertEquals(ref1, segment.getPrimaryRef());
|
||||
Assert.assertEquals(ref2, segment.getRefs().get(0));
|
||||
|
|
@ -75,21 +75,21 @@ public class TraceSegmentTestCase {
|
|||
ref1.setSpanId(1);
|
||||
ref1.setApplicationCode("REMOTE_APP");
|
||||
ref1.setPeerHost("10.2.3.16:8080");
|
||||
segment.ref(ref1);
|
||||
segment.ref(ref1, false);
|
||||
|
||||
TraceSegmentRef ref2 = new TraceSegmentRef();
|
||||
ref2.setTraceSegmentId("parent_trace_1");
|
||||
ref2.setSpanId(5);
|
||||
ref2.setApplicationCode("REMOTE_APP");
|
||||
ref2.setPeerHost("10.2.3.16:8080");
|
||||
segment.ref(ref2);
|
||||
segment.ref(ref2, false);
|
||||
|
||||
TraceSegmentRef ref3 = new TraceSegmentRef();
|
||||
ref3.setTraceSegmentId("parent_trace_1");
|
||||
ref3.setSpanId(5);
|
||||
ref3.setApplicationCode("REMOTE_APP");
|
||||
ref3.setPeerHost("10.2.3.16:8080");
|
||||
segment.ref(ref3);
|
||||
segment.ref(ref3, false);
|
||||
|
||||
Span span1 = new Span(1, "/serviceA");
|
||||
Tags.SPAN_LAYER.asHttp(span1);
|
||||
|
|
|
|||
|
|
@ -135,12 +135,30 @@ public final class TracerContext {
|
|||
* ContextCarrier#deserialize(String)} called.
|
||||
*/
|
||||
public void extract(ContextCarrier carrier) {
|
||||
if(carrier.isValid()) {
|
||||
this.segment.ref(getRef(carrier));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ref this {@link ContextCarrier} to this {@link TraceSegment}, and support multi-extract for supporting batch process, like MQ.
|
||||
*
|
||||
* @param carrier holds the snapshot, if get this {@link ContextCarrier} from remote, make sure {@link
|
||||
* ContextCarrier#deserialize(String)} called.
|
||||
*/
|
||||
public void multiExtract(ContextCarrier carrier){
|
||||
if(carrier.isValid()) {
|
||||
this.segment.ref(getRef(carrier), false);
|
||||
}
|
||||
}
|
||||
|
||||
private TraceSegmentRef getRef(ContextCarrier carrier){
|
||||
TraceSegmentRef ref = new TraceSegmentRef();
|
||||
ref.setTraceSegmentId(carrier.getTraceSegmentId());
|
||||
ref.setSpanId(carrier.getSpanId());
|
||||
ref.setApplicationCode(carrier.getApplicationCode());
|
||||
ref.setPeerHost(carrier.getPeerHost());
|
||||
this.segment.ref(ref);
|
||||
return ref;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue