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/03/26 12:00:32 UTC
[skywalking] branch master updated: Enhance endpoint dependency analysis to support cross threads cases. (#8747)
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/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new d90e2e6 Enhance endpoint dependency analysis to support cross threads cases. (#8747)
d90e2e6 is described below
commit d90e2e6ef67a43466dcdfae453369b299d3fd198
Author: 吴晟 Wu Sheng <wu...@foxmail.com>
AuthorDate: Sat Mar 26 20:00:12 2022 +0800
Enhance endpoint dependency analysis to support cross threads cases. (#8747)
* [**Breaking Change**] Remove **Deprecated responseCode** from sources, including Service, ServiceInstance, Endpoint
* Enhance endpoint dependency analysis to support cross threads cases. Refactor span analysis code structures.
* Remove `isNotNormal` service requirement when use alias to merge service topology from client side. All RPCs' peer
services from client side are always normal services. This cause the topology is not merged correctly.
-----------
In our showcase and Java agent scenarios, there are several cross-thread tracing cases, we were not generating endpoint dependency if ref exists in local and exit span. In this PR, I am adding this missing part back.
Also, in case the downstream endpoint of the dependency is another local/exit span's operation name, which was not generating endpoint traffic before, I add traffic generation of both sides' endpoints of dependency.
Another important point that drives me to fix this is, in the new Booster UI, metrics of endpoint dependency are shown in a separate dashboard, which requires the endpoints of both sides existing in metadata, otherwise, nothing shows up.
For e2e, updated the Java agent to the latest.
---
CHANGES.md | 4 +
.../analyzer/provider/AnalyzerModuleProvider.java | 6 +-
.../parser/listener/CommonAnalysisListener.java | 39 ++++++
...EndpointDepFromCrossThreadAnalysisListener.java | 150 +++++++++++++++++++++
.../parser/listener/EndpointDependencyBuilder.java | 52 +++++++
.../parser/listener/EndpointSourceBuilder.java | 113 ++++++++++++++++
.../NetworkAddressAliasMappingListener.java | 2 +-
...lysisListener.java => RPCAnalysisListener.java} | 92 ++++++-------
...ceBuilder.java => RPCTrafficSourceBuilder.java} | 116 ++++------------
.../server/core/query/ServiceTopologyBuilder.java | 3 +-
.../oap/server/core/source/Endpoint.java | 4 -
.../oap/server/core/source/EndpointMeta.java | 1 +
.../oap/server/core/source/EndpointRelation.java | 4 -
.../skywalking/oap/server/core/source/Service.java | 4 -
.../oap/server/core/source/ServiceInstance.java | 4 -
.../oap/server/core/source/ServiceRelation.java | 4 -
.../receiver/mesh/TelemetryDataDispatcher.java | 4 -
...ointDepFromCrossThreadAnalysisListenerTest.java | 139 +++++++++++++++++++
...tenerTest.java => RPCAnalysisListenerTest.java} | 23 ++--
.../cases/lua/expected/dependency-services.yml | 12 +-
test/e2e-v2/script/env | 2 +-
21 files changed, 588 insertions(+), 190 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index d1f6c88..149d621 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -139,6 +139,10 @@ NOTICE, this sharding concept is NOT just for splitting data into different data
* Support ElasticSearch template mappings `properties parameters` and `_source` update.
* Implement the eBPF profiling query and data collect protocol.
+* [**Breaking Change**] Remove **Deprecated responseCode** from sources, including Service, ServiceInstance, Endpoint
+* Enhance endpoint dependency analysis to support cross threads cases. Refactor span analysis code structures.
+* Remove `isNotNormal` service requirement when use alias to merge service topology from client side. All RPCs' peer
+ services from client side are always normal services. This cause the topology is not merged correctly.
#### UI
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleProvider.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleProvider.java
index 4fe93d5..f2ee017 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleProvider.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleProvider.java
@@ -32,7 +32,8 @@ import org.apache.skywalking.oap.server.analyzer.provider.trace.UninstrumentedGa
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.ISegmentParserService;
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.SegmentParserListenerManager;
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.SegmentParserServiceImpl;
-import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.MultiScopesAnalysisListener;
+import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.EndpointDepFromCrossThreadAnalysisListener;
+import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.RPCAnalysisListener;
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.NetworkAddressAliasMappingListener;
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.SegmentAnalysisListener;
import org.apache.skywalking.oap.server.configuration.api.ConfigurationModule;
@@ -141,7 +142,8 @@ public class AnalyzerModuleProvider extends ModuleProvider {
private SegmentParserListenerManager listenerManager() {
SegmentParserListenerManager listenerManager = new SegmentParserListenerManager();
if (moduleConfig.isTraceAnalysis()) {
- listenerManager.add(new MultiScopesAnalysisListener.Factory(getManager()));
+ listenerManager.add(new RPCAnalysisListener.Factory(getManager()));
+ listenerManager.add(new EndpointDepFromCrossThreadAnalysisListener.Factory(getManager()));
listenerManager.add(new NetworkAddressAliasMappingListener.Factory(getManager()));
}
listenerManager.add(new SegmentAnalysisListener.Factory(getManager(), moduleConfig));
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/CommonAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/CommonAnalysisListener.java
new file mode 100644
index 0000000..8ff8baa
--- /dev/null
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/CommonAnalysisListener.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener;
+
+import org.apache.skywalking.apm.network.language.agent.v3.SpanLayer;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
+
+/**
+ * The common logic for specific listeners.
+ */
+abstract class CommonAnalysisListener {
+ /**
+ * Identify the layer of span's service/instance owner. Such as ${@link Layer#FAAS} and ${@link Layer#GENERAL}.
+ */
+ protected Layer identifyServiceLayer(SpanLayer spanLayer) {
+ if (SpanLayer.FAAS.equals(spanLayer)) {
+ // function as a Service
+ return Layer.FAAS;
+ } else {
+ return Layer.GENERAL;
+ }
+ }
+}
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDepFromCrossThreadAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDepFromCrossThreadAnalysisListener.java
new file mode 100644
index 0000000..9ae66b5
--- /dev/null
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDepFromCrossThreadAnalysisListener.java
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener;
+
+import java.util.ArrayList;
+import java.util.List;
+import lombok.RequiredArgsConstructor;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentReference;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanLayer;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
+import org.apache.skywalking.oap.server.analyzer.provider.AnalyzerModuleConfig;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
+import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import org.apache.skywalking.oap.server.core.config.NamingControl;
+import org.apache.skywalking.oap.server.core.source.DetectPoint;
+import org.apache.skywalking.oap.server.core.source.SourceReceiver;
+import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
+
+/**
+ * Endpoint dependency could be detected by local and exit span in cross threads cases.
+ * This is an add-on to {@link RPCAnalysisListener}, which is detecting all RPC relative statistics.
+ *
+ * @since 9.0.0
+ */
+@RequiredArgsConstructor
+public class EndpointDepFromCrossThreadAnalysisListener extends CommonAnalysisListener implements ExitAnalysisListener, LocalAnalysisListener {
+ private final SourceReceiver sourceReceiver;
+ private final AnalyzerModuleConfig config;
+ private final NamingControl namingControl;
+
+ private final List<EndpointDependencyBuilder> depBuilders = new ArrayList<>(10);
+
+ @Override
+ public boolean containsPoint(final Point point) {
+ return Point.Exit.equals(point) || Point.Local.equals(point);
+ }
+
+ @Override
+ public void parseExit(final SpanObject span, final SegmentObject segmentObject) {
+ parseRefForEndpointDependency(span, segmentObject);
+ }
+
+ @Override
+ public void parseLocal(final SpanObject span, final SegmentObject segmentObject) {
+ parseRefForEndpointDependency(span, segmentObject);
+ }
+
+ private void parseRefForEndpointDependency(final SpanObject span, final SegmentObject segmentObject) {
+ if (span.getSkipAnalysis()) {
+ return;
+ }
+
+ if (span.getRefsCount() > 0) {
+ for (int i = 0; i < span.getRefsCount(); i++) {
+ SegmentReference reference = span.getRefs(i);
+ RPCTrafficSourceBuilder sourceBuilder = new RPCTrafficSourceBuilder(namingControl);
+
+ if (StringUtil.isEmpty(reference.getParentEndpoint())) {
+ sourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
+ } else {
+ sourceBuilder.setSourceEndpointName(reference.getParentEndpoint());
+ }
+
+ final String networkAddressUsedAtPeer = reference.getNetworkAddressUsedAtPeer();
+ boolean isMQ = span.getSpanLayer().equals(SpanLayer.MQ);
+ if (isMQ || config.getUninstrumentedGatewaysConfig()
+ .isAddressConfiguredAsGateway(networkAddressUsedAtPeer)) {
+ sourceBuilder.setSourceServiceName(networkAddressUsedAtPeer);
+ sourceBuilder.setSourceEndpointOwnerServiceName(reference.getParentService());
+ sourceBuilder.setSourceServiceInstanceName(networkAddressUsedAtPeer);
+ if (isMQ) {
+ sourceBuilder.setSourceLayer(Layer.VIRTUAL_MQ);
+ } else {
+ sourceBuilder.setSourceLayer(Layer.VIRTUAL_GATEWAY);
+ }
+ } else {
+ sourceBuilder.setSourceServiceName(reference.getParentService());
+ sourceBuilder.setSourceServiceInstanceName(reference.getParentServiceInstance());
+ sourceBuilder.setSourceLayer(Layer.GENERAL);
+ }
+ sourceBuilder.setDestEndpointName(span.getOperationName());
+ sourceBuilder.setDestServiceInstanceName(segmentObject.getServiceInstance());
+ sourceBuilder.setDestServiceName(segmentObject.getService());
+ sourceBuilder.setDestLayer(identifyServiceLayer(span.getSpanLayer()));
+ sourceBuilder.setDetectPoint(DetectPoint.SERVER);
+ sourceBuilder.setComponentId(span.getComponentId());
+ setPublicAttrs(sourceBuilder, span);
+ depBuilders.add(new EndpointDependencyBuilder(sourceBuilder));
+ }
+ }
+ }
+
+ private void setPublicAttrs(RPCTrafficSourceBuilder sourceBuilder, SpanObject span) {
+ long latency = span.getEndTime() - span.getStartTime();
+ sourceBuilder.setTimeBucket(TimeBucket.getMinuteTimeBucket(span.getStartTime()));
+ sourceBuilder.setLatency((int) latency);
+ sourceBuilder.setHttpResponseStatusCode(Const.NONE);
+ span.getTagsList().forEach(sourceBuilder::setTag);
+ sourceBuilder.setStatus(!span.getIsError());
+ }
+
+ @Override
+ public void build() {
+ depBuilders.forEach(endpointDep -> {
+ // Source endpoint meta could be generated duplicated if it belongs to an entry span of downstream.
+ // But if it belongs a local or exit span, then miss it in metadata.
+ // Consider OAP has the capability to remove duplicate, generate it anyway.
+ sourceReceiver.receive(endpointDep.toSourceEndpoint());
+ sourceReceiver.receive(endpointDep.toEndpoint());
+ sourceReceiver.receive(endpointDep.toEndpointRelation());
+ });
+ }
+
+ public static class Factory implements AnalysisListenerFactory {
+ private final SourceReceiver sourceReceiver;
+ private final NamingControl namingControl;
+
+ public Factory(ModuleManager moduleManager) {
+ this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+ this.namingControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingControl.class);
+ }
+
+ @Override
+ public AnalysisListener create(final ModuleManager moduleManager, final AnalyzerModuleConfig config) {
+ return new EndpointDepFromCrossThreadAnalysisListener(sourceReceiver, config, namingControl);
+ }
+ }
+}
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDependencyBuilder.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDependencyBuilder.java
new file mode 100644
index 0000000..d0531b1
--- /dev/null
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDependencyBuilder.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.skywalking.oap.server.core.source.Endpoint;
+import org.apache.skywalking.oap.server.core.source.EndpointMeta;
+import org.apache.skywalking.oap.server.core.source.EndpointRelation;
+
+/**
+ * EndpointDependencyBuilder is a wrapper of {@link RPCTrafficSourceBuilder}, and only exposes to build endpoint
+ * relation relative sources.
+ *
+ * @since 9.0.0
+ */
+@RequiredArgsConstructor
+public class EndpointDependencyBuilder {
+ private final RPCTrafficSourceBuilder rpcTrafficSourceBuilder;
+
+ EndpointRelation toEndpointRelation() {
+ return rpcTrafficSourceBuilder.toEndpointRelation();
+ }
+
+ Endpoint toEndpoint() {
+ return rpcTrafficSourceBuilder.toEndpoint();
+ }
+
+ EndpointMeta toSourceEndpoint() {
+ EndpointMeta sourceEndpoint = new EndpointMeta();
+ sourceEndpoint.setServiceName(rpcTrafficSourceBuilder.getSourceServiceName());
+ sourceEndpoint.setServiceNormal(rpcTrafficSourceBuilder.getSourceLayer().isNormal());
+ sourceEndpoint.setEndpoint(rpcTrafficSourceBuilder.getSourceEndpointName());
+ sourceEndpoint.setTimeBucket(rpcTrafficSourceBuilder.getTimeBucket());
+ return sourceEndpoint;
+ }
+}
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointSourceBuilder.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointSourceBuilder.java
new file mode 100644
index 0000000..9612336
--- /dev/null
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointSourceBuilder.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
+import org.apache.skywalking.oap.server.core.config.NamingControl;
+import org.apache.skywalking.oap.server.core.source.DetectPoint;
+import org.apache.skywalking.oap.server.core.source.Endpoint;
+import org.apache.skywalking.oap.server.core.source.RequestType;
+
+/**
+ * Endpoint traffic source builder. Endpoint represents an entrance to expose logic.
+ * Typically, it could be HTTP URI, gRPC service name, etc. for RPC, or a local method is required to be analyzed.
+ *
+ * @since 9.0.0
+ */
+@RequiredArgsConstructor
+class EndpointSourceBuilder {
+ protected final NamingControl namingControl;
+
+ @Getter
+ @Setter
+ protected long timeBucket;
+ @Getter
+ @Setter
+ protected String destServiceName;
+ @Getter
+ @Setter
+ protected Layer destLayer;
+ @Getter
+ @Setter
+ protected String destServiceInstanceName;
+ @Getter
+ @Setter
+ protected String destEndpointName;
+ @Getter
+ @Setter
+ protected int latency;
+ @Getter
+ @Setter
+ protected boolean status;
+ @Getter
+ @Setter
+ protected int httpResponseStatusCode;
+ @Getter
+ @Setter
+ protected String rpcStatusCode;
+ @Getter
+ @Setter
+ protected RequestType type;
+ @Getter
+ @Setter
+ protected DetectPoint detectPoint;
+ @Getter
+ protected final List<String> tags = new ArrayList<>();
+ @Getter
+ protected final Map<String, String> originalTags = new HashMap<>();
+
+ void prepare() {
+ this.destServiceName = namingControl.formatServiceName(destServiceName);
+ this.destServiceInstanceName = namingControl.formatInstanceName(destServiceInstanceName);
+ this.destEndpointName = namingControl.formatEndpointName(destServiceName, destEndpointName);
+ }
+
+ /**
+ * Endpoint meta and metrics of {@link #destEndpointName} related source. The metrics base on the OAL scripts.
+ */
+ Endpoint toEndpoint() {
+ Endpoint endpoint = new Endpoint();
+ endpoint.setName(destEndpointName);
+ endpoint.setServiceName(destServiceName);
+ endpoint.setServiceLayer(destLayer);
+ endpoint.setServiceInstanceName(destServiceInstanceName);
+ endpoint.setLatency(latency);
+ endpoint.setStatus(status);
+ endpoint.setHttpResponseStatusCode(httpResponseStatusCode);
+ endpoint.setRpcStatusCode(rpcStatusCode);
+ endpoint.setType(type);
+ endpoint.setTags(tags);
+ endpoint.setOriginalTags(originalTags);
+ endpoint.setTimeBucket(timeBucket);
+ return endpoint;
+ }
+
+ void setTag(KeyStringValuePair tag) {
+ tags.add(tag.getKey().trim() + ":" + tag.getValue().trim());
+ originalTags.put(tag.getKey(), tag.getValue());
+ }
+}
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/NetworkAddressAliasMappingListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/NetworkAddressAliasMappingListener.java
index b15b60d..4826673 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/NetworkAddressAliasMappingListener.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/NetworkAddressAliasMappingListener.java
@@ -35,7 +35,7 @@ import org.apache.skywalking.oap.server.analyzer.provider.AnalyzerModuleConfig;
/**
* NetworkAddressAliasMappingListener use the propagated data in the segment reference, set up the alias relationship
* between network address and current service and instance. The alias relationship will be used in the {@link
- * MultiScopesAnalysisListener#parseExit(SpanObject, SegmentObject)} to setup the accurate target destination service
+ * RPCAnalysisListener#parseExit(SpanObject, SegmentObject)} to setup the accurate target destination service
* and instance.
*
* This is a key point of SkyWalking header propagation protocol.
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/MultiScopesAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
similarity index 86%
rename from oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/MultiScopesAnalysisListener.java
rename to oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
index 4e3d4d2..8e56c6a 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/MultiScopesAnalysisListener.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
@@ -18,8 +18,6 @@
package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener;
-import static org.apache.skywalking.oap.server.analyzer.provider.trace.parser.SpanTags.LOGIC_ENDPOINT;
-
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.util.ArrayList;
@@ -32,15 +30,14 @@ import org.apache.skywalking.apm.network.language.agent.v3.SegmentReference;
import org.apache.skywalking.apm.network.language.agent.v3.SpanLayer;
import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
import org.apache.skywalking.apm.network.language.agent.v3.SpanType;
-import org.apache.skywalking.oap.server.core.UnexpectedException;
-import org.apache.skywalking.oap.server.core.analysis.Layer;
-import org.apache.skywalking.oap.server.library.util.StringUtil;
import org.apache.skywalking.oap.server.analyzer.provider.AnalyzerModuleConfig;
import org.apache.skywalking.oap.server.analyzer.provider.trace.DBLatencyThresholdsAndWatcher;
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.SpanTags;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.core.analysis.manual.networkalias.NetworkAddressAlias;
import org.apache.skywalking.oap.server.core.cache.NetworkAddressAliasCache;
@@ -51,19 +48,20 @@ import org.apache.skywalking.oap.server.core.source.RequestType;
import org.apache.skywalking.oap.server.core.source.ServiceInstanceRelation;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
+
+import static org.apache.skywalking.oap.server.analyzer.provider.trace.parser.SpanTags.LOGIC_ENDPOINT;
/**
- * MultiScopesSpanListener includes the most segment to source(s) logic.
- *
- * This listener traverses the whole segment.
+ * RPCAnalysisListener detects all RPC relative statistics.
*/
@Slf4j
@RequiredArgsConstructor
-public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitAnalysisListener, LocalAnalysisListener {
- private final List<SourceBuilder> entrySourceBuilders = new ArrayList<>(10);
- private final List<SourceBuilder> exitSourceBuilders = new ArrayList<>(10);
+public class RPCAnalysisListener extends CommonAnalysisListener implements EntryAnalysisListener, ExitAnalysisListener, LocalAnalysisListener {
+ private final List<RPCTrafficSourceBuilder> callingInTraffic = new ArrayList<>(10);
+ private final List<RPCTrafficSourceBuilder> callingOutTraffic = new ArrayList<>(10);
private final List<DatabaseSlowStatementBuilder> dbSlowStatementBuilders = new ArrayList<>(10);
- private final List<SourceBuilder> logicEndpointBuilders = new ArrayList<>(10);
+ private final List<EndpointSourceBuilder> logicEndpointBuilders = new ArrayList<>(10);
private final Gson gson = new Gson();
private final SourceReceiver sourceReceiver;
private final AnalyzerModuleConfig config;
@@ -94,7 +92,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
if (span.getRefsCount() > 0) {
for (int i = 0; i < span.getRefsCount(); i++) {
SegmentReference reference = span.getRefs(i);
- SourceBuilder sourceBuilder = new SourceBuilder(namingControl);
+ RPCTrafficSourceBuilder sourceBuilder = new RPCTrafficSourceBuilder(namingControl);
if (StringUtil.isEmpty(reference.getParentEndpoint())) {
sourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
@@ -114,6 +112,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
} else {
sourceBuilder.setSourceLayer(Layer.VIRTUAL_GATEWAY);
}
+ sourceBuilder.setSourceEndpointOwnerServiceLayer(Layer.GENERAL);
} else {
sourceBuilder.setSourceServiceName(reference.getParentService());
sourceBuilder.setSourceServiceInstanceName(reference.getParentServiceInstance());
@@ -126,10 +125,10 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
sourceBuilder.setDetectPoint(DetectPoint.SERVER);
sourceBuilder.setComponentId(span.getComponentId());
setPublicAttrs(sourceBuilder, span);
- entrySourceBuilders.add(sourceBuilder);
+ callingInTraffic.add(sourceBuilder);
}
} else {
- SourceBuilder sourceBuilder = new SourceBuilder(namingControl);
+ RPCTrafficSourceBuilder sourceBuilder = new RPCTrafficSourceBuilder(namingControl);
sourceBuilder.setSourceServiceName(Const.USER_SERVICE_NAME);
sourceBuilder.setSourceServiceInstanceName(Const.USER_INSTANCE_NAME);
sourceBuilder.setSourceEndpointName(Const.USER_ENDPOINT_NAME);
@@ -142,7 +141,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
sourceBuilder.setComponentId(span.getComponentId());
setPublicAttrs(sourceBuilder, span);
- entrySourceBuilders.add(sourceBuilder);
+ callingInTraffic.add(sourceBuilder);
}
parseLogicEndpoints(span, segmentObject);
@@ -158,7 +157,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
return;
}
- SourceBuilder sourceBuilder = new SourceBuilder(namingControl);
+ RPCTrafficSourceBuilder sourceBuilder = new RPCTrafficSourceBuilder(namingControl);
final String networkAddress = span.getPeer();
if (StringUtil.isEmpty(networkAddress)) {
@@ -185,7 +184,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
networkAddressAlias.getRepresentServiceInstanceId());
sourceBuilder.setDestServiceName(serviceIDDefinition.getName());
/*
- * Some of the agent can not have the upstream real network address, such as https://github.com/apache/skywalking-nginx-lua.
+ * Some agents can not have the upstream real network address, such as https://github.com/apache/skywalking-nginx-lua.
* Keeping dest instance name as NULL makes no instance relation generate from this exit span.
*/
if (!config.shouldIgnorePeerIPDue2Virtual(span.getComponentId())) {
@@ -197,7 +196,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
sourceBuilder.setDetectPoint(DetectPoint.CLIENT);
sourceBuilder.setComponentId(span.getComponentId());
setPublicAttrs(sourceBuilder, span);
- exitSourceBuilders.add(sourceBuilder);
+ callingOutTraffic.add(sourceBuilder);
if (RequestType.DATABASE.equals(sourceBuilder.getType())) {
boolean isSlowDBAccess = false;
@@ -239,17 +238,15 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
}
}
- private void setPublicAttrs(SourceBuilder sourceBuilder, SpanObject span) {
+ private void setPublicAttrs(RPCTrafficSourceBuilder sourceBuilder, SpanObject span) {
long latency = span.getEndTime() - span.getStartTime();
sourceBuilder.setTimeBucket(TimeBucket.getMinuteTimeBucket(span.getStartTime()));
sourceBuilder.setLatency((int) latency);
- sourceBuilder.setResponseCode(Const.NONE);
sourceBuilder.setHttpResponseStatusCode(Const.NONE);
span.getTagsList().forEach(tag -> {
final String tagKey = tag.getKey();
if (SpanTags.STATUS_CODE.equals(tagKey) || SpanTags.HTTP_RESPONSE_STATUS_CODE.equals(tagKey)) {
try {
- sourceBuilder.setResponseCode(Integer.parseInt(tag.getValue()));
sourceBuilder.setHttpResponseStatusCode(Integer.parseInt(tag.getValue()));
} catch (NumberFormatException e) {
log.warn("span {} has illegal status code {}", span, tag.getValue());
@@ -285,14 +282,14 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
@Override
public void build() {
- entrySourceBuilders.forEach(entrySourceBuilder -> {
- entrySourceBuilder.prepare();
- sourceReceiver.receive(entrySourceBuilder.toService());
- sourceReceiver.receive(entrySourceBuilder.toServiceInstance());
- sourceReceiver.receive(entrySourceBuilder.toEndpoint());
- sourceReceiver.receive(entrySourceBuilder.toServiceRelation());
- sourceReceiver.receive(entrySourceBuilder.toServiceInstanceRelation());
- EndpointRelation endpointRelation = entrySourceBuilder.toEndpointRelation();
+ callingInTraffic.forEach(callingIn -> {
+ callingIn.prepare();
+ sourceReceiver.receive(callingIn.toService());
+ sourceReceiver.receive(callingIn.toServiceInstance());
+ sourceReceiver.receive(callingIn.toEndpoint());
+ sourceReceiver.receive(callingIn.toServiceRelation());
+ sourceReceiver.receive(callingIn.toServiceInstanceRelation());
+ EndpointRelation endpointRelation = callingIn.toEndpointRelation();
/*
* Parent endpoint could be none, because in SkyWalking Cross Process Propagation Headers Protocol v2,
* endpoint in ref could be empty, based on that, endpoint relation maybe can't be established.
@@ -306,20 +303,20 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
}
});
- exitSourceBuilders.forEach(exitSourceBuilder -> {
- exitSourceBuilder.prepare();
- sourceReceiver.receive(exitSourceBuilder.toServiceRelation());
+ callingOutTraffic.forEach(callingOut -> {
+ callingOut.prepare();
+ sourceReceiver.receive(callingOut.toServiceRelation());
/*
* Some of the agent can not have the upstream real network address, such as https://github.com/apache/skywalking-nginx-lua.
*/
- final ServiceInstanceRelation serviceInstanceRelation = exitSourceBuilder.toServiceInstanceRelation();
+ final ServiceInstanceRelation serviceInstanceRelation = callingOut.toServiceInstanceRelation();
if (serviceInstanceRelation != null) {
sourceReceiver.receive(serviceInstanceRelation);
}
- if (RequestType.DATABASE.equals(exitSourceBuilder.getType())) {
- sourceReceiver.receive(exitSourceBuilder.toServiceMeta());
- sourceReceiver.receive(exitSourceBuilder.toDatabaseAccess());
+ if (RequestType.DATABASE.equals(callingOut.getType())) {
+ sourceReceiver.receive(callingOut.toServiceMeta());
+ sourceReceiver.receive(callingOut.toDatabaseAccess());
}
});
@@ -335,7 +332,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
}
/**
- * Logic endpoint could be represent through an entry span or local span. It has special meaning from API
+ * Logic endpoint could represent through an entry span or local span. It has special meaning from API
* perspective. But it is an actual RPC call.
*/
private void parseLogicEndpoints(final SpanObject span, final SegmentObject segmentObject) {
@@ -358,7 +355,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
} else {
break;
}
- SourceBuilder sourceBuilder = new SourceBuilder(namingControl);
+ EndpointSourceBuilder sourceBuilder = new EndpointSourceBuilder(namingControl);
sourceBuilder.setTimeBucket(TimeBucket.getMinuteTimeBucket(span.getStartTime()));
sourceBuilder.setDestServiceName(segmentObject.getService());
sourceBuilder.setDestServiceInstanceName(segmentObject.getServiceInstance());
@@ -368,7 +365,6 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
sourceBuilder.setLatency(latency);
sourceBuilder.setStatus(status);
sourceBuilder.setType(RequestType.LOGIC);
- sourceBuilder.setResponseCode(Const.NONE);
logicEndpointBuilders.add(sourceBuilder);
default:
break;
@@ -379,7 +375,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
/**
* Identify the layer of remote service. Such as ${@link Layer#DATABASE} and ${@link Layer#CACHE}.
*/
- private Layer identifyRemoteServiceLayer(SpanLayer spanLayer, String peer) {
+ protected Layer identifyRemoteServiceLayer(SpanLayer spanLayer, String peer) {
switch (spanLayer) {
case Unknown:
return Layer.UNDEFINED;
@@ -405,18 +401,6 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
}
}
- /**
- * Identify the layer of span's service/instance owner. Such as ${@link Layer#FAAS} and ${@link Layer#GENERAL}.
- */
- private Layer identifyServiceLayer(SpanLayer spanLayer) {
- if (SpanLayer.FAAS.equals(spanLayer)) {
- // function as a Service
- return Layer.FAAS;
- } else {
- return Layer.GENERAL;
- }
- }
-
public static class Factory implements AnalysisListenerFactory {
private final SourceReceiver sourceReceiver;
private final NetworkAddressAliasCache networkAddressAliasCache;
@@ -434,7 +418,7 @@ public class MultiScopesAnalysisListener implements EntryAnalysisListener, ExitA
@Override
public AnalysisListener create(ModuleManager moduleManager, AnalyzerModuleConfig config) {
- return new MultiScopesAnalysisListener(
+ return new RPCAnalysisListener(
sourceReceiver, config, networkAddressAliasCache, namingControl);
}
}
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/SourceBuilder.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCTrafficSourceBuilder.java
similarity index 75%
rename from oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/SourceBuilder.java
rename to oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCTrafficSourceBuilder.java
index 67386d4..929dc9c 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/SourceBuilder.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCTrafficSourceBuilder.java
@@ -18,20 +18,11 @@
package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import lombok.Setter;
-import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
import org.apache.skywalking.oap.server.core.analysis.Layer;
-import org.apache.skywalking.oap.server.library.util.StringUtil;
import org.apache.skywalking.oap.server.core.config.NamingControl;
import org.apache.skywalking.oap.server.core.source.DatabaseAccess;
-import org.apache.skywalking.oap.server.core.source.DetectPoint;
-import org.apache.skywalking.oap.server.core.source.Endpoint;
import org.apache.skywalking.oap.server.core.source.EndpointRelation;
import org.apache.skywalking.oap.server.core.source.RequestType;
import org.apache.skywalking.oap.server.core.source.Service;
@@ -39,11 +30,14 @@ import org.apache.skywalking.oap.server.core.source.ServiceInstance;
import org.apache.skywalking.oap.server.core.source.ServiceInstanceRelation;
import org.apache.skywalking.oap.server.core.source.ServiceMeta;
import org.apache.skywalking.oap.server.core.source.ServiceRelation;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
-@RequiredArgsConstructor
-class SourceBuilder {
- private final NamingControl namingControl;
-
+/**
+ * @since 9.0.0 Rename "SourceBuilder` to this. Add {@link EndpointSourceBuilder} for making source builder more specific.
+ *
+ * RPC traffic could be detected by server side or client side according to agent tech stack.
+ */
+class RPCTrafficSourceBuilder extends EndpointSourceBuilder {
@Getter
@Setter
private String sourceServiceName;
@@ -54,68 +48,39 @@ class SourceBuilder {
@Setter
private String sourceServiceInstanceName;
/**
+ * Same as {@link #sourceEndpointOwnerServiceName}
* Source endpoint could be not owned by {@link #sourceServiceName}, such as in the MQ or un-instrumented proxy
- * cases. This service always comes from the span.ref, so it is always a normal service.
+ * cases. This service always comes from the span.ref, so it is always a general service.
+ *
+ * @since 9.0.0
*/
@Getter
@Setter
- private String sourceEndpointOwnerServiceName;
- @Getter
- @Setter
- private String sourceEndpointName;
- @Getter
- @Setter
- private String destServiceName;
- @Getter
- @Setter
- private Layer destLayer;
+ private Layer sourceEndpointOwnerServiceLayer;
+ /**
+ * Source endpoint could be not owned by {@link #sourceServiceName}, such as in the MQ or un-instrumented proxy
+ * cases. This service always comes from the span.ref, so it is always a general service.
+ */
@Getter
@Setter
- private String destServiceInstanceName;
+ private String sourceEndpointOwnerServiceName;
@Getter
@Setter
- private String destEndpointName;
+ private String sourceEndpointName;
@Getter
@Setter
private int componentId;
- @Getter
- @Setter
- private int latency;
- @Getter
- @Setter
- private boolean status;
- @Getter
- @Setter
- @Deprecated
- private int responseCode;
- @Getter
- @Setter
- private int httpResponseStatusCode;
- @Getter
- @Setter
- private String rpcStatusCode;
- @Getter
- @Setter
- private RequestType type;
- @Getter
- @Setter
- private DetectPoint detectPoint;
- @Getter
- @Setter
- private long timeBucket;
- @Getter
- private final List<String> tags = new ArrayList<>();
- @Getter
- private final Map<String, String> originalTags = new HashMap<>();
+
+ RPCTrafficSourceBuilder(final NamingControl namingControl) {
+ super(namingControl);
+ }
void prepare() {
this.sourceServiceName = namingControl.formatServiceName(sourceServiceName);
this.sourceEndpointOwnerServiceName = namingControl.formatServiceName(sourceEndpointOwnerServiceName);
this.sourceServiceInstanceName = namingControl.formatInstanceName(sourceServiceInstanceName);
this.sourceEndpointName = namingControl.formatEndpointName(sourceServiceName, sourceEndpointName);
- this.destServiceName = namingControl.formatServiceName(destServiceName);
- this.destServiceInstanceName = namingControl.formatInstanceName(destServiceInstanceName);
- this.destEndpointName = namingControl.formatEndpointName(destServiceName, destEndpointName);
+ super.prepare();
}
/**
@@ -129,7 +94,6 @@ class SourceBuilder {
service.setLayer(destLayer);
service.setLatency(latency);
service.setStatus(status);
- service.setResponseCode(responseCode);
service.setHttpResponseStatusCode(httpResponseStatusCode);
service.setRpcStatusCode(rpcStatusCode);
service.setType(type);
@@ -154,7 +118,6 @@ class SourceBuilder {
serviceRelation.setComponentId(componentId);
serviceRelation.setLatency(latency);
serviceRelation.setStatus(status);
- serviceRelation.setResponseCode(responseCode);
serviceRelation.setHttpResponseStatusCode(httpResponseStatusCode);
serviceRelation.setRpcStatusCode(rpcStatusCode);
serviceRelation.setType(type);
@@ -175,7 +138,6 @@ class SourceBuilder {
serviceInstance.setEndpointName(destEndpointName);
serviceInstance.setLatency(latency);
serviceInstance.setStatus(status);
- serviceInstance.setResponseCode(responseCode);
serviceInstance.setHttpResponseStatusCode(httpResponseStatusCode);
serviceInstance.setRpcStatusCode(rpcStatusCode);
serviceInstance.setType(type);
@@ -203,7 +165,6 @@ class SourceBuilder {
serviceInstanceRelation.setComponentId(componentId);
serviceInstanceRelation.setLatency(latency);
serviceInstanceRelation.setStatus(status);
- serviceInstanceRelation.setResponseCode(responseCode);
serviceInstanceRelation.setHttpResponseStatusCode(httpResponseStatusCode);
serviceInstanceRelation.setRpcStatusCode(rpcStatusCode);
serviceInstanceRelation.setType(type);
@@ -213,28 +174,7 @@ class SourceBuilder {
}
/**
- * Endpoint meta and metrics of {@link #destEndpointName} related source. The metrics base on the OAL scripts.
- */
- Endpoint toEndpoint() {
- Endpoint endpoint = new Endpoint();
- endpoint.setName(destEndpointName);
- endpoint.setServiceName(destServiceName);
- endpoint.setServiceLayer(destLayer);
- endpoint.setServiceInstanceName(destServiceInstanceName);
- endpoint.setLatency(latency);
- endpoint.setStatus(status);
- endpoint.setResponseCode(responseCode);
- endpoint.setHttpResponseStatusCode(httpResponseStatusCode);
- endpoint.setRpcStatusCode(rpcStatusCode);
- endpoint.setType(type);
- endpoint.setTags(tags);
- endpoint.setOriginalTags(originalTags);
- endpoint.setTimeBucket(timeBucket);
- return endpoint;
- }
-
- /**
- * Endpoint depedency meta and metrics related source. The metrics base on the OAL scripts.
+ * Endpoint dependency meta and metrics related source. The metrics base on the OAL scripts.
*/
EndpointRelation toEndpointRelation() {
if (StringUtil.isEmpty(sourceEndpointName) || StringUtil.isEmpty(destEndpointName)) {
@@ -247,7 +187,7 @@ class SourceBuilder {
endpointRelation.setServiceLayer(sourceLayer);
} else {
endpointRelation.setServiceName(sourceEndpointOwnerServiceName);
- endpointRelation.setServiceLayer(Layer.GENERAL);
+ endpointRelation.setServiceLayer(sourceEndpointOwnerServiceLayer);
}
endpointRelation.setServiceInstanceName(sourceServiceInstanceName);
endpointRelation.setChildEndpoint(destEndpointName);
@@ -257,7 +197,6 @@ class SourceBuilder {
endpointRelation.setComponentId(componentId);
endpointRelation.setRpcLatency(latency);
endpointRelation.setStatus(status);
- endpointRelation.setResponseCode(responseCode);
endpointRelation.setHttpResponseStatusCode(httpResponseStatusCode);
endpointRelation.setRpcStatusCode(rpcStatusCode);
endpointRelation.setType(type);
@@ -294,9 +233,4 @@ class SourceBuilder {
databaseAccess.setTimeBucket(timeBucket);
return databaseAccess;
}
-
- public void setTag(KeyStringValuePair tag) {
- tags.add(tag.getKey().trim() + ":" + tag.getValue().trim());
- originalTags.put(tag.getKey(), tag.getValue());
- }
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java
index 10b689e..3767e1f 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java
@@ -69,8 +69,7 @@ class ServiceTopologyBuilder {
/*
* Use the alias name to make topology relationship accurate.
*/
- if (!destService.isReal()
- && networkAddressAliasCache.get(destService.getName()) != null) {
+ if (networkAddressAliasCache.get(destService.getName()) != null) {
/*
* If alias exists, mean this network address is representing a real service.
*/
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
index e2ca33b..ac42420 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
@@ -71,10 +71,6 @@ public class Endpoint extends Source {
private boolean status;
@Getter
@Setter
- @Deprecated
- private int responseCode;
- @Getter
- @Setter
private int httpResponseStatusCode;
@Getter
@Setter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointMeta.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointMeta.java
index 3e5b7c8..2673d53 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointMeta.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointMeta.java
@@ -31,6 +31,7 @@ public class EndpointMeta extends Source {
@Setter
private String serviceName;
@Setter
+ @Getter
private boolean isServiceNormal;
@Getter
@Setter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
index 3b10368..8436336 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
@@ -79,10 +79,6 @@ public class EndpointRelation extends Source {
private boolean status;
@Getter
@Setter
- @Deprecated
- private int responseCode;
- @Getter
- @Setter
private int httpResponseStatusCode;
@Getter
@Setter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java
index bb37874..e3322c1 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java
@@ -67,10 +67,6 @@ public class Service extends Source {
private boolean status;
@Getter
@Setter
- @Deprecated
- private int responseCode;
- @Getter
- @Setter
private int httpResponseStatusCode;
@Getter
@Setter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java
index 5099fbf..0f85098 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstance.java
@@ -71,10 +71,6 @@ public class ServiceInstance extends Source {
private boolean status;
@Getter
@Setter
- @Deprecated
- private int responseCode;
- @Getter
- @Setter
private int httpResponseStatusCode;
@Getter
@Setter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java
index 9f12000..db3d98b 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceRelation.java
@@ -88,10 +88,6 @@ public class ServiceRelation extends Source {
private boolean status;
@Getter
@Setter
- @Deprecated
- private int responseCode;
- @Getter
- @Setter
private int httpResponseStatusCode;
@Getter
@Setter
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
index d4fa9b0..50147e0 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
@@ -130,7 +130,6 @@ public class TelemetryDataDispatcher {
service.setEndpointName(metrics.getEndpoint());
service.setLatency(metrics.getLatency());
service.setStatus(metrics.getStatus());
- service.setResponseCode(metrics.getResponseCode());
service.setHttpResponseStatusCode(metrics.getResponseCode());
service.setType(protocol2Type(metrics.getProtocol()));
service.getSideCar().setInternalErrorCode(metrics.getInternalErrorCode());
@@ -153,7 +152,6 @@ public class TelemetryDataDispatcher {
serviceRelation.setLatency(metrics.getLatency());
serviceRelation.setStatus(metrics.getStatus());
serviceRelation.setType(protocol2Type(metrics.getProtocol()));
- serviceRelation.setResponseCode(metrics.getResponseCode());
serviceRelation.setHttpResponseStatusCode(metrics.getResponseCode());
serviceRelation.setDetectPoint(detectPointMapping(metrics.getDetectPoint()));
serviceRelation.setComponentId(protocol2Component(metrics.getProtocol()));
@@ -174,7 +172,6 @@ public class TelemetryDataDispatcher {
serviceInstance.setEndpointName(metrics.getEndpoint());
serviceInstance.setLatency(metrics.getLatency());
serviceInstance.setStatus(metrics.getStatus());
- serviceInstance.setResponseCode(metrics.getResponseCode());
serviceInstance.setHttpResponseStatusCode(metrics.getResponseCode());
serviceInstance.setType(protocol2Type(metrics.getProtocol()));
serviceInstance.getSideCar().setInternalErrorCode(metrics.getInternalErrorCode());
@@ -221,7 +218,6 @@ public class TelemetryDataDispatcher {
endpoint.setServiceInstanceName(metrics.getDestServiceInstance());
endpoint.setLatency(metrics.getLatency());
endpoint.setStatus(metrics.getStatus());
- endpoint.setResponseCode(metrics.getResponseCode());
endpoint.setHttpResponseStatusCode(metrics.getResponseCode());
endpoint.setType(protocol2Type(metrics.getProtocol()));
endpoint.getSideCar().setInternalErrorCode(metrics.getInternalErrorCode());
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/EndpointDepFromCrossThreadAnalysisListenerTest.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/EndpointDepFromCrossThreadAnalysisListenerTest.java
new file mode 100644
index 0000000..218250b
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/EndpointDepFromCrossThreadAnalysisListenerTest.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener;
+
+import java.util.List;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
+import org.apache.skywalking.apm.network.language.agent.v3.RefType;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentReference;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanLayer;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanType;
+import org.apache.skywalking.oap.server.analyzer.provider.AnalyzerModuleConfig;
+import org.apache.skywalking.oap.server.analyzer.provider.trace.UninstrumentedGatewaysConfig;
+import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.EndpointDepFromCrossThreadAnalysisListener;
+import org.apache.skywalking.oap.server.core.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
+import org.apache.skywalking.oap.server.core.config.NamingControl;
+import org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping;
+import org.apache.skywalking.oap.server.core.source.Endpoint;
+import org.apache.skywalking.oap.server.core.source.EndpointMeta;
+import org.apache.skywalking.oap.server.core.source.EndpointRelation;
+import org.apache.skywalking.oap.server.core.source.ISource;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+public class EndpointDepFromCrossThreadAnalysisListenerTest {
+ @Mock
+ private static AnalyzerModuleConfig CONFIG;
+ private static NamingControl NAMING_CONTROL = new NamingControl(
+ 70,
+ 100,
+ 100,
+ new EndpointNameGrouping()
+ );
+ private final String serviceId = IDManager.ServiceID.buildId("local-service", true);
+ private final String instanceId = IDManager.ServiceInstanceID.buildId(serviceId, "local-instance");
+
+ @Before
+ public void init() throws Exception {
+ MockitoAnnotations.openMocks(this).close();
+
+ final UninstrumentedGatewaysConfig uninstrumentedGatewaysConfig = Mockito.mock(
+ UninstrumentedGatewaysConfig.class);
+ when(uninstrumentedGatewaysConfig.isAddressConfiguredAsGateway(any())).thenReturn(false);
+ when(CONFIG.getUninstrumentedGatewaysConfig()).thenReturn(uninstrumentedGatewaysConfig);
+ }
+
+ @Test
+ public void testEndpointDependency() {
+ final MockReceiver mockReceiver = new MockReceiver();
+ EndpointDepFromCrossThreadAnalysisListener listener = new EndpointDepFromCrossThreadAnalysisListener(
+ mockReceiver,
+ CONFIG,
+ NAMING_CONTROL
+ );
+
+ final long startTime = System.currentTimeMillis();
+ SpanObject spanObject = SpanObject.newBuilder()
+ .setOperationName("/local.method")
+ .setStartTime(startTime)
+ .setEndTime(startTime + 1000L)
+ .setIsError(true)
+ .setSpanType(SpanType.Local)
+ .setSpanLayer(SpanLayer.Unknown)
+ .addTags(KeyStringValuePair.newBuilder()
+ .setKey("param")
+ .setValue("value")
+ .build())
+ .addRefs(
+ SegmentReference.newBuilder()
+ .setRefType(RefType.CrossThread)
+ .setParentService("local-service")
+ .setParentServiceInstance("local-instance")
+ .setParentEndpoint("/local.parentMethod")
+ .build()
+ ).setComponentId(10)
+ .build();
+ final SegmentObject segment = SegmentObject.newBuilder()
+ .setService("local-service")
+ .setServiceInstance("local-instance")
+ .addSpans(spanObject)
+ .build();
+ listener.parseLocal(spanObject, segment);
+ listener.build();
+ final List<ISource> receivedSources = mockReceiver.getReceivedSources();
+ final EndpointMeta sourceEndpoint = (EndpointMeta) receivedSources.get(0);
+ Assert.assertEquals("local-service", sourceEndpoint.getServiceName());
+ Assert.assertEquals("/local.parentMethod", sourceEndpoint.getEndpoint());
+ Assert.assertTrue(sourceEndpoint.isServiceNormal());
+ sourceEndpoint.prepare();
+ Assert.assertEquals(serviceId, sourceEndpoint.getServiceId());
+
+ final Endpoint targetEndpoint = (Endpoint) receivedSources.get(1);
+ Assert.assertEquals("local-service", targetEndpoint.getServiceName());
+ Assert.assertEquals("/local.method", targetEndpoint.getName());
+ Assert.assertTrue(targetEndpoint.getServiceLayer().isNormal());
+ targetEndpoint.prepare();
+ Assert.assertEquals(serviceId, targetEndpoint.getServiceId());
+
+ final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(2);
+ Assert.assertEquals("local-service", endpointRelation.getServiceName());
+ Assert.assertEquals("local-service", endpointRelation.getChildServiceName());
+ Assert.assertEquals("local-instance", endpointRelation.getServiceInstanceName());
+ Assert.assertEquals("local-instance", endpointRelation.getChildServiceInstanceName());
+ Assert.assertEquals("/local.parentMethod", endpointRelation.getEndpoint());
+ Assert.assertEquals("/local.method", endpointRelation.getChildEndpoint());
+ Assert.assertEquals(10, endpointRelation.getComponentId());
+ Assert.assertEquals(Layer.GENERAL, endpointRelation.getServiceLayer());
+ Assert.assertEquals(Layer.GENERAL, endpointRelation.getChildServiceLayer());
+ Assert.assertFalse(endpointRelation.isStatus());
+ // No RPC/HTTP response code.
+ Assert.assertEquals(0, endpointRelation.getHttpResponseStatusCode());
+ Assert.assertEquals(null, endpointRelation.getRpcStatusCode());
+ }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/MultiScopesAnalysisListenerTest.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
similarity index 96%
rename from oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/MultiScopesAnalysisListenerTest.java
rename to oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
index 7d6e6eb..6884430 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/MultiScopesAnalysisListenerTest.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
@@ -31,7 +31,7 @@ import org.apache.skywalking.oap.server.analyzer.provider.AnalyzerModuleConfig;
import org.apache.skywalking.oap.server.analyzer.provider.trace.UninstrumentedGatewaysConfig;
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.SpanTags;
import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.AnalysisListener;
-import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.MultiScopesAnalysisListener;
+import org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener.RPCAnalysisListener;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.IDManager;
import org.apache.skywalking.oap.server.core.analysis.Layer;
@@ -60,12 +60,12 @@ import static org.mockito.Matchers.any;
import static org.mockito.Mockito.when;
/**
- * MultiScopesSpanListener includes the most segment to source(s) logic. This test covers most cases about the segment
+ * RPCAnalysisListenerTest includes the most segment to source(s) logic. This test covers most cases about the segment
* to sources translation.
*
* This test is a good way to study about how OAP analysis trace segment.
*/
-public class MultiScopesAnalysisListenerTest {
+public class RPCAnalysisListenerTest {
@Mock
private static AnalyzerModuleConfig CONFIG;
@Mock
@@ -98,7 +98,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testContainsPoint() {
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
new MockReceiver(),
CONFIG,
CACHE,
@@ -117,7 +117,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testEntrySpanWithoutRef() {
final MockReceiver mockReceiver = new MockReceiver();
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
mockReceiver,
CONFIG,
CACHE,
@@ -160,7 +160,6 @@ public class MultiScopesAnalysisListenerTest {
final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(4);
final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(5);
Assert.assertEquals("mock-service", service.getName());
- Assert.assertEquals(500, service.getResponseCode());
Assert.assertEquals(500, service.getHttpResponseStatusCode());
Assert.assertEquals("OK", service.getRpcStatusCode());
Assert.assertFalse(service.isStatus());
@@ -180,7 +179,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testEntrySpanRef() {
final MockReceiver mockReceiver = new MockReceiver();
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
mockReceiver,
CONFIG,
CACHE,
@@ -246,7 +245,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testEntrySpanMQRef() {
final MockReceiver mockReceiver = new MockReceiver();
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
mockReceiver,
CONFIG,
CACHE,
@@ -305,7 +304,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testParseLocalLogicSpan() {
final MockReceiver mockReceiver = new MockReceiver();
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
mockReceiver,
CONFIG,
CACHE,
@@ -348,7 +347,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testParseSpanWithLogicEndpointTag() {
final MockReceiver mockReceiver = new MockReceiver();
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
mockReceiver,
CONFIG,
CACHE,
@@ -393,7 +392,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testExitSpanWithoutAlias() {
final MockReceiver mockReceiver = new MockReceiver();
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
mockReceiver,
CONFIG,
CACHE,
@@ -439,7 +438,7 @@ public class MultiScopesAnalysisListenerTest {
@Test
public void testExitSpanWithAlias() {
final MockReceiver mockReceiver = new MockReceiver();
- MultiScopesAnalysisListener listener = new MultiScopesAnalysisListener(
+ RPCAnalysisListener listener = new RPCAnalysisListener(
mockReceiver,
CONFIG,
CACHE2,
diff --git a/test/e2e-v2/cases/lua/expected/dependency-services.yml b/test/e2e-v2/cases/lua/expected/dependency-services.yml
index 65f9048..cd28d5a 100644
--- a/test/e2e-v2/cases/lua/expected/dependency-services.yml
+++ b/test/e2e-v2/cases/lua/expected/dependency-services.yml
@@ -30,13 +30,19 @@ nodes:
{{- end }}
calls:
{{- contains .calls }}
-- source: {{ b64enc "e2e-service-entry-provider"}}.1
+- source: {{ b64enc "e2e-service-entry-provider" }}.1
sourcecomponents: []
- target: {{ b64enc "User_Service_Name"}}.1
+ target: {{ b64enc "e2e-service-end-provider"}}.1
targetcomponents: []
- id: {{ b64enc "e2e-service-entry-provider"}}.1-{{ b64enc "User_Service_Name"}}.1
+ id: {{ b64enc "e2e-service-entry-provider" }}.1-{{ b64enc "e2e-service-end-provider"}}.1
detectpoints:
- CLIENT
+- source: {{ b64enc "e2e-service-entry-provider" }}.1
+ sourcecomponents: []
+ target: {{ b64enc "User_Service_Name"}}.1
+ targetcomponents: []
+ id: {{ b64enc "e2e-service-entry-provider" }}.1-{{ b64enc "User_Service_Name"}}.1
+ detectpoints:
- SERVER
- source: {{ b64enc "User_Service_Name" }}.1
sourcecomponents: []
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index bf4d20d..294966a 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SW_AGENT_JAVA_COMMIT=5bd41ec0afd35f7345a9a51daf5d2e34b3e2e4b1
+SW_AGENT_JAVA_COMMIT=233cce5bb6341a62811807696bc172b2d340d566
SW_AGENT_SATELLITE_COMMIT=1987e1d566ac90f6b58a45fd9bfa27bf8faad635
SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
SW_AGENT_NODEJS_COMMIT=2e7560518aff846befd4d6bc815fe5e38c704a11