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(a)redhat.com> wrote:
 
 > From: Daniel Erez <derez(a)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(a)redhat.com>
 > Tested-by: Ilanit Stein <istein(a)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