From a062fdae71d6305e0693443c2007e7975e218f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=8B=87=E5=8D=87=20pengys?= <8082209@qq.com> Date: Tue, 9 Oct 2018 20:33:04 +0800 Subject: [PATCH] Fixed the bug from topology. (#1736) * Fixed the bug from topology. * no message --- .../core/cache/EndpointInventoryCache.java | 18 +++++++++++++---- .../cache/ServiceInstanceInventoryCache.java | 12 +++++++++++ .../core/cache/ServiceInventoryCache.java | 15 ++++++++++++++ .../server/core/query/TopologyBuilder.java | 9 +++++++++ .../core/query/TopologyQueryService.java | 2 +- .../worker/RegisterDistinctWorker.java | 2 +- .../worker/RegisterPersistentWorker.java | 2 +- .../receiver/trace/mock/ConsumerMock.java | 20 +++++++++---------- .../receiver/trace/mock/ProviderMock.java | 20 +++++++++---------- .../receiver/trace/mock/RegisterMock.java | 5 ++--- .../src/main/resources/log4j2.xml | 2 +- .../elasticsearch/base/RegisterEsDAO.java | 2 +- .../query/TopologyQueryEsDAO.java | 18 ++++++++--------- .../elasticsearch/query/TraceQueryEsDAO.java | 2 +- 14 files changed, 87 insertions(+), 42 deletions(-) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java index 5e7ff6552..eb178a4ea 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java @@ -37,15 +37,21 @@ public class EndpointInventoryCache implements Service { private static final Logger logger = LoggerFactory.getLogger(EndpointInventoryCache.class); private final ModuleManager moduleManager; + private final EndpointInventory userEndpoint; + private final Cache endpointNameCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build(); + + private final Cache endpointIdCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build(); + private IEndpointInventoryCacheDAO cacheDAO; public EndpointInventoryCache(ModuleManager moduleManager) { this.moduleManager = moduleManager; - } - private final Cache endpointNameCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build(); - - private final Cache endpointIdCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build(); + this.userEndpoint = new EndpointInventory(); + this.userEndpoint.setSequence(Const.USER_ENDPOINT_ID); + this.userEndpoint.setName(Const.USER_CODE); + this.userEndpoint.setServiceId(Const.USER_SERVICE_ID); + } private IEndpointInventoryCacheDAO getCacheDAO() { if (isNull(cacheDAO)) { @@ -69,6 +75,10 @@ public class EndpointInventoryCache implements Service { } public EndpointInventory get(int endpointId) { + if (Const.USER_ENDPOINT_ID == endpointId) { + return userEndpoint; + } + EndpointInventory endpointInventory = endpointIdCache.getIfPresent(endpointId); if (isNull(endpointInventory)) { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java index 777c57486..5fc05aaf4 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java @@ -25,6 +25,7 @@ import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO; import org.apache.skywalking.oap.server.library.module.*; +import org.apache.skywalking.oap.server.library.util.BooleanUtils; import org.slf4j.*; import static java.util.Objects.isNull; @@ -36,6 +37,7 @@ public class ServiceInstanceInventoryCache implements Service { private static final Logger logger = LoggerFactory.getLogger(ServiceInstanceInventoryCache.class); + private final ServiceInstanceInventory userServiceInstance; private final Cache serviceInstanceIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); private final Cache serviceInstanceNameCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); @@ -47,6 +49,12 @@ public class ServiceInstanceInventoryCache implements Service { public ServiceInstanceInventoryCache(ModuleManager moduleManager) { this.moduleManager = moduleManager; + + this.userServiceInstance = new ServiceInstanceInventory(); + this.userServiceInstance.setSequence(Const.USER_INSTANCE_ID); + this.userServiceInstance.setName(Const.USER_CODE); + this.userServiceInstance.setServiceId(Const.USER_SERVICE_ID); + this.userServiceInstance.setIsAddress(BooleanUtils.FALSE); } private IServiceInstanceInventoryCacheDAO getCacheDAO() { @@ -57,6 +65,10 @@ public class ServiceInstanceInventoryCache implements Service { } public ServiceInstanceInventory get(int serviceInstanceId) { + if (Const.USER_INSTANCE_ID == serviceInstanceId) { + return userServiceInstance; + } + ServiceInstanceInventory serviceInstanceInventory = serviceInstanceIdCache.getIfPresent(serviceInstanceId); if (Objects.isNull(serviceInstanceInventory)) { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java index 8571a6340..4aa798c61 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java @@ -25,6 +25,7 @@ import org.apache.skywalking.oap.server.core.register.ServiceInventory; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO; import org.apache.skywalking.oap.server.library.module.*; +import org.apache.skywalking.oap.server.library.util.BooleanUtils; import org.slf4j.*; import static java.util.Objects.*; @@ -36,6 +37,7 @@ public class ServiceInventoryCache implements Service { private static final Logger logger = LoggerFactory.getLogger(ServiceInventoryCache.class); + private final ServiceInventory userService; private final Cache serviceNameCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); private final Cache addressIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); private final Cache serviceIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); @@ -45,6 +47,11 @@ public class ServiceInventoryCache implements Service { public ServiceInventoryCache(ModuleManager moduleManager) { this.moduleManager = moduleManager; + + this.userService = new ServiceInventory(); + this.userService.setSequence(Const.USER_SERVICE_ID); + this.userService.setName(Const.USER_CODE); + this.userService.setIsAddress(BooleanUtils.FALSE); } private IServiceInventoryCacheDAO getCacheDAO() { @@ -79,6 +86,14 @@ public class ServiceInventoryCache implements Service { } public ServiceInventory get(int serviceId) { + if (logger.isDebugEnabled()) { + logger.debug("Get service by id {} from cache", serviceId); + } + + if (Const.USER_SERVICE_ID == serviceId) { + return userService; + } + ServiceInventory serviceInventory = serviceIdCache.getIfPresent(serviceId); if (isNull(serviceInventory)) { 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 a933a5082..5cdcdab3d 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 @@ -78,6 +78,11 @@ class TopologyBuilder { serviceNode.setId(source.getSequence()); serviceNode.setName(source.getName()); serviceNode.setType(nodeCompMap.getOrDefault(source.getSequence(), Const.UNKNOWN)); + if (BooleanUtils.valueToBoolean(source.getIsAddress())) { + serviceNode.setReal(false); + } else { + serviceNode.setReal(true); + } nodes.add(serviceNode); } @@ -88,6 +93,7 @@ class TopologyBuilder { call.setTarget(actualTargetId); call.setCallType(nodeCompMap.get(clientCall.getTarget())); call.setId(clientCall.getId()); + call.setDetectPoint(DetectPoint.CLIENT); calls.add(call); }); @@ -101,6 +107,7 @@ class TopologyBuilder { visualUserNode.setId(source.getSequence()); visualUserNode.setName(Const.USER_CODE); visualUserNode.setType(Const.USER_CODE.toUpperCase()); + visualUserNode.setReal(false); nodes.add(visualUserNode); nodeIds.add(source.getSequence()); } @@ -112,6 +119,7 @@ class TopologyBuilder { conjecturalNode.setId(source.getSequence()); conjecturalNode.setName(source.getName()); conjecturalNode.setType(conjecturalNodeCompMap.getOrDefault(target.getSequence(), Const.UNKNOWN)); + conjecturalNode.setReal(true); nodeIds.add(source.getSequence()); nodes.add(conjecturalNode); } @@ -121,6 +129,7 @@ class TopologyBuilder { call.setSource(source.getSequence()); call.setTarget(target.getSequence()); call.setId(serverCall.getId()); + call.setDetectPoint(DetectPoint.SERVER); if (source.getSequence() == Const.USER_SERVICE_ID) { call.setCallType(Const.EMPTY_STRING); 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 3ba322f01..06be80dfc 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 @@ -98,7 +98,7 @@ public class TopologyQueryService implements Service { List serviceRelationServerCalls = getTopologyQueryDAO().loadSpecifiedServerSideServiceRelations(step, startTB, endTB, serviceIdList); TopologyBuilder builder = new TopologyBuilder(moduleManager); - Topology topology = builder.build(serviceComponents, serviceMappings, serviceRelationClientCalls, serviceRelationServerCalls); + Topology topology = builder.build(serviceComponents, new ArrayList<>(), serviceRelationClientCalls, serviceRelationServerCalls); Set nodeIds = new HashSet<>(); topology.getCalls().forEach(call -> { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterDistinctWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterDistinctWorker.java index 6227a4dc7..4a677cecf 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterDistinctWorker.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterDistinctWorker.java @@ -38,7 +38,7 @@ public class RegisterDistinctWorker extends AbstractWorker { private final Map sources; private int messageNum; - public RegisterDistinctWorker(int workerId, AbstractWorker nextWorker) { + RegisterDistinctWorker(int workerId, AbstractWorker nextWorker) { super(workerId); this.nextWorker = nextWorker; this.sources = new HashMap<>(); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java index eb94d665e..c4283f0d4 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java @@ -39,7 +39,7 @@ public class RegisterPersistentWorker extends AbstractWorker { private final IRegisterLockDAO registerLockDAO; private final IRegisterDAO registerDAO; - public RegisterPersistentWorker(int workerId, String modelName, ModuleManager moduleManager, + RegisterPersistentWorker(int workerId, String modelName, ModuleManager moduleManager, IRegisterDAO registerDAO, Scope scope) { super(workerId); this.modelName = modelName; diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ConsumerMock.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ConsumerMock.java index 9d33e919d..f91d4a207 100644 --- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ConsumerMock.java +++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ConsumerMock.java @@ -40,8 +40,8 @@ class ConsumerMock { private ByteString createSegment(long startTimestamp, UniqueId.Builder segmentId, boolean isPrepare) { TraceSegmentObject.Builder segment = TraceSegmentObject.newBuilder(); segment.setTraceSegmentId(segmentId); - segment.setApplicationId(1); - segment.setApplicationInstanceId(1); + segment.setApplicationId(2); + segment.setApplicationInstanceId(2); segment.addSpans(createEntrySpan(startTimestamp, isPrepare)); segment.addSpans(createLocalSpan(startTimestamp, isPrepare)); segment.addSpans(createMqEntrySpan(startTimestamp, isPrepare)); @@ -64,7 +64,7 @@ class ConsumerMock { if (isPrepare) { span.setOperationName("/dubbox-case/case/dubbox-rest"); } else { - span.setOperationNameId(1); + span.setOperationNameId(2); } span.setIsError(false); return span; @@ -80,7 +80,7 @@ class ConsumerMock { if (isPrepare) { span.setOperationName("org.apache.skywalking.Local.do"); } else { - span.setOperationNameId(2); + span.setOperationNameId(3); } span.setIsError(false); return span; @@ -98,7 +98,7 @@ class ConsumerMock { if (isPrepare) { span.setOperationName("org.apache.skywalking.RocketMQ"); } else { - span.setOperationNameId(3); + span.setOperationNameId(4); } span.setIsError(false); return span; @@ -117,8 +117,8 @@ class ConsumerMock { span.setPeer("172.25.0.4:20880"); span.setOperationName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); } else { - span.setOperationNameId(4); - span.setPeerId(2); + span.setOperationNameId(5); + span.setPeerId(3); } span.setIsError(false); return span; @@ -136,7 +136,7 @@ class ConsumerMock { if (isPrepare) { span.setOperationName("org.apache.skywalking.RocketMQ"); } else { - span.setOperationNameId(3); + span.setOperationNameId(4); } span.setIsError(false); return span; @@ -155,8 +155,8 @@ class ConsumerMock { span.setPeer("172.25.0.4:20880"); span.setOperationName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); } else { - span.setOperationNameId(4); - span.setPeerId(2); + span.setOperationNameId(5); + span.setPeerId(3); } span.setIsError(false); return span; diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ProviderMock.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ProviderMock.java index 5b353c92b..42bb3b168 100644 --- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ProviderMock.java +++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/ProviderMock.java @@ -41,8 +41,8 @@ class ProviderMock { UniqueId.Builder parentTraceSegmentId, boolean isPrepare) { TraceSegmentObject.Builder segment = TraceSegmentObject.newBuilder(); segment.setTraceSegmentId(segmentId); - segment.setApplicationId(2); - segment.setApplicationInstanceId(2); + segment.setApplicationId(3); + segment.setApplicationInstanceId(3); segment.addSpans(createExitSpan(startTimestamp, isPrepare)); segment.addSpans(createEntrySpan(startTimestamp, parentTraceSegmentId, isPrepare)); @@ -52,9 +52,9 @@ class ProviderMock { private TraceSegmentReference.Builder createReference(UniqueId.Builder parentTraceSegmentId, boolean isPrepare) { TraceSegmentReference.Builder reference = TraceSegmentReference.newBuilder(); reference.setParentTraceSegmentId(parentTraceSegmentId); - reference.setParentApplicationInstanceId(1); + reference.setParentApplicationInstanceId(2); reference.setParentSpanId(1); - reference.setEntryApplicationInstanceId(1); + reference.setEntryApplicationInstanceId(2); reference.setRefType(RefType.CrossProcess); if (isPrepare) { @@ -62,9 +62,9 @@ class ProviderMock { reference.setNetworkAddress("172.25.0.4:20880"); reference.setEntryServiceName("/dubbox-case/case/dubbox-rest"); } else { - reference.setParentServiceId(1); - reference.setNetworkAddressId(2); - reference.setEntryServiceId(1); + reference.setParentServiceId(2); + reference.setNetworkAddressId(3); + reference.setEntryServiceId(2); } return reference; } @@ -84,8 +84,8 @@ class ProviderMock { span.setOperationName("mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]"); span.setPeer("localhost:27017"); } else { - span.setOperationNameId(5); - span.setPeerId(1); + span.setOperationNameId(6); + span.setPeerId(2); } return span; } @@ -105,7 +105,7 @@ class ProviderMock { if (isPrepare) { span.setOperationName("org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()"); } else { - span.setOperationNameId(6); + span.setOperationNameId(7); } return span; } diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/RegisterMock.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/RegisterMock.java index 3e9915a61..b9514c9ec 100644 --- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/RegisterMock.java +++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/mock/RegisterMock.java @@ -19,7 +19,6 @@ package org.apache.skywalking.oap.server.receiver.trace.mock; import io.grpc.ManagedChannel; -import java.util.UUID; import java.util.concurrent.*; import org.apache.skywalking.apm.network.language.agent.*; import org.apache.skywalking.apm.util.RunnableWithExceptionProtection; @@ -59,7 +58,7 @@ class RegisterMock { ApplicationInstance.Builder instance = ApplicationInstance.newBuilder(); instance.setApplicationId(applicationMapping.getApplication().getValue()); - instance.setAgentUUID(UUID.randomUUID().toString()); + instance.setAgentUUID("pengys"); instance.setRegisterTime(new DateTime("2017-01-01T00:01:01.001").getMillis()); OSInfo.Builder osInfo = OSInfo.newBuilder(); @@ -104,7 +103,7 @@ class RegisterMock { ApplicationInstance.Builder instance = ApplicationInstance.newBuilder(); instance.setApplicationId(applicationMapping.getApplication().getValue()); - instance.setAgentUUID(UUID.randomUUID().toString()); + instance.setAgentUUID("peng-yongsheng"); instance.setRegisterTime(new DateTime("2017-01-01T00:01:01.001").getMillis()); OSInfo.Builder osInfo = OSInfo.newBuilder(); diff --git a/oap-server/server-starter/src/main/resources/log4j2.xml b/oap-server/server-starter/src/main/resources/log4j2.xml index a6ce5a263..2bb72264c 100644 --- a/oap-server/server-starter/src/main/resources/log4j2.xml +++ b/oap-server/server-starter/src/main/resources/log4j2.xml @@ -20,7 +20,7 @@ - + diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java index 13c6711dc..1790854e7 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/RegisterEsDAO.java @@ -91,7 +91,7 @@ public class RegisterEsDAO extends EsDAO implements IRegisterDAO { int id = (int)agg.getValue(); if (id == Integer.MAX_VALUE || id == Integer.MIN_VALUE) { - return 0; + return 1; } else { return id; } 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 00de99eac..f9a037115 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 @@ -79,17 +79,17 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO { private void setQueryCondition(SearchSourceBuilder sourceBuilder, long startTB, long endTB, List serviceIds) { BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.rangeQuery(ServiceRelationServerSideIndicator.TIME_BUCKET).lte(startTB).gte(endTB)); + boolQuery.must().add(QueryBuilders.rangeQuery(ServiceRelationServerSideIndicator.TIME_BUCKET).gte(startTB).lte(endTB)); BoolQueryBuilder serviceIdBoolQuery = QueryBuilders.boolQuery(); boolQuery.must().add(serviceIdBoolQuery); if (serviceIds.size() == 1) { - boolQuery.should().add(QueryBuilders.termQuery(ServiceRelationServerSideIndicator.SOURCE_SERVICE_ID, serviceIds.get(0))); - boolQuery.should().add(QueryBuilders.termQuery(ServiceRelationServerSideIndicator.DEST_SERVICE_ID, serviceIds.get(0))); + serviceIdBoolQuery.should().add(QueryBuilders.termQuery(ServiceRelationServerSideIndicator.SOURCE_SERVICE_ID, serviceIds.get(0))); + serviceIdBoolQuery.should().add(QueryBuilders.termQuery(ServiceRelationServerSideIndicator.DEST_SERVICE_ID, serviceIds.get(0))); } else { - boolQuery.should().add(QueryBuilders.termsQuery(ServiceRelationServerSideIndicator.SOURCE_SERVICE_ID, serviceIds)); - boolQuery.should().add(QueryBuilders.termsQuery(ServiceRelationServerSideIndicator.DEST_SERVICE_ID, serviceIds)); + serviceIdBoolQuery.should().add(QueryBuilders.termsQuery(ServiceRelationServerSideIndicator.SOURCE_SERVICE_ID, serviceIds)); + serviceIdBoolQuery.should().add(QueryBuilders.termsQuery(ServiceRelationServerSideIndicator.DEST_SERVICE_ID, serviceIds)); } sourceBuilder.query(boolQuery); } @@ -97,7 +97,7 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO { @Override public List loadServerSideServiceRelations(Step step, long startTB, long endTB) throws IOException { String indexName = TimePyramidTableNameBuilder.build(step, ServiceRelationServerSideIndicator.INDEX_NAME); SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource(); - sourceBuilder.query(QueryBuilders.rangeQuery(ServiceRelationServerSideIndicator.TIME_BUCKET).lte(startTB).gte(endTB)); + sourceBuilder.query(QueryBuilders.rangeQuery(ServiceRelationServerSideIndicator.TIME_BUCKET).gte(startTB).lte(endTB)); sourceBuilder.size(0); return load(sourceBuilder, indexName, ServiceRelationServerSideIndicator.SOURCE_SERVICE_ID, ServiceRelationServerSideIndicator.DEST_SERVICE_ID, Source.Service); @@ -106,7 +106,7 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO { @Override public List loadClientSideServiceRelations(Step step, long startTB, long endTB) throws IOException { String indexName = TimePyramidTableNameBuilder.build(step, ServiceRelationClientSideIndicator.INDEX_NAME); SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource(); - sourceBuilder.query(QueryBuilders.rangeQuery(ServiceRelationServerSideIndicator.TIME_BUCKET).lte(startTB).gte(endTB)); + sourceBuilder.query(QueryBuilders.rangeQuery(ServiceRelationServerSideIndicator.TIME_BUCKET).gte(startTB).lte(endTB)); sourceBuilder.size(0); return load(sourceBuilder, indexName, ServiceRelationClientSideIndicator.SOURCE_SERVICE_ID, ServiceRelationClientSideIndicator.DEST_SERVICE_ID, Source.Service); @@ -115,7 +115,7 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO { @Override public List loadServiceMappings(Step step, long startTB, long endTB) throws IOException { String indexName = TimePyramidTableNameBuilder.build(step, ServiceMappingIndicator.INDEX_NAME); SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource(); - sourceBuilder.query(QueryBuilders.rangeQuery(ServiceMappingIndicator.TIME_BUCKET).lte(startTB).gte(endTB)); + sourceBuilder.query(QueryBuilders.rangeQuery(ServiceMappingIndicator.TIME_BUCKET).gte(startTB).lte(endTB)); sourceBuilder.size(0); TermsAggregationBuilder sourceAggregation = AggregationBuilders.terms(ServiceMappingIndicator.SERVICE_ID).field(ServiceMappingIndicator.SERVICE_ID).size(1000); @@ -142,7 +142,7 @@ public class TopologyQueryEsDAO extends EsDAO implements ITopologyQueryDAO { public List loadServiceComponents(Step step, long startTB, long endTB) throws IOException { String indexName = TimePyramidTableNameBuilder.build(step, ServiceComponentIndicator.INDEX_NAME); SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource(); - sourceBuilder.query(QueryBuilders.rangeQuery(ServiceComponentIndicator.TIME_BUCKET).lte(startTB).gte(endTB)); + sourceBuilder.query(QueryBuilders.rangeQuery(ServiceComponentIndicator.TIME_BUCKET).gte(startTB).lte(endTB)); sourceBuilder.size(0); TermsAggregationBuilder sourceAggregation = AggregationBuilders.terms(ServiceComponentIndicator.SERVICE_ID).field(ServiceComponentIndicator.SERVICE_ID).size(1000); 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 e8682f9c1..17a0703d9 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 @@ -90,7 +90,7 @@ public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO { sourceBuilder.sort(SegmentRecord.START_TIME, SortOrder.DESC); break; case BY_DURATION: - sourceBuilder.sort(SegmentRecord.START_TIME, SortOrder.DESC); + sourceBuilder.sort(SegmentRecord.LATENCY, SortOrder.DESC); break; } sourceBuilder.size(limit); -- GitLab