in src/main/java/com/aliyun/oss/common/comm/DefaultServiceClient.java [191:226]
public boolean shouldRetry(Exception ex, RequestMessage request, ResponseMessage response, int retries) {
if (ex instanceof ClientException) {
String errorCode = ((ClientException) ex).getErrorCode();
if (errorCode.equals(ClientErrorCode.CONNECTION_TIMEOUT)
|| errorCode.equals(ClientErrorCode.SOCKET_TIMEOUT)
|| errorCode.equals(ClientErrorCode.CONNECTION_REFUSED)
|| errorCode.equals(ClientErrorCode.UNKNOWN_HOST)
|| errorCode.equals(ClientErrorCode.SOCKET_EXCEPTION)
|| errorCode.equals(ClientErrorCode.SSL_EXCEPTION)) {
return true;
}
// Don't retry when request input stream is non-repeatable
if (errorCode.equals(ClientErrorCode.NONREPEATABLE_REQUEST)) {
return false;
}
}
if (ex instanceof OSSException) {
String errorCode = ((OSSException) ex).getErrorCode();
// No need retry for invalid responses
if (OSSErrorCode.INVALID_RESPONSE.equals(errorCode)) {
return false;
}
}
if (response != null) {
int statusCode = response.getStatusCode();
if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR || statusCode == HttpStatus.SC_BAD_GATEWAY ||
statusCode == HttpStatus.SC_SERVICE_UNAVAILABLE) {
return true;
}
}
return false;
}