Fix serialize bugs.
This commit is contained in:
parent
886d6ea30e
commit
d6760d35eb
|
|
@ -1,10 +1,29 @@
|
|||
package com.a.eye.skywalking.messages;
|
||||
|
||||
import com.a.eye.skywalking.trace.TraceSegment;
|
||||
|
||||
/**
|
||||
* All messages, which need to send between Akka actors, should implement this interface.
|
||||
* The whole {@link TraceSegment} supports this.
|
||||
*
|
||||
* T should be a protobuf Object, which is generated by protoc.
|
||||
* {@see /sky-walking/skywalking-commons/skywalking-trace/src/main/proto/trace.proto}
|
||||
*
|
||||
* {@see https://github.com/google/protobuf/tree/master/java}
|
||||
*
|
||||
* Created by wusheng on 2017/2/22.
|
||||
*/
|
||||
public interface ISerializable<T> {
|
||||
/**
|
||||
* Serialize this object to T
|
||||
* @return
|
||||
*/
|
||||
T serialize();
|
||||
|
||||
/**
|
||||
* Initialize this object by the given message.
|
||||
*
|
||||
* @param message to init object.
|
||||
*/
|
||||
void deserialize(T message);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,10 @@ public class LogData implements ISerializable<LogDataMessage>{
|
|||
this.fields = fields;
|
||||
}
|
||||
|
||||
LogData(LogDataMessage message){
|
||||
deserialize(message);
|
||||
}
|
||||
|
||||
public long getTime() {
|
||||
return time;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,13 +140,15 @@ public class Span implements ISerializable<SpanMessage> {
|
|||
}
|
||||
|
||||
/**
|
||||
* This is a empty constructor, only to get a object.
|
||||
* Create a new span, by given {@link SpanMessage}, which you can get from another {@link Span} object,
|
||||
* by calling {@link Span#serialize()};
|
||||
*
|
||||
* DO NOT use this in anywhere, except {@link TraceSegment#deserialize(SegmentMessage)}.
|
||||
* @param spanMessage from another {@link Span#serialize()}
|
||||
*/
|
||||
Span() {
|
||||
public Span(SpanMessage spanMessage) {
|
||||
tags = new HashMap<String, Object>();
|
||||
logs = new LinkedList<LogData>();
|
||||
this.deserialize(spanMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -294,18 +296,17 @@ public class Span implements ISerializable<SpanMessage> {
|
|||
endTime = message.getEndTime();
|
||||
operationName = message.getOperationName();
|
||||
|
||||
List<KeyValue> tagsList = message.getTagsList();
|
||||
if(tagsList != null){
|
||||
for (KeyValue tag : tagsList) {
|
||||
tags.put(tag.getKey(), tag.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
List<LogDataMessage> logsList = message.getLogsList();
|
||||
if (logsList != null) {
|
||||
for (LogDataMessage logDataMessage : logsList) {
|
||||
List<KeyValue> fieldsList = logDataMessage.getFieldsList();
|
||||
Map<String, String> fieldsMap = new HashMap<String, String>();
|
||||
if (fieldsList != null) {
|
||||
for (KeyValue field : fieldsList) {
|
||||
fieldsMap.put(field.getKey(), field.getValue());
|
||||
}
|
||||
}
|
||||
LogData logData = new LogData(logDataMessage.getTime(), fieldsMap);
|
||||
logs.add(logData);
|
||||
logs.add(new LogData(logDataMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,6 +67,15 @@ public class TraceSegment implements ISerializable<SegmentMessage> {
|
|||
this.spans = new LinkedList<Span>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a trace segment, by given {@link SegmentMessage}
|
||||
*
|
||||
* @param message from another {@link TraceSegment#serialize()}
|
||||
*/
|
||||
public TraceSegment(SegmentMessage message){
|
||||
deserialize(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Establish the link between this segment and its parents.
|
||||
* The first time, you {@link #ref(TraceSegmentRef)} to parent, it is affirmed as {@link #primaryRef}.
|
||||
|
|
@ -163,6 +172,7 @@ public class TraceSegment implements ISerializable<SegmentMessage> {
|
|||
(primaryRef = new TraceSegmentRef()).deserialize(message.getPrimaryRef());
|
||||
List<SegmentRefMessage> refsList = message.getRefsList();
|
||||
if(refsList != null){
|
||||
this.refs = new LinkedList<TraceSegmentRef>();
|
||||
for (SegmentRefMessage refMessage : refsList) {
|
||||
TraceSegmentRef ref = new TraceSegmentRef();
|
||||
ref.deserialize(refMessage);
|
||||
|
|
@ -172,10 +182,9 @@ public class TraceSegment implements ISerializable<SegmentMessage> {
|
|||
|
||||
List<SpanMessage> spansList = message.getSpansList();
|
||||
if(spansList != null){
|
||||
this.spans = new LinkedList<Span>();
|
||||
for (SpanMessage spanMessage : spansList) {
|
||||
Span span = new Span();
|
||||
span.deserialize(spanMessage);
|
||||
spans.add(span);
|
||||
spans.add(new Span(spanMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ public class SpanTestCase {
|
|||
public void testConstructors() {
|
||||
Span span1 = new Span(0, "serviceA");
|
||||
Span span2 = new Span(2, span1, "serviceA");
|
||||
span2.setOperationName("serviceA-2");
|
||||
Assert.assertEquals("serviceA-2", span2.getOperationName());
|
||||
|
||||
Assert.assertEquals(-1, span1.getParentSpanId());
|
||||
Assert.assertEquals(0, span2.getParentSpanId());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.a.eye.skywalking.trace;
|
||||
|
||||
import com.a.eye.skywalking.trace.tag.Tags;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
|
|
@ -8,7 +9,7 @@ import org.junit.Test;
|
|||
*/
|
||||
public class TraceSegmentTestCase {
|
||||
@Test
|
||||
public void testConstructor(){
|
||||
public void testConstructor() {
|
||||
TraceSegment segment = new TraceSegment("trace_1");
|
||||
|
||||
Assert.assertEquals("trace_1", segment.getTraceSegmentId());
|
||||
|
|
@ -16,7 +17,7 @@ public class TraceSegmentTestCase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testRef(){
|
||||
public void testRef() {
|
||||
TraceSegment segment = new TraceSegment("trace_3");
|
||||
|
||||
TraceSegmentRef ref1 = new TraceSegmentRef();
|
||||
|
|
@ -43,7 +44,7 @@ public class TraceSegmentTestCase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testArchiveSpan(){
|
||||
public void testArchiveSpan() {
|
||||
TraceSegment segment = new TraceSegment("trace_1");
|
||||
Span span1 = new Span(1, "/serviceA");
|
||||
segment.archive(span1);
|
||||
|
|
@ -56,11 +57,47 @@ public class TraceSegmentTestCase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testFinish(){
|
||||
public void testFinish() {
|
||||
TraceSegment segment = new TraceSegment("trace_1");
|
||||
|
||||
Assert.assertTrue(segment.getEndTime() == 0);
|
||||
segment.finish();
|
||||
Assert.assertTrue(segment.getEndTime() > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSerialize() {
|
||||
TraceSegment segment = new TraceSegment("trace_3");
|
||||
|
||||
TraceSegmentRef ref1 = new TraceSegmentRef();
|
||||
ref1.setTraceSegmentId("parent_trace_0");
|
||||
ref1.setSpanId(1);
|
||||
segment.ref(ref1);
|
||||
|
||||
TraceSegmentRef ref2 = new TraceSegmentRef();
|
||||
ref2.setTraceSegmentId("parent_trace_1");
|
||||
ref2.setSpanId(5);
|
||||
segment.ref(ref2);
|
||||
|
||||
TraceSegmentRef ref3 = new TraceSegmentRef();
|
||||
ref3.setTraceSegmentId("parent_trace_1");
|
||||
ref3.setSpanId(5);
|
||||
segment.ref(ref3);
|
||||
|
||||
Span span1 = new Span(1, "/serviceA");
|
||||
Tags.SPAN_LAYER.asHttp(span1);
|
||||
segment.archive(span1);
|
||||
|
||||
Span span2 = new Span(2, span1, "/db/sql");
|
||||
Tags.SPAN_LAYER.asNoSQL(span2);
|
||||
span2.log(new NullPointerException());
|
||||
segment.archive(span2);
|
||||
|
||||
TraceSegment newSegment = new TraceSegment(segment.serialize());
|
||||
|
||||
Assert.assertEquals(segment.getSpans().size(), newSegment.getSpans().size());
|
||||
Assert.assertEquals(segment.getPrimaryRef().getTraceSegmentId(), newSegment.getPrimaryRef().getTraceSegmentId());
|
||||
Assert.assertEquals(Tags.SPAN_LAYER.get(segment.getSpans().get(0)), Tags.SPAN_LAYER.get(newSegment.getSpans().get(0)));
|
||||
Assert.assertEquals(segment.getSpans().get(1).getLogs().get(0).getTime(), newSegment.getSpans().get(1).getLogs().get(0).getTime());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue