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 2019/01/15 12:38:12 UTC
[incubator-skywalking] branch master updated: Un-exchanged endpoint
name in ref can't find the id (#2162)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new a3e03f6 Un-exchanged endpoint name in ref can't find the id (#2162)
a3e03f6 is described below
commit a3e03f61337f9c443a7a9857f3c2bcb7f2e330ce
Author: 兵 <di...@hotmail.com>
AuthorDate: Tue Jan 15 20:38:05 2019 +0800
Un-exchanged endpoint name in ref can't find the id (#2162)
* Update ReferenceIdExchanger.java
Change comments of codes.
---
.../standardization/ReferenceIdExchanger.java | 32 +++++++++++++++++++---
1 file changed, 28 insertions(+), 4 deletions(-)
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
index c41253c..4ea33a8 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
@@ -55,8 +55,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
@Override public boolean exchange(ReferenceDecorator standardBuilder, int serviceId) {
if (standardBuilder.getEntryEndpointId() == 0) {
String entryEndpointName = Strings.isNullOrEmpty(standardBuilder.getEntryEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getEntryEndpointName();
- int entryEndpointId = endpointInventoryRegister.get(serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(), entryEndpointName, DetectPoint.SERVER.ordinal());
-
+ int entryEndpointId = getEndpointId(standardBuilder, entryEndpointName);
if (entryEndpointId == 0) {
if (logger.isDebugEnabled()) {
int entryServiceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId();
@@ -72,8 +71,8 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
if (standardBuilder.getParentEndpointId() == 0) {
String parentEndpointName = Strings.isNullOrEmpty(standardBuilder.getParentEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getParentEndpointName();
- int parentEndpointId = endpointInventoryRegister.get(serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId()).getServiceId(), parentEndpointName, DetectPoint.SERVER.ordinal());
-
+ int parentEndpointId = getEndpointId(standardBuilder, parentEndpointName);
+
if (parentEndpointId == 0) {
if (logger.isDebugEnabled()) {
int parentServiceId = serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId()).getServiceId();
@@ -103,4 +102,29 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
}
return true;
}
+
+ /**
+ * Endpoint in ref could be local or exit span's operation name.
+ * Especially if it is local span operation name,
+ * exchange may not happen at agent, such as Java agent,
+ * then put literal endpoint string in the header,
+ * Need to try to get the id by assuming the endpoint name is detected at server, local or client.
+ *
+ * If agent does the exchange, then always use endpoint id.
+ *
+ * @param standardBuilder
+ * @param endpointName
+ * @return
+ */
+ private int getEndpointId(ReferenceDecorator standardBuilder,String endpointName) {
+ int serviceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId();
+ int endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.SERVER.ordinal());
+ if (endpointId == Const.NONE) {
+ endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.CLIENT.ordinal());
+ if (endpointId == Const.NONE) {
+ endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.UNRECOGNIZED.ordinal());
+ }
+ }
+ return endpointId;
+ }
}