{"record":{"id":"3e2091fe8aa9bfe7","repo":"alibaba/nacos","slug":"502","errorCode":"502","errorMessage":"No available server after {} retries, last tried server: {}","messagePattern":"No available server after (.+?) retries, last tried server: (.+?)","errorType":"exception","errorClass":"NacosException","httpStatus":null,"severity":"critical","filePath":"maintainer-client/src/main/java/com/alibaba/nacos/maintainer/client/remote/ClientHttpProxy.java","lineNumber":170,"sourceCode":"            if (isFail(resultCode)) {\n                currentServerAddr = serverListManager.genNextServer();\n            }\n            retryCount--;\n            \n            try {\n                Thread.sleep(100);\n            } catch (InterruptedException e) {\n                Thread.currentThread().interrupt();\n            }\n        }\n        \n        if (null != requestException) {\n            throw new NacosException(requestException.getErrCode(),\n                \"No available server after \" + maxRetry + \" retries, last tried server: \"\n                    + currentServerAddr\n                    + \", last errMsg: \" + requestException.getErrMsg());\n        }\n        throw new NacosException(NacosException.BAD_GATEWAY,\n            \"No available server after \" + maxRetry + \" retries, last tried server: \"\n                + currentServerAddr);\n    }\n    \n    private String resolveErrorMessage(HttpRestResult<String> result) {\n        String responseBody = result.getData();\n        if (StringUtils.isNotBlank(responseBody)) {\n            try {\n                Result<Object> response =\n                    JsonUtils.toObj(responseBody, new NacosTypeReference<Result<Object>>() {\n                    });\n                if (response != null) {\n                    String message = response.getMessage();\n                    Object data = response.getData();\n                    if (data instanceof String && StringUtils.isNotBlank((String) data)) {\n                        if (StringUtils.isNotBlank(message) && !data.equals(message)) {\n                            return message + \": \" + data;\n                        }","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/maintainer-client/src/main/java/com/alibaba/nacos/maintainer/client/remote/ClientHttpProxy.java#L152-L188","documentation":"Thrown by ClientHttpProxy when all server retry attempts are exhausted AND no request exception was ever captured (requestException == null). This means the client could not even establish a working request to any server. Error code is BAD_GATEWAY=502. This is the harder failure — no server responded with a processable result at all.","triggerScenarios":"The HTTP proxy retry loop completes all iterations without ever capturing a requestException — typically because every server address was unreachable (connection refused, DNS failure, timeout) or the server list itself was empty/exhausted without an exception being stored.","commonSituations":"Wrong server address in properties (typo, wrong port). Firewall or network ACL blocking the Nacos server port. DNS resolution failure for the server hostname. All Nacos server nodes are down. Server list manager has not yet been populated with addresses.","solutions":["Verify the server address property (serverAddr) is correct and the port is open: telnet or nc to the Nacos server.","Check that at least one Nacos server node is running and healthy.","Confirm no firewall, security group, or network policy blocks the connection.","Ensure the server list manager has been initialized with valid addresses before making API calls."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// verify connectivity before relying on the client\ntry (Socket s = new Socket()) {\n    s.connect(new InetSocketAddress(host, port), 2000);\n} catch (IOException e) {\n    throw new IllegalStateException(\"Nacos server unreachable: \" + host + \":\" + port, e);\n}","typeGuard":null,"tryCatchPattern":"try {\n    result = maintainerService.someApiCall(...);\n} catch (NacosException e) {\n    if (e.getErrCode() == NacosException.BAD_GATEWAY) {\n        // no server was reachable at all — check network/server health\n        log.error(\"All Nacos servers unreachable: {}\", e.getMessage());\n        // optionally retry with backoff after confirming network\n    }\n}","preventionTips":["Validate server addresses and port reachability at application startup.","Configure multiple server addresses for failover redundancy.","Set up health checks and alerts on Nacos server availability.","Ensure the server list manager is populated before issuing API calls."],"tags":["network","maintainer-client","retry","server-unavailable","connection-error","http-proxy"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}