{"record":{"id":"e963319156f96283","repo":"alibaba/nacos","slug":"invalid-param-e96331","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/InstanceRequestHandler.java","lineNumber":76,"sourceCode":"    @Override\n    @NamespaceValidation\n    @TpsControl(pointName = \"RemoteNamingInstanceRegisterDeregister\",\n        name = \"RemoteNamingInstanceRegisterDeregister\")\n    @Secured(action = ActionTypes.WRITE)\n    @ExtractorManager.Extractor(rpcExtractor = InstanceRequestParamExtractor.class)\n    public InstanceResponse handle(InstanceRequest request, RequestMeta meta)\n        throws NacosException {\n        Service service = Service.newService(request.getNamespace(), request.getGroupName(),\n            request.getServiceName(),\n            true);\n        InstanceUtil.setInstanceIdIfEmpty(request.getInstance(), service.getGroupedServiceName());\n        switch (request.getType()) {\n            case NamingRemoteConstants.REGISTER_INSTANCE:\n                return registerInstance(service, request, meta);\n            case NamingRemoteConstants.DE_REGISTER_INSTANCE:\n                return deregisterInstance(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 InstanceResponse registerInstance(Service service, InstanceRequest request,\n        RequestMeta meta)\n        throws NacosException {\n        Instance instance = request.getInstance();\n        if (null == instance) {\n            throw new NacosException(NacosException.INVALID_PARAM,\n                \"Required parameter 'instance' is missing.\");\n        }\n        instance.validate();\n        clientOperationService.registerInstance(service, instance, meta.getConnectionId());\n        NotifyCenter.publishEvent(new RegisterInstanceTraceEvent(System.currentTimeMillis(),\n            NamingRequestUtil.getSourceIpForGrpcRequest(meta), true, service.getNamespace(),\n            service.getGroup(),\n            service.getName(), instance.getIp(), instance.getPort()));","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/naming/src/main/java/com/alibaba/nacos/naming/remote/rpc/handler/InstanceRequestHandler.java#L58-L94","documentation":"Thrown by InstanceRequestHandler.handle() when a gRPC InstanceRequest has a type other than REGISTER_INSTANCE or DE_REGISTER_INSTANCE. The switch covers only those two; any other value falls to default and raises NacosException.INVALID_PARAM with the bad type. Typically a client/server version or protocol mismatch.","triggerScenarios":"Client sends an InstanceRequest whose type is not 'registerInstance' or 'deregisterInstance'.","commonSituations":"SDK and server on incompatible versions; a hand-crafted gRPC client with the wrong type constant; reusing an InstanceRequest for a query operation.","solutions":["Set request type to NamingRemoteConstants.REGISTER_INSTANCE or DE_REGISTER_INSTANCE.","Use matching client/server Nacos versions.","For batch registration, use BatchInstanceRequest; for fuzzy watch, use the watch request."],"exampleFix":"// before\nInstanceRequest req = new InstanceRequest(ns, group, svc, \"register\", instance);\n// after\nInstanceRequest req = new InstanceRequest(ns, group, svc,\n    NamingRemoteConstants.REGISTER_INSTANCE, instance);","handlingStrategy":"type-guard","validationCode":"String type = request.getType();\nif (!NamingRemoteConstants.REGISTER_INSTANCE.equals(type)\n    && !NamingRemoteConstants.DE_REGISTER_INSTANCE.equals(type)) {\n    throw new IllegalArgumentException(\"Unsupported instance request type: \" + type);\n}","typeGuard":"static boolean isSupportedInstanceType(String type) {\n    return NamingRemoteConstants.REGISTER_INSTANCE.equals(type)\n        || NamingRemoteConstants.DE_REGISTER_INSTANCE.equals(type);\n}","tryCatchPattern":"try {\n    namingService.registerInstance(serviceName, instance);\n} catch (NacosException e) {\n    if (e.getErrCode() == NacosException.INVALID_PARAM\n        && e.getMessage().contains(\"Unsupported request type\")) {\n        // check SDK/server version alignment before retrying\n    } else {\n        throw e;\n    }\n}","preventionTips":["Use matching client/server versions.","Prefer the high-level NamingService API over raw gRPC requests.","For batch needs, use BatchInstanceRequest, not InstanceRequest."],"tags":["naming","grpc","validation","invalid-param","instance"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}