pinpoint-apm/pinpoint · error · RuntimeException
ServiceType name of is duplicated with
Error message
ServiceType name of ${pair} is duplicated with ${prev} What it means
Startup-time sanity check in TraceMetadataLoader.ServiceTypeChecker: two TraceMetadataProviders registered ServiceTypes with the same name, so the later registration is rejected to prevent ambiguous service-type resolution.
Solutions
- Rename the colliding ServiceType in your custom plugin/metadata provider
- Remove the duplicate provider from the classpath
- Audit registered providers at startup and keep names unique
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java:215 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/62c433c253e3c5e0.
Report an issue: GitHub.
Appendix: source
Thrown at commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java:215
private final TraceMetadataProvider provider;
public Pair(T value, TraceMetadataProvider provider) {
this.value = value;
this.provider = provider;
}
}
private class ServiceTypeChecker {
private final Map<String, Pair<ServiceType>> serviceTypeNameMap = new HashMap<>();
private final Map<Short, Pair<ServiceType>> serviceTypeCodeMap = new HashMap<>();
private void check(ServiceType type, TraceMetadataProvider provider) {
Pair<ServiceType> pair = new Pair<>(type, provider);
Pair<ServiceType> prev = serviceTypeNameMap.put(type.getName(), pair);
if (prev != null) {
// TODO change exception type
throw new RuntimeException("ServiceType name of " + serviceTypePairToString(pair) + " is duplicated with " + serviceTypePairToString(prev));
}
prev = serviceTypeCodeMap.put(type.getCode(), pair);
if (prev != null) {
// TODO change exception type
throw new RuntimeException("ServiceType code of " + serviceTypePairToString(pair) + " is duplicated with " + serviceTypePairToString(prev));
}
if(type.isAlias()){
if(!type.isRpcClient()){
throw new RuntimeException("ServiceType code of " + serviceTypePairToString(pair) + " should be between range of RPC");
}
if(type.isRecordStatistics()){
throw new RuntimeException("ServiceType code of " + serviceTypePairToString(pair) + " can't have ALIAS and RECORD_STATISTICS at the same time");
}
}
}View on GitHub (pinned to 744c3d3075)