From 6267cb909de68eb7bab0ddb033b264fcdccf8ce4 Mon Sep 17 00:00:00 2001 From: Jaehong-Kim Date: Wed, 26 Apr 2023 15:32:12 +0900 Subject: [PATCH] [#9905] Fix kafka on call tree view --- .../pinpoint/common/trace/ServiceType.java | 10 ++++++++- .../common/trace/ServiceTypeCategory.java | 21 ++++++++++-------- .../web/calltree/span/LinkedCallTree.java | 9 ++++---- .../web/calltree/span/SpanAligner.java | 4 +++- .../pinpoint/web/mapper/SpanMapperV2.java | 22 +++++++++++-------- 5 files changed, 42 insertions(+), 24 deletions(-) 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

* * * @@ -208,12 +208,20 @@ * * * + *
8050MEMCACHED
8051MEMCACHED_FUTURE_GET
8251RESERVED
8260RESERVED
8280ETCD
+ * + *

Message Broker Library (8300 ~ 8799)

+ * * * * * * * + *
8300RABBITMQ
8310ACTIVEMQ_CLIENT
8311ACTIVEMQ_CLIENT_INTERNAL
8660KAFKA_CLIENT
8661KAFKA_CLIENT_INTERNAL
8662KAFKA_STREAMS
+ * + *

HBase Library (8800 ~ 8899)

+ * * * * 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()) {
8800HBASE_CLIENT
8801HBASE_CLIENT_ADMIN
8802HBASE_CLIENT_TABLE