Commit 06445fc5 authored by 吴晟's avatar 吴晟
Browse files

1.提交部分TraceSpanTree的序列化代码。解决引用序列化问题。

parent 1b60750e
Loading
Loading
Loading
Loading
+71 −25
Original line number Diff line number Diff line
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();
		}
	}
}
+15 −4
Original line number Diff line number Diff line
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;
@@ -21,6 +23,8 @@ public class TraceSpanTree {

	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);
			}
		}

@@ -131,4 +135,11 @@ public class TraceSpanTree {
		}
	}
	
	
	private void beforeSerialize() throws TraceSpanTreeSerializeException{
		for(TraceSpanNode treeNode : spanContainer){
			treeNode.serializeRef();
		}
	}

}
+6 −2
Original line number Diff line number Diff line
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
	}


+13 −0
Original line number Diff line number Diff line
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);
	}
}