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:16 UTC
[skywalking] 01/01: Add default entity name(`_blank`)
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();
}
/**