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/25 12:27:22 UTC
[skywalking] 01/01: Enhance endpoint dependency analysis to support cross threads cases.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch endpoint-dep
in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit c452c91432ec30a480b808a9e57a7a246e3be77f
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Fri Mar 25 20:27:02 2022 +0800
Enhance endpoint dependency analysis to support cross threads cases.
---
CHANGES.md | 2 +
.../analyzer/provider/AnalyzerModuleProvider.java | 6 +-
.../parser/listener/CommonAnalysisListener.java | 39 ++++++
.../EndpointDepFromNotRPCAnalysisListener.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 ++++------------
.../oap/server/core/source/Endpoint.java | 4 -
.../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 -
...tenerTest.java => RPCAnalysisListenerTest.java} | 23 ++--
test/e2e-v2/script/env | 2 +-
17 files changed, 436 insertions(+), 185 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index d1f6c88..865f8a8 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -139,6 +139,8 @@ 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.
#### 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..5cd3067 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.EndpointDepFromNotRPCAnalysisListener;
+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 EndpointDepFromNotRPCAnalysisListener.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/EndpointDepFromNotRPCAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDepFromNotRPCAnalysisListener.java
new file mode 100644
index 0000000..9ef5665
--- /dev/null
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/EndpointDepFromNotRPCAnalysisListener.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.
+ * {@link RPCAnalysisListener} is detecting all RPC relative statistics.
+ *
+ * @since 9.0.0
+ */
+@RequiredArgsConstructor
+public class EndpointDepFromNotRPCAnalysisListener 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 EndpointDepFromNotRPCAnalysisListener(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/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/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/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/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