{"record":{"id":"66bdcdb612d253b2","repo":"alibaba/nacos","slug":"invalid-param-66bdcd","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/PersistentInstanceRequestHandler.java","lineNumber":79,"sourceCode":"    @Override\n    @NamespaceValidation\n    @TpsControl(pointName = \"RemoteNamingInstanceRegisterDeregister\",\n        name = \"RemoteNamingInstanceRegisterDeregister\")\n    @Secured(action = ActionTypes.WRITE)\n    @ExtractorManager.Extractor(rpcExtractor = PersistentInstanceRequestParamExtractor.class)\n    public InstanceResponse handle(PersistentInstanceRequest request, RequestMeta meta)\n        throws NacosException {\n        Service service = Service.newService(request.getNamespace(), request.getGroupName(),\n            request.getServiceName(),\n            false);\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, PersistentInstanceRequest request,\n        RequestMeta meta) {\n        Instance instance = request.getInstance();\n        String clientId = IpPortBasedClient.getClientId(instance.toInetAddr(), false);\n        clientOperationService.registerInstance(service, instance, clientId);\n        NotifyCenter.publishEvent(new RegisterInstanceTraceEvent(System.currentTimeMillis(),\n            NamingRequestUtil.getSourceIpForGrpcRequest(meta), true, service.getNamespace(),\n            service.getGroup(),\n            service.getName(), instance.getIp(), instance.getPort()));\n        return new InstanceResponse(NamingRemoteConstants.REGISTER_INSTANCE);\n    }\n    \n    private InstanceResponse deregisterInstance(Service service, PersistentInstanceRequest request,\n        RequestMeta meta) {","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/naming/src/main/java/com/alibaba/nacos/naming/remote/rpc/handler/PersistentInstanceRequestHandler.java#L61-L97","documentation":"Thrown by PersistentInstanceRequestHandler.handle() when a persistent (non-ephemeral) instance gRPC request has a type other than REGISTER_INSTANCE or DE_REGISTER_INSTANCE. The switch covers only those two; anything else yields NacosException.INVALID_PARAM with the bad type. PersistentInstanceRequest targets persistent services (CP/RAFT), separate from the ephemeral InstanceRequest.","triggerScenarios":"Client sends a PersistentInstanceRequest whose type is not 'registerInstance' or 'deregisterInstance'.","commonSituations":"Using PersistentInstanceRequest where InstanceRequest was intended (ephemeral services); client/server version mismatch; a custom client passing the wrong type constant.","solutions":["Set the type to REGISTER_INSTANCE or DE_REGISTER_INSTANCE.","Ensure the target service is persistent (ephemeral=false); use InstanceRequest for ephemeral services.","Align client and server Nacos versions."],"exampleFix":"// before\nPersistentInstanceRequest req = new PersistentInstanceRequest(ns, group, svc, \"register\", instance);\n// after\nPersistentInstanceRequest req = new PersistentInstanceRequest(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 persistent instance request type: \" + type);\n}","typeGuard":"static boolean isSupportedPersistentType(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        // ensure ephemeral vs persistent matches the service definition\n    } else {\n        throw e;\n    }\n}","preventionTips":["Match the request type to the service's persistence model.","Use InstanceRequest for ephemeral services, PersistentInstanceRequest for persistent ones.","Align client and server versions."],"tags":["naming","grpc","validation","invalid-param","instance","persistent"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}