Displaying 20 results from an estimated 20 matches for "do_retry".
2019 Oct 01
0
[nbdkit PATCH 3/6] retry: Check next_ops->can_FOO on retry
...*next, void *nxdata, int readonly)
}
h->readonly = readonly;
+ h->reopens = 0;
return h;
}
@@ -132,6 +134,7 @@ retry_close (void *handle)
{
struct retry_handle *h = handle;
+ nbdkit_debug ("reopens needed: %u", h->reopens);
free (h);
}
@@ -179,6 +182,7 @@ do_retry (struct retry_handle *h,
data->delay *= 2;
/* Reopen the connection. */
+ h->reopens++;
if (next_ops->reopen (nxdata, h->readonly || force_readonly) == -1) {
/* If the reopen fails we treat it the same way as a command
* failing.
@@ -218,7 +222,16 @@ retry_pwrite...
2023 Jan 27
2
[nbdkit PATCH 1/2] retry: Add in retry support during .open
...;, h->reopens);
- free (h->exportname);
- free (h);
-}
-
/* This function encapsulates the common retry logic used across all
* data commands. If it returns true then the data command will retry
* the operation. ???struct retry_data??? is stack data saved between
@@ -247,6 +208,63 @@ do_retry (struct retry_handle *h, struct retry_data *data,
return true;
}
+static void *
+retry_open (nbdkit_next_open *next, nbdkit_context *nxdata,
+ int readonly, const char *exportname, int is_tls)
+{
+ struct retry_handle *h;
+ struct retry_data data = {0};
+
+ h = malloc (sizeof *h)...
2019 Sep 19
0
[PATCH nbdkit v3 2/3] Add new retry filter.
...struct retry_data’ is stack data saved between
+ * retries within the same command, and is initialized to zero.
+ */
+struct retry_data {
+ int retry; /* Retry number (0 = first time). */
+ int delay; /* Seconds to wait before retrying. */
+};
+
+static bool
+do_retry (struct retry_handle *h,
+ struct retry_data *data,
+ struct nbdkit_next_ops *next_ops, void *nxdata,
+ int *err)
+{
+ /* If it's the first retry, initialize the other fields in *data. */
+ if (data->retry == 0)
+ data->delay = initial_delay;
+
+ again:
+...
2019 Oct 04
1
Re: [nbdkit PATCH 2/5] retry: Check size before transactions
...a,
> + uint32_t count, uint64_t offset, bool is_write, int *err)
> +{
> + if ((int64_t) offset + count > next_ops->get_size (nxdata)) {
> + *err = is_write ? ENOSPC : EIO;
> + return false;
> + }
> + return true;
> +}
> +
> static bool
> do_retry (struct retry_handle *h,
> struct retry_data *data,
> @@ -204,6 +215,8 @@ retry_pread (struct nbdkit_next_ops *next_ops, void *nxdata,
> int r;
>
> again:
> + if (! valid_range (next_ops, nxdata, count, offset, false, err))
> + return -1;
> r = next_o...
2019 Sep 19
0
[PATCH nbdkit 2/2] Add new retry filter.
...struct retry_data’ is stack data saved between
+ * retries within the same command, and is initialized to zero.
+ */
+struct retry_data {
+ int retry; /* Retry number (0 = first time). */
+ int delay; /* Seconds to wait before retrying. */
+};
+
+static bool
+do_retry (struct retry_handle *h,
+ struct retry_data *data,
+ struct nbdkit_next_ops *next_ops, void *nxdata,
+ int *err)
+{
+ /* If it's the first retry, initialize the other fields in *data. */
+ if (data->retry == 0)
+ data->delay = initial_delay;
+
+ /* Log th...
2019 Oct 01
9
[nbdkit PATCH v2 0/6] Improve retry filter
Includes a rework of the previously posted patch for --run
improvements (mostly with improved comments and commit message; I
decided that waiting for the captive nbdkit to exit was overkill), and
four new patches. The tests are intentionally separate, to allow
rearranging the order of the series to see the failures being fixed.
Eric Blake (6):
server: Propagate unexpected nbdkit failure with
2023 Jan 28
1
[nbdkit PATCH 1/2] retry: Add in retry support during .open
...xportname);
> - free (h);
> -}
> -
> /* This function encapsulates the common retry logic used across all
> * data commands. If it returns true then the data command will retry
> * the operation. ???struct retry_data??? is stack data saved between
> @@ -247,6 +208,63 @@ do_retry (struct retry_handle *h, struct retry_data *data,
> return true;
> }
>
> +static void *
> +retry_open (nbdkit_next_open *next, nbdkit_context *nxdata,
> + int readonly, const char *exportname, int is_tls)
> +{
> + struct retry_handle *h;
> + struct retry...
2019 Oct 04
0
[nbdkit PATCH 2/5] retry: Check size before transactions
...id_range (struct nbdkit_next_ops *next_ops, void *nxdata,
+ uint32_t count, uint64_t offset, bool is_write, int *err)
+{
+ if ((int64_t) offset + count > next_ops->get_size (nxdata)) {
+ *err = is_write ? ENOSPC : EIO;
+ return false;
+ }
+ return true;
+}
+
static bool
do_retry (struct retry_handle *h,
struct retry_data *data,
@@ -204,6 +215,8 @@ retry_pread (struct nbdkit_next_ops *next_ops, void *nxdata,
int r;
again:
+ if (! valid_range (next_ops, nxdata, count, offset, false, err))
+ return -1;
r = next_ops->pread (nxdata, buf, count, offset...
2023 Jan 27
2
[nbdkit PATCH 0/2] retry: add support for retrying .open
In https://bugzilla.redhat.com/show_bug.cgi?id=1841820, it was pointed
out that the retry filter not retrying .open means that an ssh
connection (such as in a vmx+ssh v2v conversion) fails when the ssh
connection itself cannot be retried. A year ago, this was an inherent
limitation of our retry implementation; but in the meantime, my work
to allow filters to open independent backends has made it
2019 Sep 19
6
[PATCH nbdkit 0/2] Add new retry filter.
This is a retry filter implementation as outlined here:
https://www.redhat.com/archives/libguestfs/2019-September/msg00167.html
It is only lightly tested. One way to test it is to try an SSH copy
(see the commit message for patch 2/2), and in the middle of the copy
kill the per-connection sshd on the remote machine. You will see that
the copy recovers after a few seconds. Add the nbdkit -v
2019 Sep 19
7
[PATCH nbdkit v2 0/4] Add new retry filter.
v1 was here:
https://www.redhat.com/archives/libguestfs/2019-September/msg00199.html
v2:
- Adds a fairly simple yet comprehensive test using sh plugin.
- Rebase and retest.
Patch 1 is a misc patch not really related to the series.
Rich.
2019 Sep 19
7
[PATCH nbdkit v3 0/3] Add new retry filter.
v2 was here:
https://www.redhat.com/archives/libguestfs/2019-September/msg00221.html
I think this is more like "the one". It handles reopen failing
correctly, and there is a second test for that. I also ran my sshd
tests locally and it worked in all scenarios I could think up (except
of course sshd not being available at the start, but we want that to
fail).
Rich.
2020 Mar 31
2
[nbdkit PATCH] retry: Tweak error message
...ugh the rest of the image even after the first error.
filters/retry/retry.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/filters/retry/retry.c b/filters/retry/retry.c
index 11e5313b..db91d7ca 100644
--- a/filters/retry/retry.c
+++ b/filters/retry/retry.c
@@ -173,7 +173,7 @@ do_retry (struct retry_handle *h,
again:
/* Log the original errno since it will be lost when we retry. */
- nbdkit_debug ("retry %d: original errno = %d", data->retry+1, *err);
+ nbdkit_debug ("retry attempt %d: original errno = %d", data->retry, *err);
if (data->re...
2020 Apr 01
2
Re: [nbdkit PATCH] retry: Tweak error message
On 4/1/20 5:12 AM, Richard W.M. Jones wrote:
> On Tue, Mar 31, 2020 at 04:00:22PM -0500, Eric Blake wrote:
>> The retry filter defaults to 5 retries, but when run with verbose
>> details produces some confusing output:
>>
>> $ rm -f /tmp/inject; (sleep 5s; touch /tmp/inject)& ./nbdkit -f -v -U - \
>> null 1G --filter=retry --filter=noextents --filter=error
2019 Oct 03
7
[nbdkit PATCH 0/4] More work with retry safety
I'm still working on another set of patches to have reopen call
.finalize/.prepare (so that another filter can safely appear between
retry and the plugin), but for tonight, these are the patches I think
are ready to go.
Eric Blake (4):
retry: Handle can_fua and can_fast_zero changes
tests: Test retry with different fua/fast-zero flags
server: Close backends if a filter's .open fails
2020 Apr 01
0
Re: [nbdkit PATCH] retry: Tweak error message
...t error.
>
> filters/retry/retry.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/filters/retry/retry.c b/filters/retry/retry.c
> index 11e5313b..db91d7ca 100644
> --- a/filters/retry/retry.c
> +++ b/filters/retry/retry.c
> @@ -173,7 +173,7 @@ do_retry (struct retry_handle *h,
>
> again:
> /* Log the original errno since it will be lost when we retry. */
> - nbdkit_debug ("retry %d: original errno = %d", data->retry+1, *err);
> + nbdkit_debug ("retry attempt %d: original errno = %d", data->retry, *...
2020 Apr 02
0
Re: [nbdkit PATCH] retry: Tweak error message
...t;
> initial try fails:
> retry 1: original error
> delay
> retry 1 fails:
> retry 2: original error
> delay
> retry 2 fails:
> could not recover after 2 retries
>
> where we lost the log of the errno of retry 2.
It's not printed, but also it's not lost. do_retry will immediately
return false, causing the called function to return this final errno
(hopefully back to the client). The reason for printing the "original
errno" was because those intermediate errnos would otherwise be lost.
Attached is my suggested patch - it's a small evolution o...
2019 Oct 04
6
[nbdkit PATCH 0/5] Another round of retry fixes
I still don't have .prepare/.finalize working cleanly across reopen,
but did find a nasty bug where a botched assertion means we failed to
notice reads beyond EOF in both the xz and retry filter.
Refactoring backend.c will make .finalize work easier.
Eric Blake (5):
xz: Avoid reading beyond EOF
retry: Check size before transactions
tests: Test retry when get_size values change
2019 Oct 07
6
[nbdkit PATCH 0/5] More retry fixes
I think this is my last round of patches for issues I identified with
the retry filter. With this in place, it should be safe to interject
another filter in between retry and the plugin.
Eric Blake (5):
retry: Don't call into closed plugin
tests: Refactor test-retry-reopen-fail.sh
tests: Enhance retry test to cover failed reopen
server: Move prepare/finalize/close recursion to
2020 Jul 21
4
[PATCH nbdkit] server: Pass the export name through filter .open calls.
...n *next, void *nxdata, int readonly)
}
h->readonly = readonly;
+ h->exportname = strdup (exportname);
+ if (h->exportname == NULL) {
+ nbdkit_error ("strdup: %m");
+ free (h);
+ return NULL;
+ }
h->reopens = 0;
h->open = true;
@@ -198,7 +206,8 @@ do_retry (struct retry_handle *h,
/* Reopen the connection. */
h->reopens++;
- if (next_ops->reopen (nxdata, h->readonly || force_readonly) == -1) {
+ if (next_ops->reopen (nxdata,
+ h->readonly || force_readonly, h->exportname) == -1) {
/* If the reop...