{"record":{"id":"37ac44305801afdd","repo":"alibaba/nacos","slug":"invalid-param-37ac44","errorCode":"INVALID_PARAM","errorMessage":"Unsupported request type %s","messagePattern":"Unsupported request type (.+?)","errorType":"validation","errorClass":"NacosException","httpStatus":null,"severity":"error","filePath":"naming/src/main/java/com/alibaba/nacos/naming/remote/rpc/handler/BatchInstanceRequestHandler.java","lineNumber":73,"sourceCode":"    \n    @Override\n    @NamespaceValidation\n    @TpsControl(pointName = \"RemoteNamingInstanceBatchRegister\",\n        name = \"RemoteNamingInstanceBatchRegister\")\n    @Secured(action = ActionTypes.WRITE)\n    @ExtractorManager.Extractor(rpcExtractor = BatchInstanceRequestParamExtractor.class)\n    public BatchInstanceResponse handle(BatchInstanceRequest request, RequestMeta meta)\n        throws NacosException {\n        Service service = Service.newService(request.getNamespace(), request.getGroupName(),\n            request.getServiceName(),\n            true);\n        InstanceUtil.batchSetInstanceIdIfEmpty(request.getInstances(),\n            service.getGroupedServiceName());\n        switch (request.getType()) {\n            case NamingRemoteConstants.BATCH_REGISTER_INSTANCE:\n                return batchRegisterInstance(service, request, meta);\n            default:\n                throw new NacosException(NacosException.INVALID_PARAM,\n                    String.format(\"Unsupported request type %s\", request.getType()));\n        }\n    }\n    \n    private BatchInstanceResponse batchRegisterInstance(Service service,\n        BatchInstanceRequest request,\n        RequestMeta meta) {\n        clientOperationService.batchRegisterInstance(service, request.getInstances(),\n            meta.getConnectionId());\n        publishBatchRegisterInstanceTraceEvent(service, request, meta);\n        return new BatchInstanceResponse(NamingRemoteConstants.BATCH_REGISTER_INSTANCE);\n    }\n    \n    private void publishBatchRegisterInstanceTraceEvent(Service service,\n        BatchInstanceRequest request,\n        RequestMeta meta) {\n        long eventTime = System.currentTimeMillis();\n        String clientIp = NamingRequestUtil.getSourceIpForGrpcRequest(meta);","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/naming/src/main/java/com/alibaba/nacos/naming/remote/rpc/handler/BatchInstanceRequestHandler.java#L55-L91","documentation":"Thrown by BatchInstanceRequestHandler.handle() when a gRPC BatchInstanceRequest carries a request type that is not BATCH_REGISTER_INSTANCE. The handler switches on request.getType(); only batch-register is implemented, so any other type yields NacosException.INVALID_PARAM with the offending type in the message. Usually signals a client/server contract mismatch.","triggerScenarios":"Client sends a BatchInstanceRequest whose type is something other than 'batchRegisterInstance' (e.g. a deregister or an unknown custom string).","commonSituations":"Client SDK version newer or older than the server, sending a type the server does not recognize; custom/forked client setting an incorrect type constant; sending a BatchInstanceRequest for an operation that should use InstanceRequest.","solutions":["Ensure the BatchInstanceRequest type equals NamingRemoteConstants.BATCH_REGISTER_INSTANCE.","Align client and server Nacos versions (same minor release).","For single register/deregister, use InstanceRequest instead of BatchInstanceRequest."],"exampleFix":"// before\nBatchInstanceRequest req = new BatchInstanceRequest(ns, group, svc, \"batchDeregister\", instances);\n// after\nBatchInstanceRequest req = new BatchInstanceRequest(ns, group, svc,\n    NamingRemoteConstants.BATCH_REGISTER_INSTANCE, instances);","handlingStrategy":"type-guard","validationCode":"if (!NamingRemoteConstants.BATCH_REGISTER_INSTANCE.equals(request.getType())) {\n    throw new IllegalArgumentException(\n        \"BatchInstanceRequest type must be batchRegisterInstance, was: \" + request.getType());\n}","typeGuard":"static boolean isSupportedBatchType(String type) {\n    return NamingRemoteConstants.BATCH_REGISTER_INSTANCE.equals(type);\n}","tryCatchPattern":"try {\n    client.batchRegisterInstance(service, instances);\n} catch (NacosException e) {\n    if (e.getErrCode() == NacosException.INVALID_PARAM\n        && e.getMessage().contains(\"Unsupported request type\")) {\n        // align SDK version with server, then rebuild request with correct type\n    } else {\n        throw e;\n    }\n}","preventionTips":["Pin client and server to the same Nacos minor version.","Use the high-level NamingService.batchRegisterInstance API.","Never reuse an InstanceRequest type constant for a BatchInstanceRequest."],"tags":["naming","grpc","validation","invalid-param","instance","batch"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}