Re: [Libguestfs] [PATCH 9/9] filters: Move rdelay/wdelay from file plugin to new delay filter.

Eric Blake
Wed, 17 Jan 2018 22:38:04 -0000

On 01/17/2018 02:53 PM, Richard W.M. Jones wrote:
> Previously the file plugin supported ‘rdelay’ and ‘wdelay’ parameters
> for injecting delays (for testing) into read and write requests.  This
> moves the functionality to a new delay filter so that it can be used
> with any plugin.
> ---

> +/* Write data. */
> +static int
> +delay_pwrite (struct nbdkit_next *next, void *nxdata,
> +              void *handle,
> +              const void *buf, uint32_t count, uint64_t offset)
> +{
> +  write_delay ();
> +  return next->pwrite (nxdata, buf, count, offset);
> +}
> +
> +/* Zero data. */
> +static int
> +delay_zero (struct nbdkit_next *next, void *nxdata,
> +            void *handle, uint32_t count, uint64_t offset, int may_trim)
> +{
> +  write_delay ();
> +  return next->zero (nxdata, count, offset, may_trim);

If next->zero() fails with EOPNOTSUPP, that means we will delay once in
trying the underlying command, and again for each iteration of the
fallback loop as it calls delay_pwrite().  Is that okay, or do we want
to reproduce some fallback logic here and directly call next->pwrite on
EOPNOTSUPP so as to only have a single write delay in that case?


> +++ b/plugins/file/nbdkit-file-plugin.pod
> @@ -31,21 +31,13 @@ This parameter is required.
>
>  =item B<rdelay=E<lt>NNE<gt>ms>
>
> -Delay reads for C<SECS> seconds or C<NN> milliseconds.
> -This is used to simulate a slow or remote server, or to
> -test certain kinds of race conditions in Linux.
> -
> -The default is no delay.
> -
>  =item B<wdelay=SECS>
>
>  =item B<wdelay=E<lt>NNE<gt>ms>
>
> -Delay writes for C<SECS> seconds or C<NN> milliseconds.
> -This is used to simulate a slow or remote server, or to
> -test certain kinds of race conditions in Linux.
> -
> -The default is no delay.
> +These plugin parameters have been moved to the
> +L<nbdkit-delay-filter(1)> filter.  Modify the command line to add
> +I<--filter=delay> in order to use these parameters.

I guess we don't promise back-comptibility on plugin parameters, but at
least you've documented how to fix things (and the testsuite had to
follow that advice).

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org