apache/skywalking · error · IllegalArgumentException
Incompatible BucketedValues [{}] for current HistogramFuncti
Error message
Incompatible BucketedValues [{}] for current HistogramFunction[{}] What it means
AvgHistogramFunction (avgHistogram in MAL) keeps summation and count DataTables keyed by bucket name and averages them at calculation time. accept() enforces the same compatibility rule as HistogramFunction: once the dataset is non-empty, incoming BucketedValues must carry the identical bucket key set or the accept is rejected.
Source
Thrown at oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java:90
@BanyanDB.MeasureField
protected DataTable summation = new DataTable(30);
@Getter
@Setter
@Column(name = COUNT, storageOnly = true)
@ElasticSearch.Column(legacyName = "count")
@BanyanDB.MeasureField
protected DataTable count = new DataTable(30);
@Getter
@Setter
@Column(name = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
@BanyanDB.MeasureField
private DataTable dataset = new DataTable(30);
@Override
public void accept(final MeterEntity entity, final BucketedValues value) {
if (dataset.size() > 0) {
if (!value.isCompatible(dataset)) {
throw new IllegalArgumentException(
"Incompatible BucketedValues [" + value + "] for current HistogramFunction[" + dataset + "]");
}
}
this.entityId = entity.id();
final long[] values = value.getValues();
for (int i = 0; i < values.length; i++) {
long bucket = value.getBuckets()[i];
String bucketName = bucket == Long.MIN_VALUE ? Bucket.INFINITE_NEGATIVE : String.valueOf(bucket);
summation.valueAccumulation(bucketName, values[i]);
count.valueAccumulation(bucketName, 1L);
}
}
@Override
public boolean combine(final Metrics metrics) {
AvgHistogramFunction histogram = (AvgHistogramFunction) metrics;View on GitHub (pinned to 102af09b4a)
Solutions
- Pin one bucket definition per metric name and configure all producers (agents, collectors, MAL rules) to use it
- Introduce a versioned metric name (e.g. _v2) when bucket boundaries must change, keeping datasets homogeneous
- Restart OAP to clear in-memory datasets after fixing the producer config; drop the old persisted model if it holds incompatible keys
Example fix
# before
service_latency_percentile:
exp: otel...duration.bucket({'10','50','100'})
meterFunction: avgHistogram
# another producer sends buckets {'20','80'} for the same metric
# after — single bucket set for the metric name across all producers
service_latency_percentile:
exp: otel...duration.bucket({'10','50','100'})
meterFunction: avgHistogram Defensive patterns
Strategy: try-catch
Validate before calling
// before emitting an avgHistogram metric, verify the bucket set matches the metric's contract
if (!Arrays.equals(buckets, expectedBucketsForMetric.get(metricName))) {
log.warn("Ignoring {} with foreign bucket set {}", metricName, Arrays.toString(buckets));
return;
} Try / catch
try {
avgHistogramMetric.accept(entity, bucketedValues);
} catch (IllegalArgumentException e) {
if (e.getMessage().contains("Incompatible BucketedValues")) {
log.error("Bucket drift on avgHistogram metric {}", metricName, e);
return;
}
throw e;
} Prevention
- Pin a single valueBuckets list per avgHistogram metric name across agents and rules
- Standardize agent default buckets fleet-wide before metrics go live
- Version metric names when bucket boundaries must evolve
When it happens
Trigger: An avgHistogram MAL metric is fed BucketedValues whose bucket boundaries differ from those already accumulated — different agent bucket defaults for one metric name, edited valueBuckets in the rule, or the infinity-negative sentinel bucket (Long.MIN_VALUE -> 'InfiniteNegative' key) present in one stream and absent in another.
Common situations: Mixed agent versions reporting the same avgHistogram metric; per-service bucket overrides; OTel collector exporters translating explicit-bucket histograms with changed boundaries.
Related errors
- Incompatible BucketedValues [{}] for current HistogramFuncti
- Incompatible BucketedValues [{}] for current PercentileFunct
- MeterSystem unavailable for MAL compile of {sourceName}
- Function {} doesn't inherit from Metrics.
- {} has been defined, but calculate function or/are scope typ
AI-assisted analysis of apache/skywalking@102af09b4a (2026-08-14).
Data as JSON: /api/errors/c22c50f431335212.
Report an issue: GitHub.