[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Libguestfs] [PATCH libnbd] info: Write output atomically.



On Tue, Oct 06, 2020 at 01:01:49PM -0500, Eric Blake wrote:
> On 10/6/20 11:54 AM, Richard W.M. Jones wrote:
> > If the server fails, nbdinfo can write partial output before the error
> > message (albeit on different channels).  Here is an example:
> > 
> >   $ nbdkit eval open='echo EIO fail >&2; exit 1' --run 'nbdinfo --json "$uri"'
> >   {
> >   "protocol": "newstyle-fixed",
> >   "TLS": false,
> >   nbdkit: eval[1]: error: /tmp/nbdkitii3pZW/open: fail
> >   nbdkit: eval[1]: error: /tmp/nbdkitii3pZW/open: fail
> >   nbdinfo: nbd_opt_go: server replied with error to opt_go request: No such file or directory
> > 
> > Notice the partial JSON document, and the error message from nbdinfo.
> > 
> > With this commit nbdinfo tries to produce either the complete output
> > or the error message.
> > ---
> >  info/Makefile.am           |   1 +
> >  info/info-atomic-output.sh |  32 ++++++
> >  info/nbdinfo.c             | 194 ++++++++++++++++++++++---------------
> >  3 files changed, 147 insertions(+), 80 deletions(-)
> 
> ACK. Mostly mechanical, and memstreams make this nice.
> 
> 
> > +++ b/info/info-atomic-output.sh
> > @@ -0,0 +1,32 @@
> 
> > +. ../tests/functions.sh
> > +
> > +set -e
> > +set -x
> > +
> > +requires nbdkit --version
> > +requires nbdkit eval --version
> 
> You could simplify this: if the second line passes, the first line is
> implied, therefore, only the second is needed.
> 
> > +
> > +out=info-atomic-output.out
> > +cleanup_fn rm -f $out
> > +
> > +nbdkit -U - eval open='echo EIO fail >&2; exit 1' \
> > +       --run '$VG nbdinfo --size "nbd+unix:///?socket=$unixsocket"' > $out ||:
> 
> nbdkit added $uri in 1.14, and the eval plugin in 1.18.  You could
> shorten this to --run '$VG nbdino --size "$uri"'.  (We still use the
> longhand elsewhere because of older RHEL having older nbdkit, but this
> will already be skipped on those setups).

Yes, good point.  For the record RHEL 7 has nbdkit 1.8 (forever now),
but of course no eval plugin.

Thanks,

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]