apache/skywalking · error · IllegalExpressionException
Series No Labeled with Labeled, left and right series value
Error message
Series No Labeled with Labeled, left and right series value size not equal.
What it means
In LROp.seriesNoLabeledWithLabeled, every labeled group on the RIGHT must have the same value count as the single left series — values are paired by index within each group. Any right label group whose length differs from the left series throws this exception.
Source
Thrown at oap-server/mqe-rt/src/main/java/org/apache/skywalking/mqe/rt/operation/LROp.java:270
}
double newValue = calculate.apply(valueL.getDoubleValue(), valueR.getDoubleValue(), opType);
mqeValuesL.getValues().get(i).setDoubleValue(newValue);
}
}
return seriesLeft;
}
private static ExpressionResult seriesNoLabeledWithLabeled(ExpressionResult seriesLeft,
ExpressionResult seriesRight,
int opType, LROp calculate) throws IllegalExpressionException {
if (seriesLeft.getResults().isEmpty()) {
throw new IllegalExpressionException("Series No Labeled with Labeled, no labeled result is empty.");
}
MQEValues mqeValuesL = seriesLeft.getResults().get(0);
for (MQEValues mqeValuesR : seriesRight.getResults()) {
if (mqeValuesL.getValues().size() != mqeValuesR.getValues().size()) {
throw new IllegalExpressionException("Series No Labeled with Labeled, left and right series value size not equal.");
}
for (int i = 0; i < mqeValuesL.getValues().size(); i++) {
//reserve left metric info
MQEValue valueL = mqeValuesL.getValues().get(i);
MQEValue valueR = mqeValuesR.getValues().get(i);
if (valueL.isEmptyValue() || valueR.isEmptyValue()) {
valueL.setEmptyValue(true);
continue;
}
double newValue = calculate.apply(valueL.getDoubleValue(), valueR.getDoubleValue(), opType);
mqeValuesR.getValues().get(i).setDoubleValue(newValue);
}
}
return seriesRight;
}
private static ExpressionResult seriesLabeledWithLabeled(ExpressionResult seriesLeft,View on GitHub (pinned to 102af09b4a)
Solutions
- Query the labeled operand alone and compare each label group's length with the plain series
- Align step/duration; use identical down-sampling on both metrics
- Restrict the relabels to label values whose series are dense
- Align on timestamps client-side if server-side index pairing cannot be guaranteed
Example fix
// before query: b - relabels(a, tag:(k,v_sparse)) // v_sparse group shorter than b // after query: b - relabels(a, tag:(k,v_dense))
Defensive patterns
Strategy: validation
Validate before calling
int leftSize = seriesLeft.getResults().get(0).getValues().size();
boolean ok = seriesRight.getResults().stream()
.allMatch(g -> g.getValues().size() == leftSize); Try / catch
catch (IllegalExpressionException e) { /* iterate right label groups to find length mismatch */ } Prevention
- Keep labeled operands restricted to dense label values
- Align step and down-sampling between plain and labeled metrics
When it happens
Trigger: 'plainSeries op labeledSeries' where at least one right label group's point count differs from the left series' count — sparse label groups, different down-sampling, or missing buckets in specific label combinations.
Common situations: Comparing a base metric against per-label metrics where some labels report intermittently; label cardinality added after a relabels change pulling in a sparse label; step mismatch between the labeled metric's original query and the plain metric.
Related errors
- Series Labeled with No Labeled, left and right series value
- Series Labeled with Labeled, left and right series value siz
- Single Labeled to Single Labeled, left labeled result is emp
- Single Labeled to Single Labeled, right labeled result has m
- Series No Labeled, left and right series value size not equa
AI-assisted analysis of apache/skywalking@102af09b4a (2026-08-14).
Data as JSON: /api/errors/431a676228b72dd9.
Report an issue: GitHub.