1.提交部分TraceSpanTree的序列化代码。解决引用序列化问题。
This commit is contained in:
parent
1b60750ea9
commit
06445fc592
|
|
@ -1,5 +1,8 @@
|
|||
package com.ai.cloud.skywalking.analysis.chainbuild.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.exception.TraceSpanTreeSerializeException;
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.util.StringUtil;
|
||||
import com.ai.cloud.skywalking.protocol.CallType;
|
||||
import com.ai.cloud.skywalking.protocol.Span;
|
||||
|
|
@ -13,6 +16,16 @@ public class TraceSpanNode {
|
|||
|
||||
protected TraceSpanNode sub = null;
|
||||
|
||||
protected String prevNodeRefToken = null;
|
||||
|
||||
protected String nextNodeRefToken = null;
|
||||
|
||||
protected String parentNodeRefToken = null;
|
||||
|
||||
protected String subNodeRefToken = null;
|
||||
|
||||
protected String nodeRefToken = null;
|
||||
|
||||
protected boolean visualNode = true;
|
||||
|
||||
protected String parentLevel;
|
||||
|
|
@ -57,8 +70,8 @@ public class TraceSpanNode {
|
|||
*/
|
||||
protected String applicationId = "";
|
||||
|
||||
public TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next, Span span) {
|
||||
this(parent, sub, prev, next);
|
||||
public TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next, Span span, List<TraceSpanNode> spanContainer) {
|
||||
this(parent, sub, prev, next, spanContainer);
|
||||
this.visualNode = false;
|
||||
this.parentLevel = span.getParentLevel();
|
||||
this.levelId = span.getLevelId();
|
||||
|
|
@ -75,30 +88,33 @@ public class TraceSpanNode {
|
|||
this.spanType = span.getSpanType();
|
||||
this.businessKey = span.getBusinessKey();
|
||||
this.applicationId = span.getApplicationId();
|
||||
|
||||
//TODO: to set nodeToken
|
||||
}
|
||||
|
||||
public TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next){
|
||||
protected TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next, List<TraceSpanNode> spanContainer){
|
||||
this.visualNode = true;
|
||||
this.parent = parent;
|
||||
this.setParent(parent);
|
||||
if(parent != null){
|
||||
parent.sub = this;
|
||||
parent.setSub(this);
|
||||
}
|
||||
this.sub = sub;
|
||||
this.setSub(sub);
|
||||
if(sub != null){
|
||||
sub.parent = this;
|
||||
sub.setParent(this);
|
||||
}
|
||||
this.prev = prev;
|
||||
this.setPrev(prev);
|
||||
if(prev != null){
|
||||
prev.next = this;
|
||||
prev.setNext(this);
|
||||
}
|
||||
this.next = next;
|
||||
this.setNext(next);
|
||||
if(next != null){
|
||||
next.prev = this;
|
||||
next.setPrev(this);
|
||||
}
|
||||
spanContainer.add(this);
|
||||
}
|
||||
|
||||
protected TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next, String parentLevelId, int levelId){
|
||||
this(parent, sub, prev, next);
|
||||
protected TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next, String parentLevelId, int levelId, List<TraceSpanNode> spanContainer){
|
||||
this(parent, sub, prev, next, spanContainer);
|
||||
this.parentLevel = parentLevelId;
|
||||
this.levelId = levelId;
|
||||
this.callTimes = 0;
|
||||
|
|
@ -134,30 +150,38 @@ public class TraceSpanNode {
|
|||
}
|
||||
}
|
||||
|
||||
TraceSpanNode next(){
|
||||
return this.next;
|
||||
}
|
||||
|
||||
TraceSpanNode sub(){
|
||||
return this.sub;
|
||||
}
|
||||
|
||||
public TraceSpanNode getPrev() {
|
||||
public TraceSpanNode prev() {
|
||||
return prev;
|
||||
}
|
||||
|
||||
public TraceSpanNode getNext() {
|
||||
public TraceSpanNode next() {
|
||||
return next;
|
||||
}
|
||||
|
||||
public TraceSpanNode getParent() {
|
||||
public TraceSpanNode parent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
public TraceSpanNode getSub() {
|
||||
public TraceSpanNode sub() {
|
||||
return sub;
|
||||
}
|
||||
|
||||
public void setPrev(TraceSpanNode prev) {
|
||||
this.prev = prev;
|
||||
}
|
||||
|
||||
public void setNext(TraceSpanNode next) {
|
||||
this.next = next;
|
||||
}
|
||||
|
||||
public void setParent(TraceSpanNode parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public void setSub(TraceSpanNode sub) {
|
||||
this.sub = sub;
|
||||
}
|
||||
|
||||
public boolean isVisualNode() {
|
||||
return visualNode;
|
||||
}
|
||||
|
|
@ -197,4 +221,26 @@ public class TraceSpanNode {
|
|||
public String getApplicationId() {
|
||||
return applicationId;
|
||||
}
|
||||
|
||||
public String getNodeRefToken() throws TraceSpanTreeSerializeException {
|
||||
if(StringUtil.isBlank(nodeRefToken)){
|
||||
throw new TraceSpanTreeSerializeException("parentLevel=" + parentLevel + ", levelId=" + levelId + ", viewPointId=" + viewPointId + ", node ref token is null.");
|
||||
}
|
||||
return nodeRefToken;
|
||||
}
|
||||
|
||||
void serializeRef() throws TraceSpanTreeSerializeException{
|
||||
if(prev != null){
|
||||
prevNodeRefToken = prev.getNodeRefToken();
|
||||
}
|
||||
if(parent != null){
|
||||
parentNodeRefToken = parent.getNodeRefToken();
|
||||
}
|
||||
if(next != null){
|
||||
nextNodeRefToken = next.getNodeRefToken();
|
||||
}
|
||||
if(sub != null){
|
||||
subNodeRefToken = sub.getNodeRefToken();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.ai.cloud.skywalking.analysis.chainbuild.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
|
@ -8,6 +9,7 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.exception.BuildTraceSpanTreeException;
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.exception.TraceSpanTreeSerializeException;
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.util.StringUtil;
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator;
|
||||
import com.ai.cloud.skywalking.protocol.Span;
|
||||
|
|
@ -20,6 +22,8 @@ public class TraceSpanTree {
|
|||
private String cid;
|
||||
|
||||
private TraceSpanNode treeRoot;
|
||||
|
||||
private List<TraceSpanNode> spanContainer = new ArrayList<TraceSpanNode>();
|
||||
|
||||
public TraceSpanTree() {
|
||||
}
|
||||
|
|
@ -40,7 +44,7 @@ public class TraceSpanTree {
|
|||
}
|
||||
});
|
||||
cid = generateChainToken(spanList.get(0));
|
||||
treeRoot = new TraceSpanNode(null, null, null, null, spanList.get(0));
|
||||
treeRoot = new TraceSpanNode(null, null, null, null, spanList.get(0), spanContainer);
|
||||
if (spanList.size() > 1) {
|
||||
for (int i = 1; i < spanList.size(); i++) {
|
||||
this.build(spanList.get(i));
|
||||
|
|
@ -65,7 +69,7 @@ public class TraceSpanTree {
|
|||
TraceSpanNode foundNode = findNodeAndCreateVisualNodeIfNess(
|
||||
span.getParentLevel(), span.getLevelId() - 1);
|
||||
if (foundNode != null) {
|
||||
new TraceSpanNode(null, null, foundNode, foundNode.next(), span);
|
||||
new TraceSpanNode(null, null, foundNode, foundNode.next(), span, spanContainer);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
|
|
@ -101,7 +105,7 @@ public class TraceSpanTree {
|
|||
} else {
|
||||
// create visual next node
|
||||
currentNode = new VisualTraceSpanNode(null, null,
|
||||
currentNode, null, contextParentLevelId, i);
|
||||
currentNode, null, contextParentLevelId, i, spanContainer);
|
||||
}
|
||||
}
|
||||
contextParentLevelId = contextParentLevelId == "" ? ("" + currentLevelInt)
|
||||
|
|
@ -111,7 +115,7 @@ public class TraceSpanTree {
|
|||
} else {
|
||||
// create visual sub node
|
||||
currentNode = new VisualTraceSpanNode(currentNode, null, null,
|
||||
null, contextParentLevelId, 0);
|
||||
null, contextParentLevelId, 0, spanContainer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -130,5 +134,12 @@ public class TraceSpanTree {
|
|||
+ level0Span.getTraceId() + " level0 span data is illegal");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void beforeSerialize() throws TraceSpanTreeSerializeException{
|
||||
for(TraceSpanNode treeNode : spanContainer){
|
||||
treeNode.serializeRef();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
package com.ai.cloud.skywalking.analysis.chainbuild.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class VisualTraceSpanNode extends TraceSpanNode {
|
||||
|
||||
protected VisualTraceSpanNode(TraceSpanNode parent, TraceSpanNode sub,
|
||||
TraceSpanNode prev, TraceSpanNode next, String parentLevelId,
|
||||
int levelId) {
|
||||
super(parent, sub, prev, next, parentLevelId, levelId);
|
||||
int levelId, List<TraceSpanNode> spanContainer) {
|
||||
super(parent, sub, prev, next, parentLevelId, levelId, spanContainer);
|
||||
|
||||
//TODO: to set nodeToken
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
package com.ai.cloud.skywalking.analysis.chainbuild.exception;
|
||||
|
||||
public class TraceSpanTreeSerializeException extends Exception {
|
||||
private static final long serialVersionUID = 7857716041262993579L;
|
||||
|
||||
public TraceSpanTreeSerializeException(String msg){
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public TraceSpanTreeSerializeException(String msg, Exception cause){
|
||||
super(msg, cause);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue