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 2020/03/25 07:51:40 UTC
[skywalking] branch remove-endpoint-register updated: Step 2,
finish the basic and core DAO changes.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch remove-endpoint-register
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/remove-endpoint-register by this push:
new f933cdd Step 2, finish the basic and core DAO changes.
f933cdd is described below
commit f933cdd0541c11424d683d9343583b1e6d833665
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Wed Mar 25 15:50:36 2020 +0800
Step 2, finish the basic and core DAO changes.
---
.../core/analysis/manual/RelationDefineUtil.java | 46 +++-----
.../analysis/manual/endpoint/EndpointTraffic.java | 52 +++++++--
.../manual/endpoint/EndpointTrafficDispatcher.java | 2 +-
.../EndpointRelationServerSideMetrics.java | 2 -
.../manual/log/HTTPAccessLogDispatcher.java | 2 +-
.../analysis/manual/segment/SegmentRecord.java | 4 +-
.../server/core/query/AggregationQueryService.java | 4 +-
.../server/core/query/MetadataQueryService.java | 6 +-
.../core/query/ServiceInstanceTopologyBuilder.java | 19 +---
.../oap/server/core/query/TopologyBuilder.java | 25 ++---
.../server/core/query/TopologyQueryService.java | 4 +-
.../oap/server/core/query/TraceQueryService.java | 2 +-
.../oap/server/core/query/entity/Endpoint.java | 2 +-
.../oap/server/core/source/AbstractLog.java | 2 +-
.../oap/server/core/source/DetectPoint.java | 23 +++-
.../skywalking/oap/server/core/source/Segment.java | 2 +-
.../oap/server/core/storage/StorageModule.java | 2 -
.../storage/cache/IEndpointInventoryCacheDAO.java | 29 -----
.../server/core/storage/query/ITraceQueryDAO.java | 2 +-
.../oap/query/graphql/resolver/TraceQuery.java | 2 +-
.../sharing/server/CoreRegisterLinker.java | 22 ----
.../listener/segment/SegmentSpanListener.java | 43 +++----
.../standardization/ReferenceIdExchanger.java | 76 +------------
.../parser/standardization/SpanExchanger.java | 33 ------
.../server/receiver/zipkin/trace/SpanForward.java | 2 +-
.../StorageModuleElasticsearchProvider.java | 4 -
.../cache/EndpointInventoryCacheEsDAO.java | 80 -------------
.../elasticsearch/query/MetadataQueryEsDAO.java | 32 ++++--
.../elasticsearch/query/TopologyQueryEsDAO.java | 125 +++++++++++++++------
.../elasticsearch/query/TraceQueryEsDAO.java | 21 +++-
.../StorageModuleElasticsearch7Provider.java | 4 -
.../elasticsearch7/query/MetadataQueryEs7DAO.java | 5 +-
.../elasticsearch7/query/TraceQueryEs7DAO.java | 4 +-
.../plugin/influxdb/query/TopologyQuery.java | 33 +++++-
.../storage/plugin/influxdb/query/TraceQuery.java | 4 +-
.../elasticsearch/JaegerTraceQueryEsDAO.java | 18 ++-
.../jdbc/h2/dao/H2EndpointInventoryCacheDAO.java | 51 ---------
.../plugin/jdbc/h2/dao/H2MetadataQueryDAO.java | 60 ++++++----
.../plugin/jdbc/h2/dao/H2TopologyQueryDAO.java | 29 ++++-
.../plugin/jdbc/h2/dao/H2TraceQueryDAO.java | 4 +-
.../elasticsearch/ZipkinTraceQueryEsDAO.java | 18 ++-
41 files changed, 395 insertions(+), 505 deletions(-)
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java
index 7c9c6ef..281635f 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/RelationDefineUtil.java
@@ -21,13 +21,16 @@ package org.apache.skywalking.oap.server.core.analysis.manual;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.UnexpectedException;
public class RelationDefineUtil {
+ /**
+ * @return the service or instance relationship string id.
+ */
public static String buildEntityId(RelationDefine define) {
- return String.valueOf(define.source) + Const.ID_SPLIT + String.valueOf(
- define.dest) + Const.ID_SPLIT + String.valueOf(define.componentId);
+ return define.source + Const.ID_SPLIT + define.dest + Const.ID_SPLIT + define.componentId;
}
/**
@@ -41,6 +44,9 @@ public class RelationDefineUtil {
return new RelationDefine(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
}
+ /**
+ * @return the endpoint relationship string id.
+ */
public static String buildEndpointEntityId(EndpointRelationDefine define) {
return define.sourceServiceId
+ Const.ID_SPLIT
@@ -67,37 +73,21 @@ public class RelationDefineUtil {
);
}
+ @RequiredArgsConstructor
@Getter
public static class RelationDefine {
- private int source;
- private int dest;
- private int componentId;
-
- public RelationDefine(int source, int dest, int componentId) {
- this.source = source;
- this.dest = dest;
- this.componentId = componentId;
- }
+ private final int source;
+ private final int dest;
+ private final int componentId;
}
+ @RequiredArgsConstructor
@Getter
public static class EndpointRelationDefine {
- private int sourceServiceId;
- private String source;
- private int destServiceId;
- private String dest;
- private int componentId;
-
- public EndpointRelationDefine(final int sourceServiceId,
- final String source,
- final int destServiceId,
- final String dest,
- final int componentId) {
- this.sourceServiceId = sourceServiceId;
- this.source = source;
- this.destServiceId = destServiceId;
- this.dest = dest;
- this.componentId = componentId;
- }
+ private final int sourceServiceId;
+ private final String source;
+ private final int destServiceId;
+ private final String dest;
+ private final int componentId;
}
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
index 3286e41..3007f4c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java
@@ -22,14 +22,17 @@ import com.google.common.base.Strings;
import java.util.HashMap;
import java.util.Map;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.Stream;
+import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
+import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.core.source.ScopeDeclaration;
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
@@ -37,7 +40,9 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column;
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_TRAFFIC;
@ScopeDeclaration(id = ENDPOINT_TRAFFIC, name = "EndpointTraffic")
-@Stream(name = EndpointTraffic.INDEX_NAME, scopeId = DefaultScopeDefine.ENDPOINT_TRAFFIC, builder = EndpointTraffic.Builder.class, processor = MetricsStreamProcessor.class)
+@Stream(name = EndpointTraffic.INDEX_NAME, scopeId = DefaultScopeDefine.ENDPOINT_TRAFFIC,
+ builder = EndpointTraffic.Builder.class, processor = MetricsStreamProcessor.class,
+ supportDownSampling = false)
public class EndpointTraffic extends Metrics {
public static final String INDEX_NAME = "endpoint_traffic";
@@ -62,7 +67,15 @@ public class EndpointTraffic extends Metrics {
@Column(columnName = DETECT_POINT)
private int detectPoint;
- public static String buildId(int serviceId, String endpointName, int detectPoint) {
+ public static String buildId(int serviceId, String endpointName, DetectPoint detectPoint) {
+ return buildId(serviceId, endpointName, detectPoint.value());
+ }
+
+ public static String buildId(EndpointTraffic endpointTraffic) {
+ return buildId(endpointTraffic.serviceId, endpointTraffic.name, endpointTraffic.detectPoint);
+ }
+
+ private static String buildId(int serviceId, String endpointName, int detectPoint) {
return serviceId + Const.ID_SPLIT + endpointName + Const.ID_SPLIT + detectPoint;
}
@@ -70,25 +83,38 @@ public class EndpointTraffic extends Metrics {
* @param id in the storage of endpoint traffic
* @return [serviceId, endpointName, detectPoint]
*/
- public static String[] splitID(String id) {
+ public static EndpointID splitID(String id) {
final String[] strings = id.split(Const.ID_PARSER_SPLIT);
if (strings.length != 3) {
throw new UnexpectedException("Can't split endpoint id into 3 parts, " + id);
}
- return strings;
+ return new EndpointID(
+ Integer.parseInt(strings[0]), strings[1], DetectPoint.valueOf(Integer.parseInt(strings[2])));
+ }
+
+ @RequiredArgsConstructor
+ public static class EndpointID {
+ @Getter
+ private final int serviceId;
+ @Getter
+ private final String endpointName;
+ @Getter
+ private final DetectPoint detectPoint;
}
@Override
public String id() {
- return buildId(serviceId, name, detectPoint);
+ // Downgrade the time bucket to day level only.
+ // supportDownSampling == false for this entity.
+ String splitJointId = String.valueOf(getTimeBucket());
+ splitJointId += Const.ID_SPLIT + entityId;
+ return splitJointId;
}
@Override
public int hashCode() {
int result = 17;
- result = 31 * result + serviceId;
- result = 31 * result + name.hashCode();
- result = 31 * result + detectPoint;
+ result = 31 * result + entityId.hashCode();
return result;
}
@@ -121,6 +147,16 @@ public class EndpointTraffic extends Metrics {
return remoteBuilder;
}
+ /**
+ * Only accept the minute level time bucket and convert it to day level.
+ */
+ @Override
+ public void setTimeBucket(long timeBucket) {
+ if (TimeBucket.isMinuteBucket(timeBucket)) {
+ super.setTimeBucket(timeBucket / 10000);
+ }
+ }
+
@Override
public void deserialize(RemoteData remoteData) {
setServiceId(remoteData.getDataIntegers(0));
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
index 1bb0378..41db2cf 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTrafficDispatcher.java
@@ -34,7 +34,7 @@ public class EndpointTrafficDispatcher implements SourceDispatcher<Endpoint> {
EndpointTraffic traffic = new EndpointTraffic();
traffic.setName(source.getName());
traffic.setServiceId(source.getServiceId());
- traffic.setDetectPoint(DetectPoint.SERVER.ordinal());
+ traffic.setDetectPoint(DetectPoint.SERVER.value());
traffic.setEntityId(source.getEntityId());
MetricsStreamProcessor.getInstance().in(traffic);
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java
index 85081b3..14dd9a4 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpointrelation/EndpointRelationServerSideMetrics.java
@@ -20,12 +20,10 @@ package org.apache.skywalking.oap.server.core.analysis.manual.endpointrelation;
import java.util.HashMap;
import java.util.Map;
-import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.Stream;
-import org.apache.skywalking.oap.server.core.analysis.manual.RelationDefineUtil;
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/HTTPAccessLogDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/HTTPAccessLogDispatcher.java
index f92eced..9a6914f 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/HTTPAccessLogDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/HTTPAccessLogDispatcher.java
@@ -31,7 +31,7 @@ public class HTTPAccessLogDispatcher implements SourceDispatcher<HTTPAccessLog>
record.setTimeBucket(source.getTimeBucket());
record.setServiceId(source.getServiceId());
record.setServiceInstanceId(source.getServiceInstanceId());
- record.setEndpointId(source.getEndpointId());
+ record.setEndpointName(source.getEndpointName());
record.setTraceId(source.getTraceId());
record.setIsError(source.getIsError());
record.setStatusCode(source.getStatusCode());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java
index b5f94cc..a36e69c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java
@@ -73,7 +73,7 @@ public class SegmentRecord extends Record {
@Setter
@Getter
@Column(columnName = ENDPOINT_ID)
- private int endpointId;
+ private String endpointId;
@Setter
@Getter
@Column(columnName = START_TIME)
@@ -137,7 +137,7 @@ public class SegmentRecord extends Record {
record.setServiceId(((Number) dbMap.get(SERVICE_ID)).intValue());
record.setServiceInstanceId(((Number) dbMap.get(SERVICE_INSTANCE_ID)).intValue());
record.setEndpointName((String) dbMap.get(ENDPOINT_NAME));
- record.setEndpointId(((Number) dbMap.get(ENDPOINT_ID)).intValue());
+ record.setEndpointId((String) dbMap.get(ENDPOINT_ID));
record.setStartTime(((Number) dbMap.get(START_TIME)).longValue());
record.setEndTime(((Number) dbMap.get(END_TIME)).longValue());
record.setLatency(((Number) dbMap.get(LATENCY)).intValue());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java
index 9154f7b..b0bf8e2 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AggregationQueryService.java
@@ -122,7 +122,7 @@ public class AggregationQueryService implements Service {
indName, ValueColumnMetadata.INSTANCE.getValueCName(indName), topN, downsampling, startTB, endTB, order);
for (TopNEntity entity : topNEntities) {
- entity.setName(EndpointTraffic.splitID(entity.getId())[1]);
+ entity.setName(EndpointTraffic.splitID(entity.getId()).getEndpointName());
}
return topNEntities;
}
@@ -138,7 +138,7 @@ public class AggregationQueryService implements Service {
serviceId, indName, ValueColumnMetadata.INSTANCE
.getValueCName(indName), topN, downsampling, startTB, endTB, order);
for (TopNEntity entity : topNEntities) {
- entity.setName(EndpointTraffic.splitID(entity.getId())[1]);
+ entity.setName(EndpointTraffic.splitID(entity.getId()).getEndpointName());
}
return topNEntities;
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
index 7b9454e..2d7bd82 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java
@@ -102,12 +102,12 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
}
public EndpointInfo getEndpointInfo(final String endpointId) throws IOException {
- final String[] strings = EndpointTraffic.splitID(endpointId);
- int serviceId = Integer.parseInt(strings[0]);
+ final EndpointTraffic.EndpointID endpointID = EndpointTraffic.splitID(endpointId);
+ int serviceId = endpointID.getServiceId();
EndpointInfo endpointInfo = new EndpointInfo();
endpointInfo.setId(endpointId);
- endpointInfo.setName(strings[1]);
+ endpointInfo.setName(endpointID.getEndpointName());
endpointInfo.setServiceId(serviceId);
endpointInfo.setServiceName(getServiceInventoryCache().get(serviceId).getName());
return endpointInfo;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceInstanceTopologyBuilder.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceInstanceTopologyBuilder.java
index 486f486..895b725 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceInstanceTopologyBuilder.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceInstanceTopologyBuilder.java
@@ -60,16 +60,14 @@ public class ServiceInstanceTopologyBuilder {
ServiceInstanceTopology build(List<Call.CallDetail> serviceInstanceRelationClientCalls,
List<Call.CallDetail> serviceInstanceRelationServerCalls) {
- filterZeroSourceOrTargetReference(serviceInstanceRelationClientCalls);
- filterZeroSourceOrTargetReference(serviceInstanceRelationServerCalls);
Map<Integer, ServiceInstanceNode> nodes = new HashMap<>();
List<Call> calls = new LinkedList<>();
HashMap<String, Call> callMap = new HashMap<>();
for (Call.CallDetail clientCall : serviceInstanceRelationClientCalls) {
- ServiceInstanceInventory sourceInstance = serviceInstanceInventoryCache.get(clientCall.getSource());
- ServiceInstanceInventory targetInstance = serviceInstanceInventoryCache.get(clientCall.getTarget());
+ ServiceInstanceInventory sourceInstance = serviceInstanceInventoryCache.get(Integer.parseInt(clientCall.getSource()));
+ ServiceInstanceInventory targetInstance = serviceInstanceInventoryCache.get(Integer.parseInt(clientCall.getTarget()));
if (isNull(sourceInstance) || isNull(targetInstance)) {
continue;
@@ -113,8 +111,8 @@ public class ServiceInstanceTopologyBuilder {
}
for (Call.CallDetail serverCall : serviceInstanceRelationServerCalls) {
- ServiceInstanceInventory sourceInstance = serviceInstanceInventoryCache.get(serverCall.getSource());
- ServiceInstanceInventory targetInstance = serviceInstanceInventoryCache.get(serverCall.getTarget());
+ ServiceInstanceInventory sourceInstance = serviceInstanceInventoryCache.get(Integer.parseInt(serverCall.getSource()));
+ ServiceInstanceInventory targetInstance = serviceInstanceInventoryCache.get(Integer.parseInt(serverCall.getTarget()));
if (isNull(sourceInstance) || isNull(targetInstance)) {
continue;
@@ -202,13 +200,4 @@ public class ServiceInstanceTopologyBuilder {
}
return instanceNode;
}
-
- private void filterZeroSourceOrTargetReference(List<Call.CallDetail> serviceRelationClientCalls) {
- for (int i = serviceRelationClientCalls.size() - 1; i >= 0; i--) {
- Call.CallDetail call = serviceRelationClientCalls.get(i);
- if (call.getSource() == 0 || call.getTarget() == 0) {
- serviceRelationClientCalls.remove(i);
- }
- }
- }
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyBuilder.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyBuilder.java
index 8aeb8ad..2c6ad73 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyBuilder.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyBuilder.java
@@ -55,16 +55,14 @@ class TopologyBuilder {
}
Topology build(List<Call.CallDetail> serviceRelationClientCalls, List<Call.CallDetail> serviceRelationServerCalls) {
- filterZeroSourceOrTargetReference(serviceRelationClientCalls);
- filterZeroSourceOrTargetReference(serviceRelationServerCalls);
Map<Integer, Node> nodes = new HashMap<>();
List<Call> calls = new LinkedList<>();
HashMap<String, Call> callMap = new HashMap<>();
for (Call.CallDetail clientCall : serviceRelationClientCalls) {
- ServiceInventory source = serviceInventoryCache.get(clientCall.getSource());
- ServiceInventory target = serviceInventoryCache.get(clientCall.getTarget());
+ ServiceInventory source = serviceInventoryCache.get(Integer.parseInt(clientCall.getSource()));
+ ServiceInventory target = serviceInventoryCache.get(Integer.parseInt(clientCall.getTarget()));
if (isNull(source) || isNull(target)) {
continue;
@@ -107,8 +105,8 @@ class TopologyBuilder {
}
for (Call.CallDetail serverCall : serviceRelationServerCalls) {
- ServiceInventory source = serviceInventoryCache.get(serverCall.getSource());
- ServiceInventory target = serviceInventoryCache.get(serverCall.getTarget());
+ ServiceInventory source = serviceInventoryCache.get(Integer.parseInt(serverCall.getSource()));
+ ServiceInventory target = serviceInventoryCache.get(Integer.parseInt(serverCall.getTarget()));
if (isNull(source) || isNull(target)) {
continue;
@@ -117,7 +115,7 @@ class TopologyBuilder {
if (source.getSequence() == Const.USER_SERVICE_ID) {
if (!nodes.containsKey(source.getSequence())) {
Node visualUserNode = new Node();
- visualUserNode.setId(source.getSequence());
+ visualUserNode.setId(String.valueOf(source.getSequence()));
visualUserNode.setName(Const.USER_CODE);
visualUserNode.setType(Const.USER_CODE.toUpperCase());
visualUserNode.setReal(false);
@@ -128,7 +126,7 @@ class TopologyBuilder {
if (BooleanUtils.valueToBoolean(source.getIsAddress())) {
if (!nodes.containsKey(source.getSequence())) {
Node conjecturalNode = new Node();
- conjecturalNode.setId(source.getSequence());
+ conjecturalNode.setId(String.valueOf(source.getSequence()));
conjecturalNode.setName(source.getName());
conjecturalNode.setType(
componentLibraryCatalogService.getServerNameBasedOnComponent(serverCall.getComponentId()));
@@ -178,7 +176,7 @@ class TopologyBuilder {
private Node buildNode(ServiceInventory serviceInventory) {
Node serviceNode = new Node();
- serviceNode.setId(serviceInventory.getSequence());
+ serviceNode.setId(String.valueOf(serviceInventory.getSequence()));
serviceNode.setName(serviceInventory.getName());
if (BooleanUtils.valueToBoolean(serviceInventory.getIsAddress())) {
serviceNode.setReal(false);
@@ -187,13 +185,4 @@ class TopologyBuilder {
}
return serviceNode;
}
-
- private void filterZeroSourceOrTargetReference(List<Call.CallDetail> serviceRelationClientCalls) {
- for (int i = serviceRelationClientCalls.size() - 1; i >= 0; i--) {
- Call.CallDetail call = serviceRelationClientCalls.get(i);
- if (call.getSource() == 0 || call.getTarget() == 0) {
- serviceRelationClientCalls.remove(i);
- }
- }
- }
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java
index 858d612..d793d1a 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TopologyQueryService.java
@@ -27,6 +27,7 @@ import java.util.Set;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.Downsampling;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
import org.apache.skywalking.oap.server.core.query.entity.Call;
import org.apache.skywalking.oap.server.core.query.entity.Node;
@@ -184,7 +185,8 @@ public class TopologyQueryService implements Service {
private Node buildEndpointNode(String endpointId) {
Node node = new Node();
node.setId(endpointId);
- node.setName(getEndpointInventoryCache().get(endpointId).getName());
+ final EndpointTraffic.EndpointID endpointID = EndpointTraffic.splitID(endpointId);
+ node.setName(endpointID.getEndpointName());
node.setType(Const.EMPTY_STRING);
node.setReal(true);
return node;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java
index 1ffdcc5..940938b 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java
@@ -100,7 +100,7 @@ public class TraceQueryService implements Service {
public TraceBrief queryBasicTraces(final int serviceId,
final int serviceInstanceId,
- final int endpointId,
+ final String endpointId,
final String traceId,
final String endpointName,
final int minTraceDuration,
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java
index dc8696c..73e5cf8 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java
@@ -24,6 +24,6 @@ import lombok.Setter;
@Getter
@Setter
public class Endpoint {
- private int id;
+ private String id;
private String name;
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/AbstractLog.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/AbstractLog.java
index c91002b..fc9f824 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/AbstractLog.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/AbstractLog.java
@@ -30,7 +30,7 @@ public abstract class AbstractLog extends Source {
private long timestamp;
private int serviceId;
private int serviceInstanceId;
- private int endpointId;
+ private String endpointName;
private String traceId;
private int isError;
private String statusCode;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java
index 9e40512..e649542 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java
@@ -18,10 +18,14 @@
package org.apache.skywalking.oap.server.core.source;
+import lombok.RequiredArgsConstructor;
import org.apache.skywalking.apm.network.language.agent.SpanType;
+@RequiredArgsConstructor
public enum DetectPoint {
- SERVER, CLIENT, PROXY, UNRECOGNIZED;
+ SERVER(0), CLIENT(1), PROXY(2), UNRECOGNIZED(3);
+
+ private final int value;
public static DetectPoint fromSpanType(SpanType spanType) {
switch (spanType) {
@@ -49,4 +53,21 @@ public enum DetectPoint {
return UNRECOGNIZED;
}
}
+
+ public static DetectPoint valueOf(int value) {
+ switch (value) {
+ case 0:
+ return SERVER;
+ case 1:
+ return CLIENT;
+ case 2:
+ return PROXY;
+ default:
+ return UNRECOGNIZED;
+ }
+ }
+
+ public int value() {
+ return this.value;
+ }
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java
index 21bd727..1660ba3 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Segment.java
@@ -53,7 +53,7 @@ public class Segment extends Source {
private String endpointName;
@Setter
@Getter
- private int endpointId;
+ private String endpointId;
@Setter
@Getter
private long startTime;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java
index a3194b6..be4d340 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java
@@ -18,7 +18,6 @@
package org.apache.skywalking.oap.server.core.storage;
-import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.INetworkAddressInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO;
@@ -56,7 +55,6 @@ public class StorageModule extends ModuleDefine {
IHistoryDeleteDAO.class,
IServiceInventoryCacheDAO.class,
IServiceInstanceInventoryCacheDAO.class,
- IEndpointInventoryCacheDAO.class,
INetworkAddressInventoryCacheDAO.class,
ITopologyQueryDAO.class,
IMetricsQueryDAO.class,
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/cache/IEndpointInventoryCacheDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/cache/IEndpointInventoryCacheDAO.java
deleted file mode 100644
index 00d41e2..0000000
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/cache/IEndpointInventoryCacheDAO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.core.storage.cache;
-
-import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
-import org.apache.skywalking.oap.server.core.storage.DAO;
-
-public interface IEndpointInventoryCacheDAO extends DAO {
-
- int getEndpointId(int serviceId, String endpointName, int detectPoint);
-
- EndpointTraffic get(int endpointId);
-}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/ITraceQueryDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/ITraceQueryDAO.java
index 693f0a1..b47d2fa 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/ITraceQueryDAO.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/ITraceQueryDAO.java
@@ -30,7 +30,7 @@ import org.apache.skywalking.oap.server.library.module.Service;
public interface ITraceQueryDAO extends Service {
TraceBrief queryBasicTraces(long startSecondTB, long endSecondTB, long minDuration, long maxDuration,
- String endpointName, int serviceId, int serviceInstanceId, int endpointId, String traceId, int limit, int from,
+ String endpointName, int serviceId, int serviceInstanceId, String endpointId, String traceId, int limit, int from,
TraceState traceState, QueryOrder queryOrder) throws IOException;
List<SegmentRecord> queryByTraceId(String traceId) throws IOException;
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java
index ce4c2e5..6e2b72c 100644
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java
@@ -75,7 +75,7 @@ public class TraceQuery implements GraphQLQueryResolver {
int maxDuration = condition.getMaxTraceDuration();
String endpointName = condition.getEndpointName();
int serviceId = StringUtils.isEmpty(condition.getServiceId()) ? 0 : Integer.parseInt(condition.getServiceId());
- int endpointId = StringUtils.isEmpty(condition.getEndpointId()) ? 0 : Integer.parseInt(condition.getEndpointId());
+ String endpointId = condition.getEndpointId();
int serviceInstanceId = StringUtils.isEmpty(condition.getServiceInstanceId()) ? 0 : Integer.parseInt(condition.getServiceInstanceId());
TraceState traceState = condition.getTraceState();
QueryOrder queryOrder = condition.getQueryOrder();
diff --git a/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java b/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java
index 843d425..1677762 100644
--- a/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java
+++ b/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/CoreRegisterLinker.java
@@ -19,9 +19,7 @@
package org.apache.skywalking.oap.server.receiver.sharing.server;
import org.apache.skywalking.oap.server.core.CoreModule;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -30,9 +28,7 @@ public class CoreRegisterLinker {
private static volatile ModuleManager MODULE_MANAGER;
private static volatile IServiceInventoryRegister SERVICE_INVENTORY_REGISTER;
private static volatile IServiceInstanceInventoryRegister SERVICE_INSTANCE_INVENTORY_REGISTER;
- private static volatile IEndpointTrafficGenerator ENDPOINT_INVENTORY_REGISTER;
private static volatile ServiceInventoryCache SERVICE_INVENTORY_CACHE;
- private static volatile EndpointInventoryCache ENDPOINT_INVENTORY_CACHE;
public static void setModuleManager(ModuleManager moduleManager) {
CoreRegisterLinker.MODULE_MANAGER = moduleManager;
@@ -56,15 +52,6 @@ public class CoreRegisterLinker {
return SERVICE_INSTANCE_INVENTORY_REGISTER;
}
- public static IEndpointTrafficGenerator getEndpointInventoryRegister() {
- if (ENDPOINT_INVENTORY_REGISTER == null) {
- ENDPOINT_INVENTORY_REGISTER = MODULE_MANAGER.find(CoreModule.NAME)
- .provider()
- .getService(IEndpointTrafficGenerator.class);
- }
- return ENDPOINT_INVENTORY_REGISTER;
- }
-
public static ServiceInventoryCache getServiceInventoryCache() {
if (SERVICE_INVENTORY_CACHE == null) {
SERVICE_INVENTORY_CACHE = MODULE_MANAGER.find(CoreModule.NAME)
@@ -73,13 +60,4 @@ public class CoreRegisterLinker {
}
return SERVICE_INVENTORY_CACHE;
}
-
- public static EndpointInventoryCache getEndpointInventoryCache() {
- if (ENDPOINT_INVENTORY_CACHE == null) {
- ENDPOINT_INVENTORY_CACHE = MODULE_MANAGER.find(CoreModule.NAME)
- .provider()
- .getService(EndpointInventoryCache.class);
- }
- return ENDPOINT_INVENTORY_CACHE;
- }
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java
index bbb399b..544d87c 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java
@@ -21,10 +21,10 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.language.agent.UniqueId;
-import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
-import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
+import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.core.source.Segment;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
@@ -46,18 +46,13 @@ public class SegmentSpanListener implements FirstSpanListener, EntrySpanListener
private final SourceReceiver sourceReceiver;
private final TraceSegmentSampler sampler;
private final Segment segment = new Segment();
- private final EndpointInventoryCache serviceNameCacheService;
private SAMPLE_STATUS sampleStatus = SAMPLE_STATUS.UNKNOWN;
- private int entryEndpointId = 0;
- private int firstEndpointId = 0;
- private String firstEndpointName = "";
+ private String endpointId = "";
+ private String endpointName = "";
private SegmentSpanListener(ModuleManager moduleManager, TraceSegmentSampler sampler) {
this.sampler = sampler;
this.sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
- this.serviceNameCacheService = moduleManager.find(CoreModule.NAME)
- .provider()
- .getService(EndpointInventoryCache.class);
}
@Override
@@ -84,13 +79,18 @@ public class SegmentSpanListener implements FirstSpanListener, EntrySpanListener
segment.setDataBinary(segmentCoreInfo.getDataBinary());
segment.setVersion(segmentCoreInfo.getVersion().number());
- firstEndpointId = spanDecorator.getOperationNameId();
- firstEndpointName = spanDecorator.getOperationName();
+ endpointId = EndpointTraffic.buildId(segmentCoreInfo.getServiceId(), spanDecorator.getOperationName(),
+ DetectPoint.fromSpanType(spanDecorator.getSpanType())
+ );
+ endpointName = spanDecorator.getOperationName();
}
@Override
public void parseEntry(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo) {
- entryEndpointId = spanDecorator.getOperationNameId();
+ endpointId = EndpointTraffic.buildId(segmentCoreInfo.getServiceId(), spanDecorator.getOperationName(),
+ DetectPoint.fromSpanType(spanDecorator.getSpanType())
+ );
+ endpointName = spanDecorator.getOperationName();
}
@Override
@@ -121,23 +121,8 @@ public class SegmentSpanListener implements FirstSpanListener, EntrySpanListener
return;
}
- if (entryEndpointId == Const.NONE) {
- if (firstEndpointId != Const.NONE) {
- /*
- * Since 6.6.0, only entry span is treated as an endpoint. Other span's endpoint id == 0.
- */
- segment.setEndpointId(firstEndpointId);
- segment.setEndpointName(serviceNameCacheService.get(firstEndpointId).getName());
- } else {
- /*
- * Only fill first operation name for the trace list query, as no endpoint id.
- */
- segment.setEndpointName(firstEndpointName);
- }
- } else {
- segment.setEndpointId(entryEndpointId);
- segment.setEndpointName(serviceNameCacheService.get(entryEndpointId).getName());
- }
+ segment.setEndpointId(endpointId);
+ segment.setEndpointName(endpointName);
sourceReceiver.receive(segment);
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
index 5932fa0..44e09f3 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
@@ -23,9 +23,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
-import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.ReferenceDecorator;
@@ -39,7 +37,6 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator
@Slf4j
public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
private static ReferenceIdExchanger EXCHANGER;
- private final IEndpointTrafficGenerator endpointInventoryRegister;
private final ServiceInstanceInventoryCache serviceInstanceInventoryCache;
private final INetworkAddressInventoryRegister networkAddressInventoryRegister;
@@ -51,9 +48,6 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
}
private ReferenceIdExchanger(ModuleManager moduleManager) {
- this.endpointInventoryRegister = moduleManager.find(CoreModule.NAME)
- .provider()
- .getService(IEndpointTrafficGenerator.class);
this.networkAddressInventoryRegister = moduleManager.find(CoreModule.NAME)
.provider()
.getService(INetworkAddressInventoryRegister.class);
@@ -62,65 +56,13 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
.getService(ServiceInstanceInventoryCache.class);
}
+ /**
+ * @since 7.1.0 Endpoint doesn't register anymore. Therefore, exchange of ref only relates to the network address only.
+ */
@Override
public boolean exchange(ReferenceDecorator standardBuilder, int serviceId) {
boolean exchanged = true;
- if (standardBuilder.getEntryEndpointId() == 0) {
- String entryEndpointName = Strings.isNullOrEmpty(
- standardBuilder.getEntryEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
- .getEntryEndpointName();
- int entryServiceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId())
- .getServiceId();
- int entryEndpointId = getEndpointId(entryServiceId, entryEndpointName);
- if (entryEndpointId == 0) {
- if (log.isDebugEnabled()) {
- log.debug(
- "entry endpoint name: {} from service id: {} exchange failed", entryEndpointName,
- entryServiceId
- );
- }
-
- exchanged = false;
- } else {
- standardBuilder.toBuilder();
- standardBuilder.setEntryEndpointId(entryEndpointId);
- standardBuilder.setEntryEndpointName(Const.EMPTY_STRING);
- }
- } else {
- /**
- * Since 6.6.0, endpoint id could be -1, as it is not an endpoint. Such as local span and exist span.
- */
- }
-
- if (standardBuilder.getParentEndpointId() == 0) {
- String parentEndpointName = Strings.isNullOrEmpty(
- standardBuilder.getParentEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
- .getParentEndpointName();
- int parentServiceId = serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId())
- .getServiceId();
- int parentEndpointId = getEndpointId(parentServiceId, parentEndpointName);
-
- if (parentEndpointId == 0) {
- if (log.isDebugEnabled()) {
- log.debug(
- "parent endpoint name: {} from service id: {} exchange failed", parentEndpointName,
- parentServiceId
- );
- }
-
- exchanged = false;
- } else {
- standardBuilder.toBuilder();
- standardBuilder.setParentEndpointId(parentEndpointId);
- standardBuilder.setParentEndpointName(Const.EMPTY_STRING);
- }
- } else {
- /**
- * Since 6.6.0, endpoint id could be -1, as it is not an endpoint. Such as local span and exist span.
- */
- }
-
if (standardBuilder.getNetworkAddressId() == 0 && !Strings.isNullOrEmpty(standardBuilder.getNetworkAddress())) {
int networkAddressId = networkAddressInventoryRegister.getOrCreate(
standardBuilder.getNetworkAddress(), null);
@@ -142,16 +84,4 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
}
return exchanged;
}
-
- /**
- * @since 6.6.0 The endpoint in the ref should be server endpoint only. The agent will/should use `-1`, when it can't
- * find the endpoint of entry span in the current tracing context when build the ref.
- * @since 5.0 Endpoint in ref could be local or exit span's operation name. Especially if it is local span operation
- * name, * exchange may not happen at agent, such as Java agent, then put literal endpoint string in the header,
- * Need to try * to get the id by assuming the endpoint name is detected at server, local or client. * <p> * If
- * agent does the exchange, then always use endpoint id.
- */
- private int getEndpointId(int serviceId, String endpointName) {
- return endpointInventoryRegister.generate(serviceId, endpointName, DetectPoint.SERVER);
- }
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
index 9a12d28..c948990 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
@@ -24,7 +24,6 @@ import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.common.KeyStringValuePair;
import org.apache.skywalking.apm.network.language.agent.SpanLayer;
-import org.apache.skywalking.apm.network.language.agent.SpanType;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
@@ -33,11 +32,9 @@ import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogServ
import org.apache.skywalking.oap.server.core.register.NodeType;
import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
import org.apache.skywalking.oap.server.core.register.ServiceInventory;
-import org.apache.skywalking.oap.server.core.register.service.IEndpointTrafficGenerator;
import org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
-import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
@@ -54,7 +51,6 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
private final IServiceInventoryRegister serviceInventoryRegister;
private final ServiceInstanceInventoryCache serviceInstanceInventoryCacheDAO;
private final IServiceInstanceInventoryRegister serviceInstanceInventoryRegister;
- private final IEndpointTrafficGenerator endpointInventoryRegister;
private final INetworkAddressInventoryRegister networkAddressInventoryRegister;
private final IComponentLibraryCatalogService componentLibraryCatalogService;
@@ -78,9 +74,6 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
this.serviceInstanceInventoryRegister = moduleManager.find(CoreModule.NAME)
.provider()
.getService(IServiceInstanceInventoryRegister.class);
- this.endpointInventoryRegister = moduleManager.find(CoreModule.NAME)
- .provider()
- .getService(IEndpointTrafficGenerator.class);
this.networkAddressInventoryRegister = moduleManager.find(CoreModule.NAME)
.provider()
.getService(INetworkAddressInventoryRegister.class);
@@ -154,32 +147,6 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
serviceInstanceInventoryRegister.update(newServiceInstanceInventory.getSequence(), nodeType, properties);
}
- if (standardBuilder.getOperationNameId() == Const.NONE) {
- /**
- * Only operation name of entry span is being treated as an endpoint,
- * so, since 6.6.0, only it triggers register.
- */
- if (SpanType.Entry.equals(standardBuilder.getSpanType())) {
- String endpointName = Strings.isNullOrEmpty(
- standardBuilder.getOperationName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
- .getOperationName();
- int endpointId = endpointInventoryRegister.generate(
- serviceId, endpointName, DetectPoint.fromSpanType(standardBuilder
- .getSpanType()));
-
- if (endpointId == 0) {
- if (log.isDebugEnabled()) {
- log.debug("endpoint name: {} from service id: {} exchange failed", endpointName, serviceId);
- }
-
- exchanged = false;
- } else {
- standardBuilder.toBuilder();
- standardBuilder.setOperationNameId(endpointId);
- standardBuilder.setOperationName(Const.EMPTY_STRING);
- }
- }
- }
return exchanged;
}
diff --git a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java
index 27a48d4..f1e36e7 100644
--- a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java
+++ b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/trace/SpanForward.java
@@ -76,7 +76,7 @@ public class SpanForward {
case SERVER:
case CONSUMER:
if (!StringUtil.isEmpty(spanName) && serviceId != Const.NONE) {
- int endpointId = endpointInventoryCache.getEndpointId(serviceId, spanName, DetectPoint.SERVER.ordinal());
+ int endpointId = endpointInventoryCache.getEndpointId(serviceId, spanName, DetectPoint.SERVER.value());
if (endpointId != Const.NONE) {
zipkinSpan.setEndpointId(endpointId);
} else if (config.isRegisterZipkinEndpoint()) {
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java
index af7c4bb..e89eb09 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java
@@ -40,7 +40,6 @@ import org.apache.skywalking.oap.server.core.storage.IRegisterLockDAO;
import org.apache.skywalking.oap.server.core.storage.StorageDAO;
import org.apache.skywalking.oap.server.core.storage.StorageException;
import org.apache.skywalking.oap.server.core.storage.StorageModule;
-import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.INetworkAddressInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO;
@@ -68,7 +67,6 @@ import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.Histor
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.StorageEsDAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.StorageEsInstaller;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.TimeSeriesUtils;
-import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.cache.EndpointInventoryCacheEsDAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.cache.NetworkAddressInventoryCacheEsDAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.cache.ServiceInstanceInventoryCacheDAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.cache.ServiceInventoryCacheEsDAO;
@@ -177,8 +175,6 @@ public class StorageModuleElasticsearchProvider extends ModuleProvider {
IServiceInstanceInventoryCacheDAO.class, new ServiceInstanceInventoryCacheDAO(elasticSearchClient, config
.getResultWindowMaxSize()));
this.registerServiceImplementation(
- IEndpointInventoryCacheDAO.class, new EndpointInventoryCacheEsDAO(elasticSearchClient));
- this.registerServiceImplementation(
INetworkAddressInventoryCacheDAO.class, new NetworkAddressInventoryCacheEsDAO(elasticSearchClient, config
.getResultWindowMaxSize()));
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/cache/EndpointInventoryCacheEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/cache/EndpointInventoryCacheEsDAO.java
deleted file mode 100644
index 0e35acc..0000000
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/cache/EndpointInventoryCacheEsDAO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.storage.plugin.elasticsearch.cache;
-
-import org.apache.skywalking.oap.server.core.Const;
-import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
-import org.apache.skywalking.oap.server.core.register.RegisterSource;
-import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
-import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
-import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.EsDAO;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class EndpointInventoryCacheEsDAO extends EsDAO implements IEndpointInventoryCacheDAO {
-
- private static final Logger logger = LoggerFactory.getLogger(EndpointInventoryCacheEsDAO.class);
-
- protected final EndpointTraffic.Builder builder = new EndpointTraffic.Builder();
-
- public EndpointInventoryCacheEsDAO(ElasticSearchClient client) {
- super(client);
- }
-
- @Override
- public int getEndpointId(int serviceId, String endpointName, int detectPoint) {
- try {
- String id = EndpointTraffic.buildId(serviceId, endpointName, detectPoint);
- GetResponse response = getClient().get(EndpointTraffic.INDEX_NAME, id);
- if (response.isExists()) {
- return (int) response.getSource().getOrDefault(RegisterSource.SEQUENCE, 0);
- } else {
- return Const.NONE;
- }
- } catch (Throwable e) {
- logger.error(e.getMessage(), e);
- return Const.NONE;
- }
- }
-
- @Override
- public EndpointTraffic get(int endpointId) {
- try {
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- searchSourceBuilder.query(QueryBuilders.termQuery(EndpointTraffic.SEQUENCE, endpointId));
- searchSourceBuilder.size(1);
-
- SearchResponse response = getClient().search(EndpointTraffic.INDEX_NAME, searchSourceBuilder);
- if (response.getHits().totalHits == 1) {
- SearchHit searchHit = response.getHits().getAt(0);
- return builder.map2Data(searchHit.getSourceAsMap());
- } else {
- return null;
- }
- } catch (Throwable e) {
- logger.error(e.getMessage(), e);
- return null;
- }
- }
-}
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
index 7c3abb5..2a6ad95 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
@@ -26,13 +26,14 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
import org.apache.skywalking.oap.server.core.query.entity.Attribute;
import org.apache.skywalking.oap.server.core.query.entity.Database;
import org.apache.skywalking.oap.server.core.query.entity.Endpoint;
import org.apache.skywalking.oap.server.core.query.entity.LanguageTrans;
import org.apache.skywalking.oap.server.core.query.entity.Service;
import org.apache.skywalking.oap.server.core.query.entity.ServiceInstance;
-import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
import org.apache.skywalking.oap.server.core.register.NodeType;
import org.apache.skywalking.oap.server.core.register.RegisterSource;
import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
@@ -83,6 +84,9 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
return (int) response.getHits().getTotalHits();
}
+ /**
+ * @since 7.0.0, as EndpointInventory has been replaced by EndpointTraffic. This is not an accurate number anymore.
+ */
@Override
public int numOfEndpoint() throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
@@ -90,7 +94,7 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must()
- .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.ordinal()));
+ .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.value()));
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.size(0);
@@ -226,10 +230,15 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
}
boolQueryBuilder.must()
- .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.ordinal()));
+ .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.value()));
sourceBuilder.query(boolQueryBuilder);
- sourceBuilder.size(limit);
+ /**
+ * Query the dataset by a larger limit condition and distinct in the memory,
+ * in order to avoid the storage level distinct.
+ * This is a match query only, don't need 100% accurate.
+ */
+ sourceBuilder.size(limit * 7);
SearchResponse response = getClient().search(EndpointTraffic.INDEX_NAME, sourceBuilder);
@@ -237,18 +246,22 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
for (SearchHit searchHit : response.getHits()) {
Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
+ final EndpointTraffic endpointTraffic = new EndpointTraffic.Builder().map2Data(sourceAsMap);
+
Endpoint endpoint = new Endpoint();
- endpoint.setId(((Number) sourceAsMap.get(EndpointTraffic.SEQUENCE)).intValue());
+ endpoint.setId(EndpointTraffic.buildId(endpointTraffic));
endpoint.setName((String) sourceAsMap.get(EndpointTraffic.NAME));
endpoints.add(endpoint);
}
- return endpoints;
+ final List<Endpoint> endpointList = endpoints.stream().distinct().collect(Collectors.toList());
+
+ return endpointList.size() > limit ? endpointList.subList(0, limit) : endpointList;
}
@Override
public List<ServiceInstance> getServiceInstances(long startTimestamp, long endTimestamp,
- String serviceId) throws IOException {
+ String serviceId) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@@ -285,8 +298,9 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
} else if (key.equals(PROCESS_NO)) {
serviceInstance.getAttributes().add(new Attribute(PROCESS_NO, value));
} else if (key.equals(IPV4S)) {
- List<String> ipv4s = ServiceInstanceInventory.PropertyUtil.ipv4sDeserialize(properties.get(IPV4S)
- .getAsString());
+ List<String> ipv4s = ServiceInstanceInventory.PropertyUtil.ipv4sDeserialize(
+ properties.get(IPV4S)
+ .getAsString());
for (String ipv4 : ipv4s) {
serviceInstance.getAttributes()
.add(new Attribute(ServiceInstanceInventory.PropertyUtil.IPV4S, ipv4));
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java
index 24ae7fb..29ccea3 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java
@@ -18,6 +18,9 @@
package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.Downsampling;
import org.apache.skywalking.oap.server.core.analysis.manual.RelationDefineUtil;
@@ -42,10 +45,6 @@ import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.builder.SearchSourceBuilder;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
public TopologyQueryEsDAO(ElasticSearchClient client) {
@@ -53,8 +52,10 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
}
@Override
- public List<Call.CallDetail> loadSpecifiedServerSideServiceRelations(Downsampling downsampling, long startTB,
- long endTB, List<Integer> serviceIds) throws IOException {
+ public List<Call.CallDetail> loadSpecifiedServerSideServiceRelations(Downsampling downsampling,
+ long startTB,
+ long endTB,
+ List<Integer> serviceIds) throws IOException {
if (CollectionUtils.isEmpty(serviceIds)) {
throw new UnexpectedException("Service id is empty");
}
@@ -68,8 +69,10 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
}
@Override
- public List<Call.CallDetail> loadSpecifiedClientSideServiceRelations(Downsampling downsampling, long startTB,
- long endTB, List<Integer> serviceIds) throws IOException {
+ public List<Call.CallDetail> loadSpecifiedClientSideServiceRelations(Downsampling downsampling,
+ long startTB,
+ long endTB,
+ List<Integer> serviceIds) throws IOException {
if (CollectionUtils.isEmpty(serviceIds)) {
throw new UnexpectedException("Service id is empty");
}
@@ -83,7 +86,7 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
}
private void setQueryCondition(SearchSourceBuilder sourceBuilder, long startTB, long endTB,
- List<Integer> serviceIds) {
+ List<Integer> serviceIds) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must()
.add(QueryBuilders.rangeQuery(ServiceRelationServerSideMetrics.TIME_BUCKET).gte(startTB).lte(endTB));
@@ -93,22 +96,32 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
if (serviceIds.size() == 1) {
serviceIdBoolQuery.should()
- .add(QueryBuilders.termQuery(ServiceRelationServerSideMetrics.SOURCE_SERVICE_ID, serviceIds
- .get(0)));
+ .add(
+ QueryBuilders.termQuery(ServiceRelationServerSideMetrics.SOURCE_SERVICE_ID, serviceIds
+ .get(0)));
serviceIdBoolQuery.should()
- .add(QueryBuilders.termQuery(ServiceRelationServerSideMetrics.DEST_SERVICE_ID, serviceIds.get(0)));
+ .add(QueryBuilders.termQuery(
+ ServiceRelationServerSideMetrics.DEST_SERVICE_ID,
+ serviceIds.get(0)
+ ));
} else {
serviceIdBoolQuery.should()
- .add(QueryBuilders.termsQuery(ServiceRelationServerSideMetrics.SOURCE_SERVICE_ID, serviceIds));
+ .add(QueryBuilders.termsQuery(
+ ServiceRelationServerSideMetrics.SOURCE_SERVICE_ID,
+ serviceIds
+ ));
serviceIdBoolQuery.should()
- .add(QueryBuilders.termsQuery(ServiceRelationServerSideMetrics.DEST_SERVICE_ID, serviceIds));
+ .add(QueryBuilders.termsQuery(
+ ServiceRelationServerSideMetrics.DEST_SERVICE_ID,
+ serviceIds
+ ));
}
sourceBuilder.query(boolQuery);
}
@Override
public List<Call.CallDetail> loadServerSideServiceRelations(Downsampling downsampling, long startTB,
- long endTB) throws IOException {
+ long endTB) throws IOException {
String indexName = ModelName.build(downsampling, ServiceRelationServerSideMetrics.INDEX_NAME);
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
sourceBuilder.query(QueryBuilders.rangeQuery(ServiceRelationServerSideMetrics.TIME_BUCKET)
@@ -121,7 +134,7 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
@Override
public List<Call.CallDetail> loadClientSideServiceRelations(Downsampling downsampling, long startTB,
- long endTB) throws IOException {
+ long endTB) throws IOException {
String indexName = ModelName.build(downsampling, ServiceRelationClientSideMetrics.INDEX_NAME);
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
sourceBuilder.query(QueryBuilders.rangeQuery(ServiceRelationServerSideMetrics.TIME_BUCKET)
@@ -133,8 +146,11 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
}
@Override
- public List<Call.CallDetail> loadServerSideServiceInstanceRelations(int clientServiceId, int serverServiceId,
- Downsampling downsampling, long startTB, long endTB) throws IOException {
+ public List<Call.CallDetail> loadServerSideServiceInstanceRelations(int clientServiceId,
+ int serverServiceId,
+ Downsampling downsampling,
+ long startTB,
+ long endTB) throws IOException {
String indexName = ModelName.build(downsampling, ServiceInstanceRelationServerSideMetrics.INDEX_NAME);
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
sourceBuilder.size(0);
@@ -144,8 +160,11 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
}
@Override
- public List<Call.CallDetail> loadClientSideServiceInstanceRelations(int clientServiceId, int serverServiceId,
- Downsampling downsampling, long startTB, long endTB) throws IOException {
+ public List<Call.CallDetail> loadClientSideServiceInstanceRelations(int clientServiceId,
+ int serverServiceId,
+ Downsampling downsampling,
+ long startTB,
+ long endTB) throws IOException {
String indexName = ModelName.build(downsampling, ServiceInstanceRelationClientSideMetrics.INDEX_NAME);
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
sourceBuilder.size(0);
@@ -155,7 +174,7 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
}
private void setInstanceQueryCondition(SearchSourceBuilder sourceBuilder, long startTB, long endTB,
- int clientServiceId, int serverServiceId) {
+ int clientServiceId, int serverServiceId) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must()
.add(QueryBuilders.rangeQuery(EndpointRelationServerSideMetrics.TIME_BUCKET).gte(startTB).lte(endTB));
@@ -166,21 +185,27 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
BoolQueryBuilder serverRelationBoolQuery = new BoolQueryBuilder();
serviceIdBoolQuery.should(serverRelationBoolQuery);
- serverRelationBoolQuery.must(QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.SOURCE_SERVICE_ID, clientServiceId));
- serverRelationBoolQuery.must(QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.DEST_SERVICE_ID, serverServiceId));
+ serverRelationBoolQuery.must(
+ QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.SOURCE_SERVICE_ID, clientServiceId));
+ serverRelationBoolQuery.must(
+ QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.DEST_SERVICE_ID, serverServiceId));
BoolQueryBuilder clientRelationBoolQuery = new BoolQueryBuilder();
serviceIdBoolQuery.should(clientRelationBoolQuery);
- clientRelationBoolQuery.must(QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.DEST_SERVICE_ID, clientServiceId));
- clientRelationBoolQuery.must(QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.SOURCE_SERVICE_ID, serverServiceId));
+ clientRelationBoolQuery.must(
+ QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.DEST_SERVICE_ID, clientServiceId));
+ clientRelationBoolQuery.must(
+ QueryBuilders.termQuery(ServiceInstanceRelationServerSideMetrics.SOURCE_SERVICE_ID, serverServiceId));
sourceBuilder.query(boolQuery);
}
@Override
- public List<Call.CallDetail> loadSpecifiedDestOfServerSideEndpointRelations(Downsampling downsampling, long startTB,
- long endTB, int destEndpointId) throws IOException {
+ public List<Call.CallDetail> loadSpecifiedDestOfServerSideEndpointRelations(Downsampling downsampling,
+ long startTB,
+ long endTB,
+ int destEndpointId) throws IOException {
String indexName = ModelName.build(downsampling, EndpointRelationServerSideMetrics.INDEX_NAME);
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
@@ -193,17 +218,44 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
BoolQueryBuilder serviceIdBoolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(serviceIdBoolQuery);
serviceIdBoolQuery.should()
- .add(QueryBuilders.termQuery(EndpointRelationServerSideMetrics.SOURCE_ENDPOINT, destEndpointId));
+ .add(QueryBuilders.termQuery(
+ EndpointRelationServerSideMetrics.SOURCE_ENDPOINT,
+ destEndpointId
+ ));
serviceIdBoolQuery.should()
- .add(QueryBuilders.termQuery(EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId));
+ .add(
+ QueryBuilders.termQuery(EndpointRelationServerSideMetrics.DEST_ENDPOINT, destEndpointId));
sourceBuilder.query(boolQuery);
- return load(sourceBuilder, indexName, DetectPoint.SERVER);
+ return loadEndpoint(sourceBuilder, indexName, DetectPoint.SERVER);
}
private List<Call.CallDetail> load(SearchSourceBuilder sourceBuilder, String indexName,
- DetectPoint detectPoint) throws IOException {
+ DetectPoint detectPoint) throws IOException {
+ sourceBuilder.aggregation(AggregationBuilders.terms(Metrics.ENTITY_ID).field(Metrics.ENTITY_ID).size(1000));
+
+ SearchResponse response = getClient().search(indexName, sourceBuilder);
+
+ List<Call.CallDetail> calls = new ArrayList<>();
+ Terms entityTerms = response.getAggregations().get(Metrics.ENTITY_ID);
+ for (Terms.Bucket entityBucket : entityTerms.getBuckets()) {
+ String entityId = entityBucket.getKeyAsString();
+
+ RelationDefineUtil.RelationDefine relationDefine = RelationDefineUtil.splitEntityId(entityId);
+ Call.CallDetail call = new Call.CallDetail();
+ call.setSource(String.valueOf(relationDefine.getSource()));
+ call.setTarget(String.valueOf(relationDefine.getDest()));
+ call.setComponentId(relationDefine.getComponentId());
+ call.setDetectPoint(detectPoint);
+ call.generateID();
+ calls.add(call);
+ }
+ return calls;
+ }
+
+ private List<Call.CallDetail> loadEndpoint(SearchSourceBuilder sourceBuilder, String indexName,
+ DetectPoint detectPoint) throws IOException {
sourceBuilder.aggregation(AggregationBuilders.terms(Metrics.ENTITY_ID).field(Metrics.ENTITY_ID).size(1000));
SearchResponse response = getClient().search(indexName, sourceBuilder);
@@ -213,10 +265,15 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO {
for (Terms.Bucket entityBucket : entityTerms.getBuckets()) {
String entityId = entityBucket.getKeyAsString();
- RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(entityId);
+ RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(
+ entityId);
Call.CallDetail call = new Call.CallDetail();
- call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), DetectPoint.SERVER.ordinal()));
- call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), DetectPoint.SERVER.ordinal()));
+ call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(),
+ detectPoint
+ ));
+ call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(),
+ detectPoint
+ ));
call.setComponentId(relationDefine.getComponentId());
call.setDetectPoint(detectPoint);
call.generateID();
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java
index 65ca713..e133045 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java
@@ -54,9 +54,19 @@ public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
}
@Override
- public TraceBrief queryBasicTraces(long startSecondTB, long endSecondTB, long minDuration, long maxDuration,
- String endpointName, int serviceId, int serviceInstanceId, int endpointId, String traceId, int limit, int from,
- TraceState traceState, QueryOrder queryOrder) throws IOException {
+ public TraceBrief queryBasicTraces(long startSecondTB,
+ long endSecondTB,
+ long minDuration,
+ long maxDuration,
+ String endpointName,
+ int serviceId,
+ int serviceInstanceId,
+ String endpointId,
+ String traceId,
+ int limit,
+ int from,
+ TraceState traceState,
+ QueryOrder queryOrder) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@@ -87,7 +97,7 @@ public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
if (serviceInstanceId != 0) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SegmentRecord.SERVICE_INSTANCE_ID, serviceInstanceId));
}
- if (endpointId != 0) {
+ if (!Strings.isNullOrEmpty(endpointId)) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SegmentRecord.ENDPOINT_ID, endpointId));
}
if (!Strings.isNullOrEmpty(traceId)) {
@@ -125,7 +135,8 @@ public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
basicTrace.getEndpointNames().add((String) searchHit.getSourceAsMap().get(SegmentRecord.ENDPOINT_NAME));
basicTrace.setDuration(((Number) searchHit.getSourceAsMap().get(SegmentRecord.LATENCY)).intValue());
basicTrace.setError(BooleanUtils.valueToBoolean(((Number) searchHit.getSourceAsMap()
- .get(SegmentRecord.IS_ERROR)).intValue()));
+ .get(
+ SegmentRecord.IS_ERROR)).intValue()));
basicTrace.getTraceIds().add((String) searchHit.getSourceAsMap().get(SegmentRecord.TRACE_ID));
traceBrief.getTraces().add(basicTrace);
}
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/StorageModuleElasticsearch7Provider.java b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/StorageModuleElasticsearch7Provider.java
index 0951c40..21a8685 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/StorageModuleElasticsearch7Provider.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/StorageModuleElasticsearch7Provider.java
@@ -34,7 +34,6 @@ import org.apache.skywalking.oap.server.core.storage.IRegisterLockDAO;
import org.apache.skywalking.oap.server.core.storage.StorageDAO;
import org.apache.skywalking.oap.server.core.storage.StorageException;
import org.apache.skywalking.oap.server.core.storage.StorageModule;
-import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.INetworkAddressInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO;
import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO;
@@ -63,7 +62,6 @@ import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query.TopNR
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query.TopologyQueryEsDAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.ttl.ElasticsearchStorageTTL;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.base.StorageEs7Installer;
-import org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.cache.EndpointInventoryCacheEs7DAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.cache.NetworkAddressInventoryCacheEs7DAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.cache.ServiceInstanceInventoryCacheEs7DAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch7.cache.ServiceInventoryCacheEs7DAO;
@@ -172,8 +170,6 @@ public class StorageModuleElasticsearch7Provider extends ModuleProvider {
config.getResultWindowMaxSize()
));
this.registerServiceImplementation(
- IEndpointInventoryCacheDAO.class, new EndpointInventoryCacheEs7DAO(elasticSearch7Client));
- this.registerServiceImplementation(
INetworkAddressInventoryCacheDAO.class, new NetworkAddressInventoryCacheEs7DAO(
elasticSearch7Client,
config.getResultWindowMaxSize()
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java
index 55d1a54..29ab5e2 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/MetadataQueryEs7DAO.java
@@ -54,6 +54,9 @@ public class MetadataQueryEs7DAO extends MetadataQueryEsDAO {
return (int) response.getHits().getTotalHits().value;
}
+ /**
+ * @since 7.0.0, as EndpointInventory has been replaced by EndpointTraffic. This is not an accurate number anymore.
+ */
@Override
public int numOfEndpoint() throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
@@ -61,7 +64,7 @@ public class MetadataQueryEs7DAO extends MetadataQueryEsDAO {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must()
- .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.ordinal()));
+ .add(QueryBuilders.termQuery(EndpointTraffic.DETECT_POINT, DetectPoint.SERVER.value()));
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.size(0);
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/TraceQueryEs7DAO.java b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/TraceQueryEs7DAO.java
index ea89e6e..862bf54 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/TraceQueryEs7DAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch7-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch7/query/TraceQueryEs7DAO.java
@@ -48,7 +48,7 @@ public class TraceQueryEs7DAO extends TraceQueryEsDAO {
@Override
public TraceBrief queryBasicTraces(long startSecondTB, long endSecondTB, long minDuration, long maxDuration,
- String endpointName, int serviceId, int serviceInstanceId, int endpointId, String traceId, int limit, int from,
+ String endpointName, int serviceId, int serviceInstanceId, String endpointId, String traceId, int limit, int from,
TraceState traceState, QueryOrder queryOrder) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
@@ -80,7 +80,7 @@ public class TraceQueryEs7DAO extends TraceQueryEsDAO {
if (serviceInstanceId != 0) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SegmentRecord.SERVICE_INSTANCE_ID, serviceInstanceId));
}
- if (endpointId != 0) {
+ if (!Strings.isNullOrEmpty(endpointId)) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SegmentRecord.ENDPOINT_ID, endpointId));
}
if (!Strings.isNullOrEmpty(traceId)) {
diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java
index de9e40a..25ed12e 100644
--- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java
+++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TopologyQuery.java
@@ -178,7 +178,7 @@ public class TopologyQuery implements ITopologyQueryDAO {
query2.and(eq(EndpointRelationServerSideMetrics.SOURCE_ENDPOINT, destEndpointId));
List<Call.CallDetail> calls = buildCalls(query, DetectPoint.SERVER);
- calls.addAll(buildCalls(query2, DetectPoint.CLIENT));
+ calls.addAll(buildEndpointCalls(query2, DetectPoint.CLIENT));
return calls;
}
@@ -244,10 +244,37 @@ public class TopologyQuery implements ITopologyQueryDAO {
series.getValues().forEach(values -> {
Call.CallDetail call = new Call.CallDetail();
String entityId = (String) values.get(1);
+ RelationDefineUtil.RelationDefine relationDefine = RelationDefineUtil.splitEntityId(entityId);
+
+ call.setSource(String.valueOf(relationDefine.getSource()));
+ call.setTarget(String.valueOf(relationDefine.getDest()));
+ call.setComponentId(relationDefine.getComponentId());
+ call.setDetectPoint(detectPoint);
+ call.generateID();
+ calls.add(call);
+ });
+ return calls;
+ }
+
+ private List<Call.CallDetail> buildEndpointCalls(WhereQueryImpl query,
+ DetectPoint detectPoint) throws IOException {
+ QueryResult.Series series = client.queryForSingleSeries(query);
+
+ if (log.isDebugEnabled()) {
+ log.debug("SQL: {} result set: {}", query.getCommand(), series);
+ }
+ if (series == null) {
+ return Collections.emptyList();
+ }
+
+ List<Call.CallDetail> calls = new ArrayList<>();
+ series.getValues().forEach(values -> {
+ Call.CallDetail call = new Call.CallDetail();
+ String entityId = (String) values.get(1);
RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(entityId);
- call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), DetectPoint.SERVER.ordinal()));
- call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), DetectPoint.SERVER.ordinal()));
+ call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), detectPoint));
+ call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), detectPoint));
call.setComponentId(relationDefine.getComponentId());
call.setDetectPoint(detectPoint);
call.generateID();
diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java
index 6ad679e..74a847c 100644
--- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java
+++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java
@@ -63,7 +63,7 @@ public class TraceQuery implements ITraceQueryDAO {
String endpointName,
int serviceId,
int serviceInstanceId,
- int endpointId,
+ String endpointId,
String traceId,
int limit,
int from,
@@ -106,7 +106,7 @@ public class TraceQuery implements ITraceQueryDAO {
if (serviceInstanceId != 0) {
recallQuery.and(eq(SegmentRecord.SERVICE_INSTANCE_ID, serviceInstanceId));
}
- if (endpointId != 0) {
+ if (!com.google.common.base.Strings.isNullOrEmpty(endpointId)) {
recallQuery.and(eq(SegmentRecord.ENDPOINT_ID, endpointId));
}
if (!Strings.isNullOrEmpty(traceId)) {
diff --git a/oap-server/server-storage-plugin/storage-jaeger-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jaeger/elasticsearch/JaegerTraceQueryEsDAO.java b/oap-server/server-storage-plugin/storage-jaeger-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jaeger/elasticsearch/JaegerTraceQueryEsDAO.java
index d292843..473a20a 100644
--- a/oap-server/server-storage-plugin/storage-jaeger-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jaeger/elasticsearch/JaegerTraceQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-jaeger-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jaeger/elasticsearch/JaegerTraceQueryEsDAO.java
@@ -80,9 +80,19 @@ public class JaegerTraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
}
@Override
- public TraceBrief queryBasicTraces(long startSecondTB, long endSecondTB, long minDuration, long maxDuration,
- String endpointName, int serviceId, int serviceInstanceId, int endpointId, String traceId, int limit, int from,
- TraceState traceState, QueryOrder queryOrder) throws IOException {
+ public TraceBrief queryBasicTraces(long startSecondTB,
+ long endSecondTB,
+ long minDuration,
+ long maxDuration,
+ String endpointName,
+ int serviceId,
+ int serviceInstanceId,
+ String endpointId,
+ String traceId,
+ int limit,
+ int from,
+ TraceState traceState,
+ QueryOrder queryOrder) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
@@ -113,7 +123,7 @@ public class JaegerTraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
if (serviceInstanceId != 0) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SERVICE_INSTANCE_ID, serviceInstanceId));
}
- if (endpointId != 0) {
+ if (!Strings.isNullOrEmpty(endpointId)) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(ENDPOINT_ID, endpointId));
}
if (!Strings.isNullOrEmpty(traceId)) {
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
deleted file mode 100644
index f75be15..0000000
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EndpointInventoryCacheDAO.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.storage.plugin.jdbc.h2.dao;
-
-import java.io.IOException;
-import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
-import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
-import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class H2EndpointInventoryCacheDAO extends H2SQLExecutor implements IEndpointInventoryCacheDAO {
- private static final Logger logger = LoggerFactory.getLogger(H2EndpointInventoryCacheDAO.class);
- private JDBCHikariCPClient h2Client;
-
- public H2EndpointInventoryCacheDAO(JDBCHikariCPClient h2Client) {
- this.h2Client = h2Client;
- }
-
- @Override
- public int getEndpointId(int serviceId, String endpointName, int detectPoint) {
- String id = EndpointTraffic.buildId(serviceId, endpointName, detectPoint);
- return getEntityIDByID(h2Client, EndpointTraffic.SEQUENCE, EndpointTraffic.INDEX_NAME, id);
- }
-
- @Override
- public EndpointTraffic get(int endpointId) {
- try {
- return (EndpointTraffic) getByColumn(h2Client, EndpointTraffic.INDEX_NAME, EndpointTraffic.SEQUENCE, endpointId, new EndpointTraffic.Builder());
- } catch (IOException e) {
- logger.error(e.getMessage(), e);
- return null;
- }
- }
-}
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
index 2d8f11f..b334f66 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
@@ -29,13 +29,13 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
import org.apache.skywalking.oap.server.core.query.entity.Attribute;
import org.apache.skywalking.oap.server.core.query.entity.Database;
import org.apache.skywalking.oap.server.core.query.entity.Endpoint;
import org.apache.skywalking.oap.server.core.query.entity.LanguageTrans;
import org.apache.skywalking.oap.server.core.query.entity.Service;
import org.apache.skywalking.oap.server.core.query.entity.ServiceInstance;
-import org.apache.skywalking.oap.server.core.analysis.manual.endpoint.EndpointTraffic;
import org.apache.skywalking.oap.server.core.register.NodeType;
import org.apache.skywalking.oap.server.core.register.RegisterSource;
import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
@@ -76,7 +76,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
private Integer getNum(StringBuilder sql, List<Object> condition) throws IOException {
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
if (resultSet.next()) {
return resultSet.getInt("num");
}
@@ -92,7 +93,7 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
StringBuilder sql = new StringBuilder();
List<Object> condition = new ArrayList<>(5);
sql.append("select count(*) num from ").append(EndpointTraffic.INDEX_NAME).append(" where ");
- sql.append(EndpointTraffic.DETECT_POINT).append("=").append(DetectPoint.SERVER.ordinal());
+ sql.append(EndpointTraffic.DETECT_POINT).append("=").append(DetectPoint.SERVER.value());
return getNum(sql, condition);
}
@@ -121,7 +122,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
sql.append(" limit ").append(metadataQueryMaxSize);
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
return buildServices(resultSet);
}
} catch (SQLException e) {
@@ -142,7 +144,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
sql.append(" limit ").append(metadataQueryMaxSize);
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
return buildServices(resultSet);
}
} catch (SQLException e) {
@@ -159,7 +162,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
condition.add(NodeType.Database.value());
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
List<Database> databases = new ArrayList<>();
while (resultSet.next()) {
Database database = new Database();
@@ -199,7 +203,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
sql.append(" limit ").append(metadataQueryMaxSize);
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
return buildServices(resultSet);
}
} catch (SQLException e) {
@@ -218,7 +223,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
condition.add(serviceCode);
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
while (resultSet.next()) {
Service service = new Service();
@@ -245,17 +251,29 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
sql.append(" and ").append(EndpointTraffic.NAME).append(" like '%").append(keyword).append("%' ");
}
sql.append(" and ").append(EndpointTraffic.DETECT_POINT).append(" = ?");
- condition.add(DetectPoint.SERVER.ordinal());
- sql.append(" limit ").append(limit);
+ condition.add(DetectPoint.SERVER.value());
+ /**
+ * Query the dataset by a larger limit condition and distinct in the memory,
+ * in order to avoid the storage level distinct.
+ * This is a match query only, don't need 100% accurate.
+ */
+ sql.append(" limit ").append(limit * 7);
List<Endpoint> endpoints = new ArrayList<>();
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
while (resultSet.next()) {
+ EndpointTraffic endpointTraffic = new EndpointTraffic();
+ endpointTraffic.setServiceId(resultSet.getInt(EndpointTraffic.SERVICE_ID));
+ endpointTraffic.setName(resultSet.getString(EndpointTraffic.NAME));
+ endpointTraffic.setDetectPoint(resultSet.getInt(EndpointTraffic.DETECT_POINT));
+ endpointTraffic.setTimeBucket(resultSet.getLong(EndpointTraffic.TIME_BUCKET));
+
Endpoint endpoint = new Endpoint();
- endpoint.setId(resultSet.getInt(EndpointTraffic.SEQUENCE));
- endpoint.setName(resultSet.getString(EndpointTraffic.NAME));
+ endpoint.setId(EndpointTraffic.buildId(endpointTraffic));
+ endpoint.setName(endpointTraffic.getName());
endpoints.add(endpoint);
}
}
@@ -267,7 +285,7 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
@Override
public List<ServiceInstance> getServiceInstances(long startTimestamp, long endTimestamp,
- String serviceId) throws IOException {
+ String serviceId) throws IOException {
StringBuilder sql = new StringBuilder();
List<Object> condition = new ArrayList<>(5);
sql.append("select * from ").append(ServiceInstanceInventory.INDEX_NAME).append(" where ");
@@ -277,7 +295,8 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
List<ServiceInstance> serviceInstances = new ArrayList<>();
try (Connection connection = h2Client.getConnection()) {
- try (ResultSet resultSet = h2Client.executeQuery(connection, sql.toString(), condition.toArray(new Object[0]))) {
+ try (ResultSet resultSet = h2Client.executeQuery(
+ connection, sql.toString(), condition.toArray(new Object[0]))) {
while (resultSet.next()) {
ServiceInstance serviceInstance = new ServiceInstance();
@@ -300,11 +319,14 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
} else if (key.equals(PROCESS_NO)) {
serviceInstance.getAttributes().add(new Attribute(PROCESS_NO, value));
} else if (key.equals(IPV4S)) {
- List<String> ipv4s = ServiceInstanceInventory.PropertyUtil.ipv4sDeserialize(properties.get(IPV4S)
- .getAsString());
+ List<String> ipv4s = ServiceInstanceInventory.PropertyUtil.ipv4sDeserialize(
+ properties.get(IPV4S)
+ .getAsString());
for (String ipv4 : ipv4s) {
serviceInstance.getAttributes()
- .add(new Attribute(ServiceInstanceInventory.PropertyUtil.IPV4S, ipv4));
+ .add(new Attribute(ServiceInstanceInventory.PropertyUtil.IPV4S,
+ ipv4
+ ));
}
} else {
serviceInstance.getAttributes().add(new Attribute(key, value));
@@ -322,7 +344,7 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
}
private void setTimeRangeCondition(StringBuilder sql, List<Object> conditions, long startTimestamp,
- long endTimestamp) {
+ long endTimestamp) {
sql.append(" ( (")
.append(RegisterSource.HEARTBEAT_TIME)
.append(" >= ? and ")
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
index aef2e9a..e6fee08 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TopologyQueryDAO.java
@@ -170,7 +170,7 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
List<Call.CallDetail> calls = new ArrayList<>();
try (Connection connection = h2Client.getConnection()) {
try (ResultSet resultSet = h2Client.executeQuery(connection, "select " + Metrics.ENTITY_ID + " from " + tableName + " where " + Metrics.TIME_BUCKET + ">= ? and " + Metrics.TIME_BUCKET + "<=? and " + (isSourceId ? sourceCName : destCName) + "=?" + " group by " + Metrics.ENTITY_ID, conditions)) {
- buildCalls(resultSet, calls, isSourceId);
+ buildEndpointCalls(resultSet, calls, isSourceId);
}
} catch (SQLException e) {
throw new IOException(e);
@@ -183,10 +183,10 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
while (resultSet.next()) {
Call.CallDetail call = new Call.CallDetail();
String entityId = resultSet.getString(Metrics.ENTITY_ID);
- RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(entityId);
+ RelationDefineUtil.RelationDefine relationDefine = RelationDefineUtil.splitEntityId(entityId);
- call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), DetectPoint.SERVER.ordinal()));
- call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), DetectPoint.SERVER.ordinal()));
+ call.setSource(String.valueOf(relationDefine.getSource()));
+ call.setTarget(String.valueOf(relationDefine.getDest()));
call.setComponentId(relationDefine.getComponentId());
if (isClientSide) {
call.setDetectPoint(DetectPoint.CLIENT);
@@ -197,4 +197,25 @@ public class H2TopologyQueryDAO implements ITopologyQueryDAO {
calls.add(call);
}
}
+
+ private void buildEndpointCalls(ResultSet resultSet, List<Call.CallDetail> calls,
+ boolean isClientSide) throws SQLException {
+ while (resultSet.next()) {
+ Call.CallDetail call = new Call.CallDetail();
+ String entityId = resultSet.getString(Metrics.ENTITY_ID);
+ RelationDefineUtil.EndpointRelationDefine relationDefine = RelationDefineUtil.splitEndpointEntityId(entityId);
+
+ if (isClientSide) {
+ call.setDetectPoint(DetectPoint.CLIENT);
+ } else {
+ call.setDetectPoint(DetectPoint.SERVER);
+ }
+ call.setSource(EndpointTraffic.buildId(relationDefine.getSourceServiceId(), relationDefine.getSource(), call.getDetectPoint()));
+ call.setTarget(EndpointTraffic.buildId(relationDefine.getDestServiceId(), relationDefine.getDest(), call.getDetectPoint()));
+ call.setComponentId(relationDefine.getComponentId());
+
+ call.generateID();
+ calls.add(call);
+ }
+ }
}
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TraceQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TraceQueryDAO.java
index 40f1932..ff222ef 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TraceQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2TraceQueryDAO.java
@@ -48,7 +48,7 @@ public class H2TraceQueryDAO implements ITraceQueryDAO {
@Override
public TraceBrief queryBasicTraces(long startSecondTB, long endSecondTB, long minDuration, long maxDuration,
- String endpointName, int serviceId, int serviceInstanceId, int endpointId, String traceId, int limit, int from,
+ String endpointName, int serviceId, int serviceInstanceId, String endpointId, String traceId, int limit, int from,
TraceState traceState, QueryOrder queryOrder) throws IOException {
StringBuilder sql = new StringBuilder();
List<Object> parameters = new ArrayList<>(10);
@@ -82,7 +82,7 @@ public class H2TraceQueryDAO implements ITraceQueryDAO {
sql.append(" and ").append(SegmentRecord.SERVICE_INSTANCE_ID).append(" = ?");
parameters.add(serviceInstanceId);
}
- if (endpointId != 0) {
+ if (!Strings.isNullOrEmpty(endpointId)) {
sql.append(" and ").append(SegmentRecord.ENDPOINT_ID).append(" = ?");
parameters.add(endpointId);
}
diff --git a/oap-server/server-storage-plugin/storage-zipkin-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/zipkin/elasticsearch/ZipkinTraceQueryEsDAO.java b/oap-server/server-storage-plugin/storage-zipkin-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/zipkin/elasticsearch/ZipkinTraceQueryEsDAO.java
index 9461142..579993d 100644
--- a/oap-server/server-storage-plugin/storage-zipkin-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/zipkin/elasticsearch/ZipkinTraceQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-zipkin-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/zipkin/elasticsearch/ZipkinTraceQueryEsDAO.java
@@ -78,9 +78,19 @@ public class ZipkinTraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
}
@Override
- public TraceBrief queryBasicTraces(long startSecondTB, long endSecondTB, long minDuration, long maxDuration,
- String endpointName, int serviceId, int serviceInstanceId, int endpointId, String traceId, int limit, int from,
- TraceState traceState, QueryOrder queryOrder) throws IOException {
+ public TraceBrief queryBasicTraces(long startSecondTB,
+ long endSecondTB,
+ long minDuration,
+ long maxDuration,
+ String endpointName,
+ int serviceId,
+ int serviceInstanceId,
+ String endpointId,
+ String traceId,
+ int limit,
+ int from,
+ TraceState traceState,
+ QueryOrder queryOrder) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
@@ -111,7 +121,7 @@ public class ZipkinTraceQueryEsDAO extends EsDAO implements ITraceQueryDAO {
if (serviceInstanceId != 0) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(SERVICE_INSTANCE_ID, serviceInstanceId));
}
- if (endpointId != 0) {
+ if (!Strings.isNullOrEmpty(endpointId)) {
boolQueryBuilder.must().add(QueryBuilders.termQuery(ENDPOINT_ID, endpointId));
}
if (!Strings.isNullOrEmpty(traceId)) {