{"record":{"id":"ab9b75e404f92463","repo":"pinpoint-apm/pinpoint","slug":"servicetype-code-of-pair-should-be-between-rang","errorCode":null,"errorMessage":"ServiceType code of ${pair} should be between range of RPC","messagePattern":"ServiceType code of (.+?) should be between range of RPC","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java","lineNumber":227,"sourceCode":"        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        }\n\n        private void logResult() {\n            logger.info(\"Finished loading ServiceType:\");\n\n            List<Pair<ServiceType>> serviceTypes = new ArrayList<>(serviceTypeCodeMap.values());\n            serviceTypes.sort(Comparator.comparingInt(this::getCode));\n\n            for (Pair<ServiceType> serviceType : serviceTypes) {\n                logger.info(serviceTypePairToString(serviceType));\n            }\n        }\n","sourceCodeStart":209,"sourceCodeEnd":245,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java#L209-L245","documentation":"Thrown by TraceMetadataLoader.ServiceTypeChecker.check when a registered ServiceType's code falls outside the valid RPC code range defined by the ServiceType schema (ServiceTypeProperty/ServiceTypeRange rules). It fires during TraceMetadataProvider validation when a provider declares a code that violates the reserved ranges, preventing ambiguous or invalid type codes from entering the system. The input at fault is the ServiceType's numeric code; use the designated range (e.g., ServiceTypeFactory/RPC range constants) when defining custom types.","triggerScenarios":"Thrown at commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/trace/TraceMetadataLoader.java:227 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Move the plugin's ServiceType code outside the RPC reserved range","Use the documented plugin code allocation ranges when defining new types"],"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-14T05:17:10.506Z"}