This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch fix in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 67f92af447256bd545328d770ba9bedb2e0224ac Author: Wu Sheng <[email protected]> AuthorDate: Tue Sep 27 09:55:06 2022 +0800 Fix two kernel level bugs. --- 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..2fe6ec7a2e 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 not 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
