You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/11/18 08:12:15 UTC

[skywalking] branch bug created (now eaadbe604d)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a change to branch bug
in repository https://gitbox.apache.org/repos/asf/skywalking.git


      at eaadbe604d Add default entity name(`_blank`)

This branch includes the following new commits:

     new eaadbe604d Add default entity name(`_blank`)

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[skywalking] 01/01: Add default entity name(`_blank`)

Posted by wu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch bug
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit eaadbe604db409f7ce19959f5b583443a0784aee
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Fri Nov 18 16:11:58 2022 +0800

    Add default entity name(`_blank`)
---
 docs/en/changes/changes.md                         |  3 ++-
 .../listener/vservice/VirtualMQProcessor.java      | 27 ++++++++++++----------
 .../apache/skywalking/oap/server/core/Const.java   |  1 +
 .../oap/server/core/analysis/IDManager.java        | 20 ++++++++++++----
 4 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index b52cfada6a..d79f046274 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -115,6 +115,7 @@
 * Fix `ShardingTopologyQueryDAO.loadServiceRelationsDetectedAtServerSide` invoke backend miss parameter `serviceIds`.
 * Changed system variable `SW_SUPERDATASET_STORAGE_DAY_STEP` to `SW_STORAGE_ES_SUPER_DATASET_DAY_STEP` to be consistent with other ES storage related variables.
 * Fix ESEventQueryDAO missing metric_table boolQuery criteria.
+* Add default entity name(`_blank`) if absent to avoid NPE in the decoding. This caused `Can't split xxx id into 2 parts`.
 
 #### UI
 
@@ -155,7 +156,7 @@
 * Add Python runtime metrics and cpu/memory utilization panels to General-Instance and Fass-Instance dashboards.
 * Enhance the legend of metrics graph widget with the summary table.
 * Add apache eventMesh logo file.
-* Fix conditions for trace profiling  bugSomething isn't working.
+* Fix conditions for trace profiling bug.
 * Fix tag keys list and duration condition.
 
 #### Documentation
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualMQProcessor.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualMQProcessor.java
index 1a2edd58c7..62bcfea838 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualMQProcessor.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/vservice/VirtualMQProcessor.java
@@ -75,9 +75,7 @@ public class VirtualMQProcessor implements VirtualServiceProcessor {
         String serviceName = namingControl.formatServiceName(peer);
         long timeBucket = TimeBucket.getMinuteTimeBucket(span.getStartTime());
         sourceList.add(toServiceMeta(serviceName, timeBucket));
-        String endpoint = buildEndpointName(mqTags.topic, mqTags.queue);
-        String endpointName = namingControl.formatEndpointName(serviceName, endpoint);
-        sourceList.add(toEndpointMeta(serviceName, endpointName, timeBucket));
+
         MQAccess access = new MQAccess();
         access.setTypeId(span.getComponentId());
         access.setTransmissionLatency(mqTags.transmissionLatency);
@@ -87,15 +85,20 @@ public class VirtualMQProcessor implements VirtualServiceProcessor {
         access.setOperation(mqOperation);
         sourceList.add(access);
 
-        MQEndpointAccess endpointAccess = new MQEndpointAccess();
-        endpointAccess.setTypeId(span.getComponentId());
-        endpointAccess.setTransmissionLatency(mqTags.transmissionLatency);
-        endpointAccess.setStatus(!span.getIsError());
-        endpointAccess.setTimeBucket(timeBucket);
-        endpointAccess.setOperation(mqOperation);
-        endpointAccess.setServiceName(serviceName);
-        endpointAccess.setEndpoint(endpointName);
-        sourceList.add(endpointAccess);
+        String endpoint = buildEndpointName(mqTags.topic, mqTags.queue);
+        if (!endpoint.isEmpty()) {
+            String endpointName = namingControl.formatEndpointName(serviceName, endpoint);
+            sourceList.add(toEndpointMeta(serviceName, endpointName, timeBucket));
+            MQEndpointAccess endpointAccess = new MQEndpointAccess();
+            endpointAccess.setTypeId(span.getComponentId());
+            endpointAccess.setTransmissionLatency(mqTags.transmissionLatency);
+            endpointAccess.setStatus(!span.getIsError());
+            endpointAccess.setTimeBucket(timeBucket);
+            endpointAccess.setOperation(mqOperation);
+            endpointAccess.setServiceName(serviceName);
+            endpointAccess.setEndpoint(endpointName);
+            sourceList.add(endpointAccess);
+        }
     }
 
     private String buildEndpointName(String topic, String queue) {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
index 499bc18848..84f57eeb56 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
@@ -40,4 +40,5 @@ public class Const {
     public static final String EMPTY_STRING = "";
     public static final String POINT = ".";
     public static final String DOUBLE_COLONS_SPLIT = "::";
+    public static final String BLANK_ENTITY_NAME = "_blank";
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/IDManager.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/IDManager.java
index cf67d0eb62..0e56e42e0c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/IDManager.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/IDManager.java
@@ -18,17 +18,17 @@
 
 package org.apache.skywalking.oap.server.core.analysis;
 
-import java.nio.charset.StandardCharsets;
-import java.util.Base64;
-
 import com.google.common.base.Charsets;
 import com.google.common.hash.Hashing;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.UnexpectedException;
 import org.apache.skywalking.oap.server.library.util.BooleanUtils;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
 
 /**
  * IDManager includes all ID encode/decode functions for service, service instance and endpoint.
@@ -44,6 +44,9 @@ public class IDManager {
          *                 conjectured by telemetry data collected from agents on/in the `normal` service.
          */
         public static String buildId(String name, boolean isNormal) {
+            if (StringUtil.isBlank(name)) {
+                name = Const.BLANK_ENTITY_NAME;
+            }
             return encode(name) + Const.SERVICE_ID_CONNECTOR + BooleanUtils.booleanToValue(isNormal);
         }
 
@@ -108,6 +111,9 @@ public class IDManager {
          * @return service instance id
          */
         public static String buildId(String serviceId, String instanceName) {
+            if (StringUtil.isBlank(instanceName)) {
+                instanceName = Const.BLANK_ENTITY_NAME;
+            }
             return serviceId
                 + Const.ID_CONNECTOR
                 + encode(instanceName);
@@ -180,6 +186,9 @@ public class IDManager {
          * @return endpoint id
          */
         public static String buildId(String serviceId, String endpointName) {
+            if (StringUtil.isBlank(endpointName)) {
+                endpointName = Const.BLANK_ENTITY_NAME;
+            }
             return serviceId
                 + Const.ID_CONNECTOR
                 + encode(endpointName);
@@ -261,12 +270,13 @@ public class IDManager {
     public static class ProcessID {
         /**
          * @param instanceId built by {@link ServiceInstanceID#buildId(String, String)}
-         * @param name process name
+         * @param name       process name
          * @return process id
          */
         public static String buildId(String instanceId, String name) {
             return Hashing.sha256().newHasher().putString(String.format("%s_%s",
-                    name, instanceId), Charsets.UTF_8).hash().toString();
+                                                                        name, instanceId
+            ), Charsets.UTF_8).hash().toString();
         }
 
         /**