This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 3bde71c  Fixed/918 (#919)
3bde71c is described below

commit 3bde71ceab6f748eb65a72a0fdc66b620f1e1c42
Author: 彭勇升 pengys <[email protected]>
AuthorDate: Fri Mar 9 15:19:55 2018 +0800

    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.
---
 .../grpc/service/GRPCRemoteSerializeService.java   |  8 ++-
 .../storage/es/dao/ui/InstanceEsUIDAO.java         |  3 +-
 .../es/dao/ui/ServiceNameServiceEsUIDAO.java       | 14 ++++--
 .../apm/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 5fce0f7..ea7396e 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<Remote
     @Override public RemoteData.Builder 
serialize(org.apache.skywalking.apm.collector.core.data.RemoteData data) {
         RemoteData.Builder builder = RemoteData.newBuilder();
         for (int i = 0; i < data.getDataStringsCount(); i++) {
-            builder.addDataStrings(data.getDataString(i));
+            if (StringUtils.isNotEmpty(data.getDataString(i))) {
+                builder.addDataStrings(data.getDataString(i));
+            } else {
+                builder.addDataStrings(Const.EMPTY_STRING);
+            }
         }
         for (int i = 0; i < data.getDataIntegersCount(); i++) {
             builder.addDataIntegers(data.getDataInteger(i));
diff --git 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
index d3d7eff..537846b 100644
--- 
a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
+++ 
b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java
@@ -160,7 +160,7 @@ public class InstanceEsUIDAO extends EsDAO implements 
IInstanceUIDAO {
 
     @Override
     public List<AppServerInfo> 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 341c2ea..da385aa 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 5e7f699..6ccf596 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<Integer, String> components = 
changeNodeComp2Map(applicationComponents);
         Map<Integer, Integer> mappings = 
changeMapping2Map(applicationMappings);
 
+        filterZeroSourceOrTargetReference(callerReferenceMetric);
+        filterZeroSourceOrTargetReference(calleeReferenceMetric);
+
         calleeReferenceMetric = 
calleeReferenceMetricFilter(calleeReferenceMetric);
 
         List<Node> nodes = new LinkedList<>();
@@ -124,20 +127,24 @@ class TopologyBuilder {
         });
 
         List<Call> calls = new LinkedList<>();
+        Set<Integer> 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<Integer> nodeIds = buildNodeIds(nodes);
-            if (!nodeIds.contains(source.getApplicationId())) {
+            Set<Integer> 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<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> 
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);
+            }
+        }
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to