pinpoint-apm/pinpoint · error · UnsupportedOperationException
unsupported groupingRule :
Error message
unsupported groupingRule :
What it means
Sentinel RuntimeException in groupingMetricValue: the metric's grouping rule (field.getMatchingRule()) is not one of the supported MatchingRule enum branches, so the code cannot decide how to group values — a configuration/definition mismatch.
Solutions
- Set a supported matchingRule value in the metric definition
- Add a handler branch for the new MatchingRule in the service
- Validate matching rules at YML load time to fail earlier
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/SystemMetricDataServiceImpl.java:148 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/aab578c3f6b20555.
Report an issue: GitHub.
Appendix: source
Thrown at metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/service/SystemMetricDataServiceImpl.java:148
CompletableFuture<List<DataPoint<Double>>> doubleFuture = systemMetricDoubleDao.getAsyncSampledSystemMetricData(metricDataSearchKey, metricTag);
invokeList.add(new QueryResult<>(metricDataType, doubleFuture, metricTag));
} else {
throw new RuntimeException("No Such Metric");
}
}
}
return (List<QueryResult<Number>>)(List<?>) invokeList;
}
private record QueryResult<T extends Number>(MetricDataType type, CompletableFuture<List<DataPoint<T>>> future, MetricTag tag) {
}
private List<MetricValueGroup<? extends Number>> groupingMetricValue(List<MetricValue<?>> metricValueList, GroupingRule groupingRule) {
if (GroupingRule.TAG == groupingRule) {
return groupingByTag(metricValueList);
}
throw new UnsupportedOperationException("unsupported groupingRule :" + groupingRule);
}
private List<MetricValueGroup<? extends Number>> groupingByTag(List<MetricValue<? extends Number>> metricValueList) {
List<TagGroup> uniqueTagGroupList = createUniqueTagGroupList(metricValueList);
Map<TagGroup, List<MetricValue<?>>> metricValueGroupMap = new HashMap<>();
for (MetricValue<?> metricValue : metricValueList) {
TagGroup tagGroup = findTagGroup(uniqueTagGroupList, new TagGroup(metricValue.getTagList()));
List<MetricValue<?>> metricValues = metricValueGroupMap.computeIfAbsent(tagGroup, v -> new ArrayList<>(1));
metricValues.add(metricValue);
}
Collection<List<MetricValue<?>>> valueList = metricValueGroupMap.values();
List<MetricValueGroup<?>> metricValueGroupList = new ArrayList<>(valueList.size());
for (Map.Entry<TagGroup, List<MetricValue<?>>> entry : metricValueGroupMap.entrySet()) {
String groupName = entry.getKey().groupName();View on GitHub (pinned to 744c3d3075)