diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceType.java b/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceType.java
index 1753d6405717..a82f32cf5086 100644
--- a/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceType.java
+++ b/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceType.java
@@ -189,7 +189,7 @@
*
*
Library Sandbox (7500 ~ 7999)
*
- * Cache & File Library (8000 ~ 8899) Fast Histogram
+ * Cache & File Library (8000 ~ 8299) Fast Histogram
*
* 8050 | MEMCACHED |
* 8051 | MEMCACHED_FUTURE_GET |
@@ -208,12 +208,20 @@
* 8251 | RESERVED |
* 8260 | RESERVED |
* 8280 | ETCD |
+ *
+ *
+ * Message Broker Library (8300 ~ 8799)
+ *
* 8300 | RABBITMQ |
* 8310 | ACTIVEMQ_CLIENT |
* 8311 | ACTIVEMQ_CLIENT_INTERNAL |
* 8660 | KAFKA_CLIENT |
* 8661 | KAFKA_CLIENT_INTERNAL |
* 8662 | KAFKA_STREAMS |
+ *
+ *
+ * HBase Library (8800 ~ 8899)
+ *
* 8800 | HBASE_CLIENT |
* 8801 | HBASE_CLIENT_ADMIN |
* 8802 | HBASE_CLIENT_TABLE |
diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceTypeCategory.java b/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceTypeCategory.java
index 66a11cac68da..04f15f916cf5 100644
--- a/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceTypeCategory.java
+++ b/commons/src/main/java/com/navercorp/pinpoint/common/trace/ServiceTypeCategory.java
@@ -3,9 +3,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -28,10 +28,13 @@ public enum ServiceTypeCategory {
SERVER((short)1000, (short)1999),
DATABASE((short)2000, (short)2999),
LIBRARY((short)5000, (short)7999),
- CACHE_LIBRARY((short)8000, (short)8999, BaseHistogramSchema.FAST_SCHEMA),
+ CACHE_LIBRARY((short)8000, (short)8299, BaseHistogramSchema.FAST_SCHEMA),
+ MESSAGE_BROKER((short)8300, (short)8799),
+ HBASE((short)8800, (short)8899),
+ CACHE_LIBRARY_SANDBOX((short)8900, (short)8999, BaseHistogramSchema.FAST_SCHEMA),
RPC((short)9000, (short)9999);
-
-
+
+
private final short minCode;
private final short maxCode;
private final HistogramSchema histogramSchema;
@@ -41,17 +44,17 @@ public enum ServiceTypeCategory {
ServiceTypeCategory(short minCode, short maxCode) {
this(minCode, maxCode, BaseHistogramSchema.NORMAL_SCHEMA);
}
-
+
ServiceTypeCategory(short minCode, short maxCode, HistogramSchema histogramSchema) {
this.minCode = minCode;
this.maxCode = maxCode;
this.histogramSchema = Objects.requireNonNull(histogramSchema, "histogramSchema");
}
-
+
public boolean contains(short code) {
- return minCode <= code && code <= maxCode;
+ return minCode <= code && code <= maxCode;
}
-
+
public boolean contains(ServiceType type) {
return contains(type.getCode());
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java
index 73bf17e8b381..1ddbbc6aa58d 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/LinkedCallTree.java
@@ -106,10 +106,11 @@ private CallTreeNode changeNodeToVirtualNode(final CallTree originalCallTree) {
CallTreeNode originalNode = originalCallTree.getRoot();
CallTreeNode newCallTreeNode = new CallTreeNode(this.root, originalNode.getAlign());
- CallTreeNode child = originalNode.getChild();
- newCallTreeNode.setChild(child);
-
- child.setParent(newCallTreeNode);
+ if (originalNode.hasChild()) {
+ CallTreeNode child = originalNode.getChild();
+ newCallTreeNode.setChild(child);
+ child.setParent(newCallTreeNode);
+ }
return newCallTreeNode;
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAligner.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAligner.java
index 83e7a868df7a..9861c001d45a 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAligner.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAligner.java
@@ -165,11 +165,13 @@ private boolean usedLink(Link link) {
}
int size = nodeList.size();
if (size > 1) {
+ boolean result = false;
for (Node node : nodeList) {
if (putNodeToLink(link, node, true)) {
- return true;
+ result = true;
}
}
+ return result;
} else if (size == 1) {
Node node = nodeList.get(0);
if (putNodeToLink(link, node, false)) {
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java b/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java
index 0de0c608a58a..64fb9bf6f72a 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java
@@ -33,6 +33,7 @@
import com.navercorp.pinpoint.common.server.bo.serializer.trace.v2.SpanDecoder;
import com.navercorp.pinpoint.common.server.bo.serializer.trace.v2.SpanDecoderV0;
import com.navercorp.pinpoint.common.server.bo.serializer.trace.v2.SpanDecodingContext;
+import com.navercorp.pinpoint.common.trace.ServiceTypeCategory;
import com.navercorp.pinpoint.common.util.CollectionUtils;
import com.navercorp.pinpoint.common.util.LRUCache;
import com.navercorp.pinpoint.io.SpanVersion;
@@ -53,6 +54,7 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
+
/**
* @author emeroad
* @author Taejin Koo
@@ -208,22 +210,24 @@ private List bindSpanChunk(ListMultimap spanMap, List<
AgentKey agentKey = newAgentKey(spanChunkBo);
List matchedSpanBoList = spanMap.get(agentKey);
if (CollectionUtils.hasLength(matchedSpanBoList)) {
- final int spanIdCollisionSize = matchedSpanBoList.size();
- if (spanIdCollisionSize > 1) {
- // exceptional case dump
- logger.warn("spanIdCollision {}", matchedSpanBoList);
- }
-
int agentLevelCollisionCount = 0;
+ final int spanIdCollisionSize = matchedSpanBoList.size();
+ boolean ignoreCollision = false;
for (SpanBo spanBo : matchedSpanBoList) {
+ if (ServiceTypeCategory.MESSAGE_BROKER.contains(spanBo.getServiceType())) {
+ ignoreCollision = true;
+ }
if (isChildSpanChunk(spanBo, spanChunkBo)) {
spanBo.addSpanChunkBo(spanChunkBo);
agentLevelCollisionCount++;
}
}
- if (agentLevelCollisionCount > 1) {
- // exceptional case dump
- logger.warn("agentLevelCollision {}", matchedSpanBoList);
+
+ if (Boolean.FALSE == ignoreCollision) {
+ if (agentLevelCollisionCount > 1 || spanIdCollisionSize > 1) {
+ // exceptional case dump
+ logger.warn("Collision agentLevel={}, spanId={}, matchedSpanBoList={}", agentLevelCollisionCount, spanIdCollisionSize, matchedSpanBoList);
+ }
}
} else {
if (logger.isInfoEnabled()) {