{"record":{"id":"62c433c253e3c5e0","repo":"pinpoint-apm/pinpoint","slug":"servicetype-name-of-pair-is-duplicated-with-p","errorCode":null,"errorMessage":"ServiceType name of ${pair} is duplicated with ${prev}","messagePattern":"ServiceType name of (.+?) is duplicated with (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java","lineNumber":215,"sourceCode":"        private final TraceMetadataProvider provider;\n        \n        public Pair(T value, TraceMetadataProvider provider) {\n            this.value = value;\n            this.provider = provider;\n        }\n    }\n    \n    private class ServiceTypeChecker {\n        private final Map<String, Pair<ServiceType>> serviceTypeNameMap = new HashMap<>();\n        private final Map<Short, Pair<ServiceType>> serviceTypeCodeMap = new HashMap<>();\n\n        private void check(ServiceType type, TraceMetadataProvider provider) {\n            Pair<ServiceType> pair = new Pair<>(type, provider);\n            Pair<ServiceType> prev = serviceTypeNameMap.put(type.getName(), pair);\n    \n            if (prev != null) {\n                // TODO change exception type\n                throw new RuntimeException(\"ServiceType name of \" + serviceTypePairToString(pair) + \" is duplicated with \" + serviceTypePairToString(prev));\n            }\n    \n            prev = serviceTypeCodeMap.put(type.getCode(), pair);\n    \n            if (prev != null) {\n                // TODO change exception type\n                throw new RuntimeException(\"ServiceType code of \" + serviceTypePairToString(pair) + \" is duplicated with \" + serviceTypePairToString(prev));\n            }\n\n            if(type.isAlias()){\n                if(!type.isRpcClient()){\n                    throw new RuntimeException(\"ServiceType code of \" + serviceTypePairToString(pair) + \" should be between range of RPC\");\n                }\n                if(type.isRecordStatistics()){\n                    throw new RuntimeException(\"ServiceType code of \" + serviceTypePairToString(pair) + \" can't have ALIAS and RECORD_STATISTICS at the same time\");\n                }\n            }\n        }","sourceCodeStart":197,"sourceCodeEnd":233,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java#L197-L233","documentation":"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.","triggerScenarios":"Thrown at commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java:215 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}