{"record":{"id":"791235a98cddfc39","repo":"alibaba/nacos","slug":"exception-geterrcode","errorCode":"{exception.getErrCode()}","errorMessage":"Failed to request API: {api} after all servers({servers}) tried: {exception.getMessage()}","messagePattern":"Failed to request API: (.+?) after all servers\\((.+?)\\) tried: (.+?)","errorType":"exception","errorClass":"NacosException","httpStatus":null,"severity":"error","filePath":"client/src/main/java/com/alibaba/nacos/client/ai/remote/AiHttpClientProxy.java","lineNumber":795,"sourceCode":"            String server = servers.get(index % servers.size());\n            try {\n                return callServerStringWithHeader(api, params, server, resource);\n            } catch (NacosException e) {\n                if (NacosException.NOT_MODIFIED == e.getErrCode()) {\n                    throw e;\n                }\n                exception = e;\n                if (LOGGER.isDebugEnabled()) {\n                    LOGGER.debug(\"Request {} to server {} failed.\", api, server, e);\n                }\n            }\n            index = (index + 1) % servers.size();\n        }\n        \n        LOGGER.error(\"Request: {} failed, servers: {}, code: {}, msg: {}\", api, servers,\n            exception.getErrCode(),\n            exception.getErrMsg());\n        throw new NacosException(exception.getErrCode(),\n            \"Failed to request API: \" + api + \" after all servers(\" + servers + \") tried: \"\n                + exception.getMessage());\n    }\n    \n    private HttpRestResult<String> callServerStringWithHeader(String api,\n        Map<String, String> params, String server, RequestResource resource)\n        throws NacosException {\n        Map<String, String> securityHeaders = securityProxy.getIdentityContext(resource);\n        Header header = Header.newInstance();\n        header.addAll(securityHeaders);\n        \n        String url = buildUrl(server, api);\n        \n        try {\n            HttpRestResult<String> restResult = nacosRestTemplate.get(url, header,\n                Query.newInstance().initParams(params), String.class);\n            \n            if (restResult.ok()) {","sourceCodeStart":777,"sourceCodeEnd":813,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/client/src/main/java/com/alibaba/nacos/client/ai/remote/AiHttpClientProxy.java#L777-L813","documentation":"Thrown by AiHttpClientProxy.reqApiStringWithHeader() after the retry loop exhausted every server. Used by queryAgentSpec() for AgentSpec JSON retrieval. Like reqApiBytesWithHeader, this variant short-circuits on 304 NOT_MODIFIED, so this error is only reached for non-304 failures on all servers. The last server's error code and message are propagated.","triggerScenarios":"All servers returned a non-304 failure during queryAgentSpec(). Each callServerStringWithHeader() attempt threw a NacosException (not NOT_MODIFIED). The loop tried up to Math.max(servers.size(), 3) times.","commonSituations":"All server nodes down. AgentSpec not published (404 on all). Auth expired (403). Network partition. Server-side JSON serialization failure (500).","solutions":["Examine the inner exception code: 404 = not published, 500 = server error, 403 = auth issue.","Verify the AgentSpec name and namespace.","Check network connectivity and server health.","If 403, verify credentials and permissions."],"exampleFix":"try {\n    AgentSpecQueryResponse resp = aiService.queryAgentSpec(\"my-spec\", version, label, md5);\n} catch (NacosException e) {\n    if (e.getErrCode() == NacosException.NOT_MODIFIED) {\n        return; // cache still valid\n    }\n    log.error(\"queryAgentSpec failed on all servers: code={}, msg={}\",\n        e.getErrCode(), e.getErrMsg());\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    AgentSpecQueryResponse resp = aiService.queryAgentSpec(name, ver, label, cachedMd5);\n} catch (NacosException e) {\n    if (e.getErrCode() == NacosException.NOT_MODIFIED) {\n        return; // 304 propagated immediately\n    }\n    if (e.getErrCode() == NacosException.NOT_FOUND) {\n        log.warn(\"AgentSpec '{}' not found\", name);\n        return;\n    }\n    log.error(\"queryAgentSpec failed: code={}, msg={}\", e.getErrCode(), e.getErrMsg());\n}","preventionTips":["Handle NOT_MODIFIED explicitly for conditional queries.","Verify AgentSpec name and namespace.","Monitor server health."],"tags":["nacos","ai-client","http","network","retry-exhaustion","agentspec-query"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}