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.
This commit is contained in:
parent
a5f634a6dc
commit
3bde71ceab
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue