[Libguestfs] [PATCH] v2v: rhv-upload-plugin - improve wait logic after finalize (RHBZ#1680361)

Richard W.M. Jones rjones at redhat.com
Mon Sep 9 20:48:19 UTC 2019


On Mon, Sep 09, 2019 at 10:37:07PM +0300, Nir Soffer wrote:
> On Mon, Sep 9, 2019 at 7:02 PM Richard W.M. Jones <rjones at redhat.com> wrote:
> 
> > From: Daniel Erez <derez at redhat.com>
> >
> > After invoking transfer_service.finalize, check operation status by
> > examining DiskStatus.  This is done instead of failing after a
> > predefined timeout regardless the status.
> >
> > Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1680361
> > Signed-off-by: Richard W.M. Jones <rjones at redhat.com>
> > Tested-by: Ilanit Stein <istein at redhat.com>
> > ---
> >  v2v/rhv-upload-plugin.py | 19 +++++++++++++------
> >  1 file changed, 13 insertions(+), 6 deletions(-)
> >
> > diff --git a/v2v/rhv-upload-plugin.py b/v2v/rhv-upload-plugin.py
> > index 9e71021..8f13ce1 100644
> > --- a/v2v/rhv-upload-plugin.py
> > +++ b/v2v/rhv-upload-plugin.py
> > @@ -549,16 +549,23 @@ def close(h):
> >          # waiting for the transfer object to cease to exist, which
> >          # falls through to the exception case and then we can
> >          # continue.
> > -        endt = time.time() + timeout
> > +        disk_id = disk.id
> > +        start = time.time()
> >          try:
> >              while True:
> >                  time.sleep(1)
> > -                tmp = transfer_service.get()
> > -                if time.time() > endt:
> > -                    raise RuntimeError("timed out waiting for transfer "
> > -                                       "to finalize")
> > +                disk_service = h['disk_service']
> > +                disk = disk_service.get()
> > +                if disk.status == types.DiskStatus.LOCKED:
> > +                    if time.time() > start + timeout:
> > +                        raise RuntimeError("timed out waiting for
> > transfer "
> > +                                           "to finalize")
> > +                    continue
> > +                if disk.status == types.DiskStatus.OK:
> > +                    debug("finalized after %s seconds" % (time.time() -
> > start))
> > +                    break
> >          except sdk.NotFoundError:
> > -            pass
> > +            raise RuntimeError("transfer failed: disk %s not found" %
> > disk_id)
> >
> >          # Write the disk ID file.  Only do this on successful completion.
> >          with builtin_open(params['diskid_file'], 'w') as fp:
> > --
> > 1.8.3.1
> >
> 
> Looks good.

Yup, I've also checked this on Python 3 now - previously it
was only tested against Python 2 on RHEL 7.

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




More information about the Libguestfs mailing list