apache/skywalking · error · IllegalArgumentException
Unsupported predicted value type: {}
Error message
Unsupported predicted value type: {} What it means
IllegalArgumentException from MQEVisitorBase.getValueByType when a 'predict' (forecast) MQE query asks for a value type other than VALUE, UPPER or LOWER. PredictServiceMetrics.PredictSingleValue exposes a base value plus upper/lower confidence bounds; anything else (an unexpected token/type code reaching this private helper) is not representable and is rejected.
Source
Thrown at oap-server/mqe-rt/src/main/java/org/apache/skywalking/mqe/rt/MQEVisitorBase.java:617
}
}
timeValues.put(pointOfTime, dataTable);
}
}
return buildLabledMqeValuesList(timeValues, queryLabels, pointOfTimes);
}
private long getValueByType(PredictServiceMetrics.PredictSingleValue predictSingleValue,
int valueType) {
switch (valueType) {
case MQEParser.VALUE:
return predictSingleValue.getValue();
case MQEParser.UPPER:
return predictSingleValue.getUpperValue();
case MQEParser.LOWER:
return predictSingleValue.getLowerValue();
default:
throw new IllegalArgumentException("Unsupported predicted value type: " + valueType);
}
}
protected List<MQEValues> buildLabledMqeValuesList(Map<String, DataTable> timeValues, List<KeyValue> queryLabels,
ArrayList<String> pointOfTimes) {
List<MQEValues> mqeValuesList = new ArrayList<>();
List<String> labelConditions = composeLabelConditions(queryLabels, timeValues.values());
for (String labelCondition : labelConditions) {
MQEValues mqeValues = new MQEValues();
for (String pointOfTime : pointOfTimes) {
DataTable dataTable = timeValues.getOrDefault(pointOfTime, new DataTable());
Long metricValue = dataTable.get(labelCondition);
MQEValue mqeValue = new MQEValue();
//use timeBucket as id here
mqeValue.setId(pointOfTime);
if (metricValue != null) {
mqeValue.setDoubleValue(metricValue);
} else {View on GitHub (pinned to 102af09b4a)
Solutions
- Align versions: rebuild/redeploy so mqe-rt and server-core come from the same OAP release (no mixed jars in oap-libs)
- If you are extending the MQE grammar, add the new value type to this switch (VALUE/UPPER/LOWER pattern) and provide it in PredictSingleValue
- As a workaround, re-issue the predict query with the default value output (omit the bound selector) to stay on the VALUE branch
- Report upstream with the exact MQE expression if it reproduces on a clean single-version install
Defensive patterns
Strategy: try-catch
Try / catch
catch (IllegalArgumentException e) { /* indicate version skew; rebuild with consistent OAP modules and retry */ } Prevention
- Never mix mqe-rt and server-core jars from different releases
- Pin a single OAP distribution image
- Extend getValueByType's switch when adding grammar value-type tokens in forks
When it happens
Trigger: A predict expression like 'predict(metric, pt10m, 0.8)' evaluated through a code path that requests a bound the visitor does not map — in practice triggered by internal type-code drift (e.g. a new grammar token reaching this switch) rather than ordinary user syntax, because the public predict grammar only exposes value/upper/lower.
Common situations: Almost always a version-mismatch bug surface: OAP server-core query types and mqe-rt visitor built from mismatched versions, or a custom fork adding a new value-type token without extending this switch. End users hitting it should suspect an incomplete upgrade.
Related errors
- Bool Operation: The result of the left expression is not 1 o
- Bool Operation: The result of the right expression is not 1
- Unsupported bool operation.
- line {}:{} {}
- Unsupported aggregateLabels function.
AI-assisted analysis of apache/skywalking@102af09b4a (2026-08-14).
Data as JSON: /api/errors/e4f02cb63e909466.
Report an issue: GitHub.