From 3bde71ceab6f748eb65a72a0fdc66b620f1e1c42 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: Fri, 9 Mar 2018 15:19:55 +0800 Subject: [PATCH] Fixed/918 (#919) * Fixed #918 * 1. Fixed the remote serialize exception bug when there was a null value in string array. 2. Fixed the topology null exception bug when source or target application id is 0. --- .../service/GRPCRemoteSerializeService.java | 8 ++- .../storage/es/dao/ui/InstanceEsUIDAO.java | 3 +- .../es/dao/ui/ServiceNameServiceEsUIDAO.java | 14 +++-- .../collector/ui/service/TopologyBuilder.java | 57 +++++++++++++------ 4 files changed, 57 insertions(+), 25 deletions(-) diff --git a/apm-collector/apm-collector-remote/collector-remote-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/remote/grpc/service/GRPCRemoteSerializeService.java b/apm-collector/apm-collector-remote/collector-remote-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/remote/grpc/service/GRPCRemoteSerializeService.java index 5fce0f777..ea7396e0e 100644 --- a/apm-collector/apm-collector-remote/collector-remote-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/remote/grpc/service/GRPCRemoteSerializeService.java +++ b/apm-collector/apm-collector-remote/collector-remote-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/remote/grpc/service/GRPCRemoteSerializeService.java @@ -18,6 +18,8 @@ package org.apache.skywalking.apm.collector.remote.grpc.service; +import org.apache.skywalking.apm.collector.core.util.Const; +import org.apache.skywalking.apm.collector.core.util.StringUtils; import org.apache.skywalking.apm.collector.remote.grpc.proto.RemoteData; import org.apache.skywalking.apm.collector.remote.service.RemoteSerializeService; @@ -29,7 +31,11 @@ public class GRPCRemoteSerializeService implements RemoteSerializeService searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket) { - logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, startSecondTimeBucket, endSecondTimeBucket); + logger.debug("get instances info, keyword: {}, startSecondTimeBucket: {}, endSecondTimeBucket: {}", keyword, startSecondTimeBucket, endSecondTimeBucket); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); @@ -172,7 +172,6 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { } boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); - //TODO second BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery(); timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java index 341c2ea4b..da385aac9 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/ServiceNameServiceEsUIDAO.java @@ -21,6 +21,7 @@ package org.apache.skywalking.apm.collector.storage.es.dao.ui; import java.util.LinkedList; import java.util.List; import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; +import org.apache.skywalking.apm.collector.core.util.StringUtils; import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceNameServiceUIDAO; import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable; @@ -59,11 +60,14 @@ public class ServiceNameServiceEsUIDAO extends EsDAO implements IServiceNameServ searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSize(topN); - BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, keyword)); - boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE)); - - searchRequestBuilder.setQuery(boolQuery); + if (StringUtils.isNotEmpty(keyword)) { + BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); + boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, keyword)); + boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE)); + searchRequestBuilder.setQuery(boolQuery); + } else { + searchRequestBuilder.setQuery(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE)); + } SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchHit[] searchHits = searchResponse.getHits().getHits(); diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java index 5e7f699d4..6ccf59647 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java @@ -77,6 +77,9 @@ class TopologyBuilder { Map components = changeNodeComp2Map(applicationComponents); Map mappings = changeMapping2Map(applicationMappings); + filterZeroSourceOrTargetReference(callerReferenceMetric); + filterZeroSourceOrTargetReference(calleeReferenceMetric); + calleeReferenceMetric = calleeReferenceMetricFilter(calleeReferenceMetric); List nodes = new LinkedList<>(); @@ -124,20 +127,24 @@ class TopologyBuilder { }); List calls = new LinkedList<>(); + Set nodeIds = new HashSet<>(); callerReferenceMetric.forEach(referenceMetric -> { Application source = applicationCacheService.getApplicationById(referenceMetric.getSource()); Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget()); if (BooleanUtils.valueToBoolean(target.getIsAddress()) && !mappings.containsKey(target.getApplicationId())) { - ConjecturalNode conjecturalNode = new ConjecturalNode(); - conjecturalNode.setId(target.getApplicationId()); - conjecturalNode.setName(target.getApplicationCode()); - conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN)); - nodes.add(conjecturalNode); + if (!nodeIds.contains(target.getApplicationId())) { + ConjecturalNode conjecturalNode = new ConjecturalNode(); + conjecturalNode.setId(target.getApplicationId()); + conjecturalNode.setName(target.getApplicationCode()); + conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN)); + nodes.add(conjecturalNode); + nodeIds.add(target.getApplicationId()); + } } - Set nodeIds = buildNodeIds(nodes); - if (!nodeIds.contains(source.getApplicationId())) { + Set applicationNodeIds = buildNodeIds(nodes); + if (!applicationNodeIds.contains(source.getApplicationId())) { ApplicationNode applicationNode = new ApplicationNode(); applicationNode.setId(source.getApplicationId()); applicationNode.setName(source.getApplicationCode()); @@ -170,19 +177,25 @@ class TopologyBuilder { Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget()); if (source.getApplicationId() == Const.NONE_APPLICATION_ID) { - VisualUserNode visualUserNode = new VisualUserNode(); - visualUserNode.setId(source.getApplicationId()); - visualUserNode.setName(Const.USER_CODE); - visualUserNode.setType(Const.USER_CODE.toUpperCase()); - nodes.add(visualUserNode); + if (!nodeIds.contains(source.getApplicationId())) { + VisualUserNode visualUserNode = new VisualUserNode(); + visualUserNode.setId(source.getApplicationId()); + visualUserNode.setName(Const.USER_CODE); + visualUserNode.setType(Const.USER_CODE.toUpperCase()); + nodes.add(visualUserNode); + nodeIds.add(source.getApplicationId()); + } } if (BooleanUtils.valueToBoolean(source.getIsAddress())) { - ConjecturalNode conjecturalNode = new ConjecturalNode(); - conjecturalNode.setId(source.getApplicationId()); - conjecturalNode.setName(source.getApplicationCode()); - conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); - nodes.add(conjecturalNode); + if (!nodeIds.contains(source.getApplicationId())) { + ConjecturalNode conjecturalNode = new ConjecturalNode(); + conjecturalNode.setId(source.getApplicationId()); + conjecturalNode.setName(source.getApplicationCode()); + conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN)); + nodeIds.add(source.getApplicationId()); + nodes.add(conjecturalNode); + } } Call call = new Call(); @@ -248,4 +261,14 @@ class TopologyBuilder { }); return components; } + + private void filterZeroSourceOrTargetReference( + List referenceMetric) { + for (int i = referenceMetric.size() - 1; i >= 0; i--) { + IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric applicationReferenceMetric = referenceMetric.get(i); + if (applicationReferenceMetric.getSource() == 0 || applicationReferenceMetric.getTarget() == 0) { + referenceMetric.remove(i); + } + } + } }