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 2018/09/28 04:21:40 UTC
[incubator-skywalking] branch master updated: Fix thermodynamic
query error (#1716)
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 1bfc68c Fix thermodynamic query error (#1716)
1bfc68c is described below
commit 1bfc68c8abf37692f00ac2ceab6a8b0defb43e91
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Fri Sep 28 12:21:24 2018 +0800
Fix thermodynamic query error (#1716)
* Avoid query error by adding initial instance to AlarmTrend
* Fix thermodynamic query
---
.../apache/skywalking/oap/server/core/Const.java | 1 +
.../analysis/indicator/IntKeyLongValueArray.java | 4 +-
.../analysis/indicator/ThermodynamicIndicator.java | 2 +-
.../oap/server/core/query/MetricQueryService.java | 8 ++-
.../server/core/query/entity/Thermodynamic.java | 11 ++++-
.../elasticsearch/query/MetricQueryEsDAO.java | 57 +++++++++++++++++-----
6 files changed, 65 insertions(+), 18 deletions(-)
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
index 4324835..6354236 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java
@@ -26,6 +26,7 @@ public class Const {
public static final String ID_SPLIT = "_";
public static final String KEY_VALUE_SPLIT = ",";
public static final String ARRAY_SPLIT = "|";
+ public static final String ARRAY_PARSER_SPLIT = "\\|";
public static final int USER_SERVICE_ID = 1;
public static final int USER_INSTANCE_ID = 1;
public static final int USER_ENDPOINT_ID = 1;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java
index 113fe87..d102d85 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java
@@ -49,11 +49,11 @@ public class IntKeyLongValueArray extends ArrayList<IntKeyLongValue> implements
}
@Override public void toObject(String data) {
- String[] keyValues = data.split(Const.ARRAY_SPLIT);
+ String[] keyValues = data.split(Const.ARRAY_PARSER_SPLIT);
for (int i = 0; i < keyValues.length; i++) {
IntKeyLongValue value = new IntKeyLongValue();
value.toObject(keyValues[i]);
- this.set(i, value);
+ this.add(value);
}
}
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java
index a69f7ef..69ba7ba 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java
@@ -41,7 +41,7 @@ public abstract class ThermodynamicIndicator extends Indicator {
@Getter @Setter @Column(columnName = STEP) private int step = 0;
@Getter @Setter @Column(columnName = NUM_OF_STEPS) private int numOfSteps = 0;
- @Getter @Setter @Column(columnName = DETAIL_GROUP) private IntKeyLongValueArray detailGroup = new IntKeyLongValueArray(30);
+ @Getter @Setter @Column(columnName = DETAIL_GROUP, isValue = true) private IntKeyLongValueArray detailGroup = new IntKeyLongValueArray(30);
private Map<Integer, IntKeyLongValue> detailIndex;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java
index 1e9c217..572581c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java
@@ -77,7 +77,13 @@ public class MetricQueryService implements Service {
final long endTB) throws IOException, ParseException {
List<DurationPoint> durationPoints = DurationUtils.INSTANCE.getDurationPoints(step, startTB, endTB);
List<String> ids = new ArrayList<>();
- durationPoints.forEach(durationPoint -> ids.add(durationPoint.getPoint() + Const.ID_SPLIT + id));
+ durationPoints.forEach(durationPoint -> {
+ if (id == null) {
+ ids.add(durationPoint.getPoint() + "");
+ } else {
+ ids.add(durationPoint.getPoint() + Const.ID_SPLIT + id);
+ }
+ });
return getMetricQueryDAO().getThermodynamic(indName, step, ids, ValueColumnIds.INSTANCE.getValueCName(indName));
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java
index 5cd65d3..6748f13 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java
@@ -26,4 +26,13 @@ import lombok.*;
public class Thermodynamic {
private List<List<Long>> nodes = new ArrayList<>();
private int axisYStep;
-}
+
+ public void setNodeValue(int columnNum, int rowNum, Long value) {
+ List<Long> element = new ArrayList<>(3);
+ element.add((long)columnNum);
+ element.add((long)rowNum);
+ element.add(value);
+ nodes.add(element);
+ }
+
+}
\ No newline at end of file
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java
index ff92fa3..c9dcf26 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java
@@ -106,26 +106,57 @@ public class MetricQueryEsDAO extends EsDAO implements IMetricQueryDAO {
MultiGetResponse response = getClient().multiGet(indexName, ids);
Thermodynamic thermodynamic = new Thermodynamic();
+ List<List<Long>> thermodynamicValueMatrix = new ArrayList<>();
+
+ int numOfSteps = 0;
for (MultiGetItemResponse itemResponse : response.getResponses()) {
- int axisYStep = ((Number)itemResponse.getResponse().getSource().get(ThermodynamicIndicator.STEP)).intValue();
- thermodynamic.setAxisYStep(axisYStep);
- int numOfSteps = ((Number)itemResponse.getResponse().getSource().get(ThermodynamicIndicator.NUM_OF_STEPS)).intValue();
+ Map<String, Object> source = itemResponse.getResponse().getSource();
+ if (source == null) {
+ // add empty list to represent no data exist for this time bucket
+ thermodynamicValueMatrix.add(new ArrayList<>());
+ } else {
+ int axisYStep = ((Number)source.get(ThermodynamicIndicator.STEP)).intValue();
+ thermodynamic.setAxisYStep(axisYStep);
+ numOfSteps = ((Number)source.get(ThermodynamicIndicator.NUM_OF_STEPS)).intValue();
+
+ String value = (String)source.get(ThermodynamicIndicator.DETAIL_GROUP);
+ IntKeyLongValueArray intKeyLongValues = new IntKeyLongValueArray(5);
+ intKeyLongValues.toObject(value);
+
+ List<Long> axisYValues = new ArrayList<>();
+ for (int i = 0; i < numOfSteps; i++) {
+ axisYValues.add(0L);
+ }
+
+ for (IntKeyLongValue intKeyLongValue : intKeyLongValues) {
+ axisYValues.set(intKeyLongValue.getKey(), intKeyLongValue.getValue());
+ }
+
+ thermodynamicValueMatrix.add(axisYValues);
+ }
+ }
- String value = (String)itemResponse.getResponse().getSource().get(ThermodynamicIndicator.DETAIL_GROUP);
- IntKeyLongValueArray intKeyLongValues = new IntKeyLongValueArray(5);
- intKeyLongValues.toObject(value);
+ int defaultNumOfSteps = numOfSteps;
- List<Long> axisYValues = new ArrayList<>();
- for (int i = 0; i < numOfSteps; i++) {
- axisYValues.add(0L);
+ thermodynamicValueMatrix.forEach(columnOfThermodynamic -> {
+ if (columnOfThermodynamic.size() == 0) {
+ if (defaultNumOfSteps > 0) {
+ for (int i = 0; i < defaultNumOfSteps; i++) {
+ columnOfThermodynamic.add(0L);
+ }
+ }
+ }
}
+ );
- for (IntKeyLongValue intKeyLongValue : intKeyLongValues) {
- axisYValues.set(intKeyLongValue.getKey(), intKeyLongValue.getValue());
+ for (int colNum = 0; colNum < thermodynamicValueMatrix.size(); colNum++) {
+ List<Long> column = thermodynamicValueMatrix.get(colNum);
+ for (int rowNum = 0; rowNum < column.size(); rowNum++) {
+ Long value = column.get(rowNum);
+ thermodynamic.setNodeValue(colNum, rowNum, value);
}
-
- thermodynamic.getNodes().add(axisYValues);
}
+
return thermodynamic;
}
}