未验证 提交 90b268e1 编写于 作者: wu-sheng's avatar wu-sheng 提交者: GitHub

Revert #8066 introduced in 8.9.0 (#9336)

* Revert #8066

* Update changelog
上级 a46cfa02
......@@ -19,6 +19,7 @@
* Add `expPrefix`, `initExp` in MAL config.
* Add component ID(7015) for Python Bottle plugin.
* Remove legacy OAL `percentile` functions, `p99`, `p95`, `p90`, `p75`, `p50` func(s).
* Revert [#8066](https://github.com/apache/skywalking/pull/8066). Keep all metrics persistent even it is default value.
#### UI
......
......@@ -214,14 +214,4 @@ public abstract class AvgFunction extends Meter implements AcceptableValue<Long>
public int hashCode() {
return Objects.hash(entityId, getTimeBucket());
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -187,14 +187,4 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
public int hashCode() {
return Objects.hash(entityId, getTimeBucket());
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -184,14 +184,4 @@ public abstract class SumFunction extends Meter implements AcceptableValue<Long>
public int hashCode() {
return Objects.hash(getEntityId(), getTimeBucket());
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -95,14 +95,4 @@ public abstract class ApdexMetrics extends Metrics implements IntValueHolder {
public int getValue() {
return value;
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -57,15 +57,5 @@ public abstract class CPMMetrics extends Metrics implements LongValueHolder {
public void calculate() {
this.value = total / getDurationInMinute();
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -51,14 +51,4 @@ public abstract class CountMetrics extends Metrics implements LongValueHolder {
@Override
public void calculate() {
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -64,15 +64,4 @@ public abstract class DoubleAvgMetrics extends Metrics implements DoubleValueHol
public final void calculate() {
this.value = this.summation / this.count;
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
// Value in the query stage will ignore decimal places after a decimal point
return Double.valueOf(value).longValue() == 0;
}
}
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.skywalking.oap.server.core.analysis.metrics;
/**
* HavingDefaultValue interface defines a capability for the metric implementations, which has the declaration of the
* default value.
*
* For the declared metrics, the OAP server would skip the persistence of minute dimensionality metrics to reduce
* resource costs for the database, when the value of the metric is the default.
*/
public interface HavingDefaultValue {
/**
* @return true if the implementation of this metric has the definition of default value.
*/
default boolean haveDefault() {
return false;
}
/**
* @return true when the latest value equals the default value.
*/
default boolean isDefaultValue() {
return false;
}
}
......@@ -64,14 +64,4 @@ public abstract class LongAvgMetrics extends Metrics implements LongValueHolder
public final void calculate() {
this.value = this.summation / this.count;
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -52,15 +52,4 @@ public abstract class MaxDoubleMetrics extends Metrics implements DoubleValueHol
@Override
public void calculate() {
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
// Value in the query stage will ignore decimal places after a decimal point
return Double.valueOf(value).longValue() == 0;
}
}
......@@ -25,6 +25,9 @@ import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Metrics
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.SourceFrom;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
/**
*
**/
@MetricsFunction(functionName = "max")
public abstract class MaxLongMetrics extends Metrics implements LongValueHolder {
......@@ -33,7 +36,7 @@ public abstract class MaxLongMetrics extends Metrics implements LongValueHolder
@Getter
@Setter
@Column(columnName = VALUE, dataType = Column.ValueDataType.COMMON_VALUE)
private long value = Long.MIN_VALUE;
private long value;
@Entrance
public final void combine(@SourceFrom long count) {
......@@ -52,14 +55,4 @@ public abstract class MaxLongMetrics extends Metrics implements LongValueHolder
@Override
public void calculate() {
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -33,7 +33,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column;
@EqualsAndHashCode(of = {
"timeBucket"
})
public abstract class Metrics extends StreamData implements StorageData, HavingDefaultValue {
public abstract class Metrics extends StreamData implements StorageData {
public static final String TIME_BUCKET = "time_bucket";
public static final String ENTITY_ID = "entity_id";
......
......@@ -52,15 +52,4 @@ public abstract class MinDoubleMetrics extends Metrics implements DoubleValueHol
@Override
public void calculate() {
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
// Value in the query stage will ignore decimal places after a decimal point
return Double.valueOf(value).longValue() == 0;
}
}
......@@ -52,14 +52,4 @@ public abstract class MinLongMetrics extends Metrics implements LongValueHolder
@Override
public void calculate() {
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -69,14 +69,4 @@ public abstract class PercentMetrics extends Metrics implements IntValueHolder {
public int getValue() {
return percentage;
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return percentage == 0;
}
}
......@@ -73,14 +73,4 @@ public abstract class RateMetrics extends Metrics implements IntValueHolder {
public int getValue() {
return percentage;
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return percentage == 0;
}
}
......@@ -51,14 +51,4 @@ public abstract class SumMetrics extends Metrics implements LongValueHolder {
@Override
public void calculate() {
}
@Override
public boolean haveDefault() {
return true;
}
@Override
public boolean isDefaultValue() {
return value == 0;
}
}
......@@ -28,6 +28,10 @@ import java.util.Optional;
import java.util.Properties;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.library.datacarrier.DataCarrier;
import org.apache.skywalking.oap.server.library.datacarrier.consumer.BulkConsumePool;
import org.apache.skywalking.oap.server.library.datacarrier.consumer.ConsumerPoolFactory;
import org.apache.skywalking.oap.server.library.datacarrier.consumer.IConsumer;
import org.apache.skywalking.oap.server.core.UnexpectedException;
import org.apache.skywalking.oap.server.core.analysis.data.MergableBufferedData;
import org.apache.skywalking.oap.server.core.analysis.data.ReadWriteSafeCache;
......@@ -37,10 +41,6 @@ import org.apache.skywalking.oap.server.core.storage.IMetricsDAO;
import org.apache.skywalking.oap.server.core.storage.model.Model;
import org.apache.skywalking.oap.server.core.worker.AbstractWorker;
import org.apache.skywalking.oap.server.library.client.request.PrepareRequest;
import org.apache.skywalking.oap.server.library.datacarrier.DataCarrier;
import org.apache.skywalking.oap.server.library.datacarrier.consumer.BulkConsumePool;
import org.apache.skywalking.oap.server.library.datacarrier.consumer.ConsumerPoolFactory;
import org.apache.skywalking.oap.server.library.datacarrier.consumer.IConsumer;
import org.apache.skywalking.oap.server.library.module.ModuleDefineHolder;
import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
import org.apache.skywalking.oap.server.telemetry.api.CounterMetrics;
......@@ -68,7 +68,6 @@ public class MetricsPersistentWorker extends PersistenceWorker<Metrics> {
private final boolean supportUpdate;
private long sessionTimeout;
private CounterMetrics aggregationCounter;
private CounterMetrics skippedMetricsCounter;
/**
* The counter for the round of persistent.
*/
......@@ -83,11 +82,6 @@ public class MetricsPersistentWorker extends PersistenceWorker<Metrics> {
* @since 8.7.0 TTL settings from {@link org.apache.skywalking.oap.server.core.CoreModuleConfig#getMetricsDataTTL()}
*/
private int metricsDataTTL;
/**
* @since 8.9.0 The persistence of minute dimensionality metrics will be skipped if the value of the metric is the
* default.
*/
private boolean skipDefaultValueMetric;
MetricsPersistentWorker(ModuleDefineHolder moduleDefineHolder, Model model, IMetricsDAO metricsDAO,
AbstractWorker<Metrics> nextAlarmWorker, AbstractWorker<ExportEvent> nextExportWorker,
......@@ -106,7 +100,6 @@ public class MetricsPersistentWorker extends PersistenceWorker<Metrics> {
this.persistentCounter = 0;
this.persistentMod = 1;
this.metricsDataTTL = metricsDataTTL;
this.skipDefaultValueMetric = true;
String name = "METRICS_L2_AGGREGATION";
int size = BulkConsumePool.Creator.recommendMaxSize() / 8;
......@@ -131,11 +124,6 @@ public class MetricsPersistentWorker extends PersistenceWorker<Metrics> {
new MetricsTag.Keys("metricName", "level", "dimensionality"),
new MetricsTag.Values(model.getName(), "2", model.getDownsampling().getName())
);
skippedMetricsCounter = metricsCreator.createCounter(
"metrics_persistence_skipped", "The number of metrics skipped in persistence due to be in default value",
new MetricsTag.Keys("metricName", "dimensionality"),
new MetricsTag.Values(model.getName(), model.getDownsampling().getName())
);
SESSION_TIMEOUT_OFFSITE_COUNTER++;
}
......@@ -153,12 +141,6 @@ public class MetricsPersistentWorker extends PersistenceWorker<Metrics> {
null, null, null,
enableDatabaseSession, supportUpdate, storageSessionTimeout, metricsDataTTL
);
// Skipping default value mechanism only works for minute dimensionality.
// Metrics in hour and day dimensionalities would not apply this as duration is too long,
// applying this could make precision of hour/day metrics to be lost easily.
this.skipDefaultValueMetric = false;
// For a down-sampling metrics, we prolong the session timeout for 4 times, nearly 5 minutes.
// And add offset according to worker creation sequence, to avoid context clear overlap,
// eventually optimize load of IDs reading.
......@@ -243,22 +225,12 @@ public class MetricsPersistentWorker extends PersistenceWorker<Metrics> {
continue;
}
cachedMetrics.calculate();
if (skipDefaultValueMetric && cachedMetrics.haveDefault() && cachedMetrics.isDefaultValue()) {
// Skip metrics in default value
skippedMetricsCounter.inc();
} else {
prepareRequests.add(metricsDAO.prepareBatchUpdate(model, cachedMetrics));
}
prepareRequests.add(metricsDAO.prepareBatchUpdate(model, cachedMetrics));
nextWorker(cachedMetrics);
cachedMetrics.setLastUpdateTimestamp(timestamp);
} else {
metrics.calculate();
if (skipDefaultValueMetric && metrics.haveDefault() && metrics.isDefaultValue()) {
// Skip metrics in default value
skippedMetricsCounter.inc();
} else {
prepareRequests.add(metricsDAO.prepareBatchInsert(model, metrics));
}
prepareRequests.add(metricsDAO.prepareBatchInsert(model, metrics));
nextWorker(metrics);
metrics.setLastUpdateTimestamp(timestamp);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册