diff --git a/CHANGES.md b/CHANGES.md index 57ce2ba9f6b26d931ec8de7d72e997db7b0ffc23..6dd534c8de8e7f93adaf421d22ddc1817d8e5d85 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -25,6 +25,7 @@ Release Notes. * Loop alarm into event system. * Support alarm tags. * Support WeLink as a channel of alarm notification. +* Fix: Some defensive codes didn't work in `PercentileFunction combine`. #### UI * Add logo for kong plugin. diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java index 093946b1a8ef7b9d78e6b400717efb9c3448e15d..061be7e31d2cf16d1e3c7240042349b725e05b8c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java @@ -131,16 +131,16 @@ public abstract class PercentileFunction extends Metrics implements AcceptableVa ); return true; } - if (ranks.size() > 0) { + if (this.ranks.size() > 0) { IntList ranksOfThat = percentile.getRanks(); - if (this.ranks.size() != ranks.size()) { + if (this.ranks.size() != ranksOfThat.size()) { log.warn("Incompatible ranks size = [{}}] for current PercentileFunction[{}]", - ranks.size(), this.ranks.size() + ranksOfThat.size(), this.ranks.size() ); return true; } else { - if (!this.ranks.equals(percentile.getRanks())) { - log.warn("Rank {} doesn't exist in the previous ranks {}", percentile.getRanks(), ranks); + if (!this.ranks.equals(ranksOfThat)) { + log.warn("Rank {} doesn't exist in the previous ranks {}", ranksOfThat, this.ranks); return true; } } 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 f3659dbc02326cbe26bd146e8ec3779dcce35a96..fe879e676534600363c50449294127dbae0dd1a2 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 @@ -157,15 +157,16 @@ public abstract class AvgHistogramPercentileFunction extends Metrics implements public boolean combine(final Metrics metrics) { AvgHistogramPercentileFunction percentile = (AvgHistogramPercentileFunction) metrics; - if (ranks.size() > 0) { - if (this.ranks.size() != ranks.size()) { + if (this.ranks.size() > 0) { + IntList ranksOfThat = percentile.getRanks(); + if (this.ranks.size() != ranksOfThat.size()) { log.warn("Incompatible ranks size = [{}}] for current PercentileFunction[{}]", - ranks.size(), this.ranks.size() + ranksOfThat.size(), this.ranks.size() ); return true; } else { - if (!this.ranks.equals(percentile.getRanks())) { - log.warn("Rank {} doesn't exist in the previous ranks {}", percentile.getRanks(), ranks); + if (!this.ranks.equals(ranksOfThat)) { + log.warn("Rank {} doesn't exist in the previous ranks {}", ranksOfThat, this.ranks); return true; } }