mirror of
https://github.com/facebook/sapling.git
synced 2024-10-05 14:28:17 +03:00
lfs: expand retries to match edenapi
Summary: LFS and edenapi have different retry logic. Right now LFS doesn't retry for TLS errors or for a number of Http errors. Let's update LFS to match edenapi's more generous retry philosophy. This should address TLS RecvError's I was seeing during large clones. Differential Revision: D34290595 fbshipit-source-id: bcd071eee9cd2496e03380d686fcda4947f02a19
This commit is contained in:
parent
7b0df5a3e2
commit
fef979f959
@ -52,6 +52,8 @@ use http_client::HttpVersion;
|
||||
use http_client::Method;
|
||||
use http_client::MinTransferSpeed;
|
||||
use http_client::Request;
|
||||
use http_client::TlsError;
|
||||
use http_client::TlsErrorKind;
|
||||
use indexedlog::log::IndexOutput;
|
||||
use indexedlog::rotate;
|
||||
use indexedlog::DefaultOpenOptions;
|
||||
@ -2005,6 +2007,10 @@ impl RetryStrategy {
|
||||
return Self::RetryThrottled;
|
||||
}
|
||||
|
||||
if status == StatusCode::REQUEST_TIMEOUT {
|
||||
return Self::RetryError;
|
||||
}
|
||||
|
||||
if status.is_server_error() {
|
||||
return Self::RetryError;
|
||||
}
|
||||
@ -2013,17 +2019,17 @@ impl RetryStrategy {
|
||||
}
|
||||
|
||||
pub fn from_http_error(error: &HttpClientError) -> Self {
|
||||
if let HttpClientError::Curl(ref e) = error {
|
||||
if e.is_couldnt_resolve_host()
|
||||
|| e.is_operation_timedout()
|
||||
|| e.is_send_error()
|
||||
|| e.is_recv_error()
|
||||
{
|
||||
return Self::RetryError;
|
||||
}
|
||||
}
|
||||
use HttpClientError::*;
|
||||
let retry = match error {
|
||||
Tls(TlsError { kind, .. }) => kind == &TlsErrorKind::RecvError,
|
||||
_ => true,
|
||||
};
|
||||
|
||||
Self::NoRetry
|
||||
if retry {
|
||||
Self::RetryError
|
||||
} else {
|
||||
Self::NoRetry
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user