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

  1. Set a supported matchingRule value in the metric definition
  2. Add a handler branch for the new MatchingRule in the service
  3. 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)