lib/repo-pull: Support retrying requests on transient network errors
Allow network requests to be re-queued if they failed with a transient error, such as a socket timeout. Retry each request up to a limit (default: 5), and only then fail the entire pull and propagate the error to the caller. Add a new ostree_repo_pull_with_options() option, n-network-retries, to control the number of retries (including setting it back to the old default of 0, if the caller wants). Currently, retries are not supported for FetchDeltaSuperData requests, as they are not queued. Once they are queued, adding support for retries should be trivial. A FIXME comment has been left for this. Signed-off-by: Philip Withnall <withnall@endlessm.com> Closes: #1594 Approved by: jlebon
This commit is contained in:
1 parent
f31087137e
commit
938055392f
5 files changed
+202
-38
No files matched your search
@@ -50,6 +50,7 @@ struct OstreeMetalink
|
||||
OstreeFetcher *fetcher;
|
||||
char *requested_file;
|
||||
guint64 max_size;
|
||||
guint n_network_retries;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (OstreeMetalink, _ostree_metalink, G_TYPE_OBJECT)
|
||||
@@ -401,7 +402,8 @@ OstreeMetalink *
|
||||
_ostree_metalink_new (OstreeFetcher *fetcher,
|
||||
const char *requested_file,
|
||||
guint64 max_size,
|
||||
OstreeFetcherURI *uri)
|
||||
OstreeFetcherURI *uri,
|
||||
guint n_network_retries)
|
||||
{
|
||||
OstreeMetalink *self = (OstreeMetalink*)g_object_new (OSTREE_TYPE_METALINK, NULL);
|
||||
|
||||
@@ -409,6 +411,7 @@ _ostree_metalink_new (OstreeFetcher *fetcher,
|
||||
self->requested_file = g_strdup (requested_file);
|
||||
self->max_size = max_size;
|
||||
self->uri = _ostree_fetcher_uri_clone (uri);
|
||||
self->n_network_retries = n_network_retries;
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -432,7 +435,9 @@ try_one_url (OstreeMetalinkRequest *self,
|
||||
gssize n_bytes;
|
||||
|
||||
if (!_ostree_fetcher_request_uri_to_membuf (self->metalink->fetcher,
|
||||
uri, 0, &bytes,
|
||||
uri, 0,
|
||||
self->metalink->n_network_retries,
|
||||
&bytes,
|
||||
self->metalink->max_size,
|
||||
self->cancellable,
|
||||
error))
|
||||
@@ -613,6 +618,7 @@ _ostree_metalink_request_sync (OstreeMetalink *self,
|
||||
request.parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, &request, NULL);
|
||||
|
||||
if (!_ostree_fetcher_request_uri_to_membuf (self->fetcher, self->uri, 0,
|
||||
self->n_network_retries,
|
||||
&contents, self->max_size,
|
||||
cancellable, error))
|
||||
goto out;
|
||||
|
||||
Reference in new issue
Block a user