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/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 2c265db6e8 Fix two kernel level bugs. (#9690)
2c265db6e8 is described below
commit 2c265db6e8cb8fba72f983b326d8730dd3603a4d
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Tue Sep 27 16:05:17 2022 +0800
Fix two kernel level bugs. (#9690)
* Fix meter functions `avgHistogram`, `avgHistogramPercentile`,
`avgLabeled`, `sumHistogram` having data conflict when downsampling. FYI
@jinho-son thanks for reporting.
* Do sorting `readLabeledMetricsValues` result forcedly in case the
storage(database) doesn't return data consistent with the parameter list.
---
docs/en/changes/changes.md | 4 ++++
.../analysis/meter/function/HistogramFunction.java | 4 ++--
.../meter/function/avg/AvgHistogramFunction.java | 8 ++++----
.../avg/AvgHistogramPercentileFunction.java | 16 ++++++++--------
.../meter/function/avg/AvgLabeledFunction.java | 8 ++++----
.../banyandb/measure/BanyanDBMetricsQueryDAO.java | 21 ++++++++++++---------
.../elasticsearch/query/MetricsQueryEsDAO.java | 6 +++++-
.../plugin/jdbc/h2/dao/H2MetricsQueryDAO.java | 6 +++++-
8 files changed, 44 insertions(+), 29 deletions(-)
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 1ce03c3648..661d284fbe 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -20,6 +20,10 @@
in `no-init` mode.
* Make sure instance list ordered in TTL processor to avoid TTL timer never
runs.
* Support monitoring PostgreSQL slow SQLs.
+* Fix meter functions `avgHistogram`, `avgHistogramPercentile`, `avgLabeled`,
`sumHistogram` having data conflict when
+ dowmsampling.
+* Do sorting `readLabeledMetricsValues` result forcedly in case the
storage(database) doesn't return data consistent
+ with parameter list.
#### UI
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java
index 40c44ae770..7274372a07 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java
@@ -101,7 +101,7 @@ public abstract class HistogramFunction extends Meter
implements AcceptableValue
HistogramFunction metrics = (HistogramFunction) createNew();
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInHour());
- metrics.setDataset(getDataset());
+ metrics.getDataset().copyFrom(getDataset());
return metrics;
}
@@ -110,7 +110,7 @@ public abstract class HistogramFunction extends Meter
implements AcceptableValue
HistogramFunction metrics = (HistogramFunction) createNew();
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInDay());
- metrics.setDataset(getDataset());
+ metrics.getDataset().copyFrom(getDataset());
return metrics;
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java
index 35dc54480b..b924bdbfb4 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java
@@ -126,8 +126,8 @@ public abstract class AvgHistogramFunction extends Meter
implements AcceptableVa
AvgHistogramFunction metrics = (AvgHistogramFunction) createNew();
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInHour());
- metrics.setCount(getCount());
- metrics.setSummation(getSummation());
+ metrics.getSummation().copyFrom(getSummation());
+ metrics.getCount().copyFrom(getCount());
return metrics;
}
@@ -136,8 +136,8 @@ public abstract class AvgHistogramFunction extends Meter
implements AcceptableVa
AvgHistogramFunction metrics = (AvgHistogramFunction) createNew();
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInDay());
- metrics.setCount(getCount());
- metrics.setSummation(getSummation());
+ metrics.getSummation().copyFrom(getSummation());
+ metrics.getCount().copyFrom(getCount());
return metrics;
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java
index ace67de624..6d56de2d27 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java
@@ -265,10 +265,10 @@ public abstract class AvgHistogramPercentileFunction
extends Meter implements Ac
AvgHistogramPercentileFunction metrics =
(AvgHistogramPercentileFunction) createNew();
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInHour());
- metrics.setSummation(getSummation());
- metrics.setCount(getCount());
- metrics.setRanks(getRanks());
- metrics.setPercentileValues(getPercentileValues());
+ metrics.getSummation().copyFrom(getSummation());
+ metrics.getCount().copyFrom(getCount());
+ metrics.getRanks().copyFrom(getRanks());
+ metrics.getPercentileValues().copyFrom(getPercentileValues());
return metrics;
}
@@ -277,10 +277,10 @@ public abstract class AvgHistogramPercentileFunction
extends Meter implements Ac
AvgHistogramPercentileFunction metrics =
(AvgHistogramPercentileFunction) createNew();
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInDay());
- metrics.setSummation(getSummation());
- metrics.setCount(getCount());
- metrics.setRanks(getRanks());
- metrics.setPercentileValues(getPercentileValues());
+ metrics.getSummation().copyFrom(getSummation());
+ metrics.getCount().copyFrom(getCount());
+ metrics.getRanks().copyFrom(getRanks());
+ metrics.getPercentileValues().copyFrom(getPercentileValues());
return metrics;
}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java
index d971ef7fb9..2783fc0228 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java
@@ -112,8 +112,8 @@ public abstract class AvgLabeledFunction extends Meter
implements AcceptableValu
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInHour());
metrics.setServiceId(getServiceId());
- metrics.setSummation(getSummation());
- metrics.setCount(getCount());
+ metrics.getSummation().copyFrom(getSummation());
+ metrics.getCount().copyFrom(getCount());
return metrics;
}
@@ -123,8 +123,8 @@ public abstract class AvgLabeledFunction extends Meter
implements AcceptableValu
metrics.setEntityId(getEntityId());
metrics.setTimeBucket(toTimeBucketInDay());
metrics.setServiceId(getServiceId());
- metrics.setSummation(getSummation());
- metrics.setCount(getCount());
+ metrics.getSummation().copyFrom(getSummation());
+ metrics.getCount().copyFrom(getCount());
return metrics;
}
diff --git
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
index cf61fa63e9..74cc787625 100644
---
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
+++
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsQueryDAO.java
@@ -19,6 +19,13 @@
package org.apache.skywalking.oap.server.storage.plugin.banyandb.measure;
import com.google.common.collect.ImmutableSet;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
import org.apache.skywalking.banyandb.v1.client.DataPoint;
import org.apache.skywalking.banyandb.v1.client.MeasureQuery;
import org.apache.skywalking.banyandb.v1.client.MeasureQueryResponse;
@@ -41,14 +48,6 @@ import
org.apache.skywalking.oap.server.storage.plugin.banyandb.MetadataRegistry
import
org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.AbstractBanyanDBDAO;
import org.apache.skywalking.oap.server.storage.plugin.banyandb.util.ByteUtil;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
public class BanyanDBMetricsQueryDAO extends AbstractBanyanDBDAO implements
IMetricsQueryDAO {
public BanyanDBMetricsQueryDAO(BanyanDBStorageClient client) {
super(client);
@@ -168,7 +167,11 @@ public class BanyanDBMetricsQueryDAO extends
AbstractBanyanDBDAO implements IMet
);
}
- return Util.composeLabelValue(condition, labels, ids, dataTableMap);
+ return Util.sortValues(
+ Util.composeLabelValue(condition, labels, ids, dataTableMap),
+ ids,
+ ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName())
+ );
}
@Override
diff --git
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
index f36cbc8cce..43b79bed97 100644
---
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
+++
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
@@ -183,7 +183,11 @@ public class MetricsQueryEsDAO extends EsDAO implements
IMetricsQueryDAO {
);
}
}
- return Util.composeLabelValue(condition, labels, ids, idMap);
+ return Util.sortValues(
+ Util.composeLabelValue(condition, labels, ids, idMap),
+ ids,
+ ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName())
+ );
}
@Override
diff --git
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
index 66fbb67373..f03b08748b 100644
---
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
@@ -186,7 +186,11 @@ public class H2MetricsQueryDAO extends H2SQLExecutor
implements IMetricsQueryDAO
} catch (SQLException e) {
throw new IOException(e);
}
- return Util.composeLabelValue(condition, labels, ids, idMap);
+ return Util.sortValues(
+ Util.composeLabelValue(condition, labels, ids, idMap),
+ ids,
+ ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName())
+ );
}
@Override