[Libguestfs] [PATCH] -o rhv-upload: wait for VM creation task

Richard W.M. Jones rjones at redhat.com
Thu Apr 14 08:11:52 UTC 2022


Sorry, that patch was incomplete.  Here's a better patch.

Rich.

commit d2c018676111de0d5fb895301fb9035c8763f5bb (HEAD -> master)
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Thu Apr 14 09:09:15 2022 +0100

    -o rhv-upload: Use time.monotonic
    
    In Python >= 3.3 we can use a monotonic instead of system clock, which
    ensures the clock will never go backwards during these loops.
    
    Thanks: Nir Soffer

diff --git a/output/rhv-upload-finalize.py b/output/rhv-upload-finalize.py
index 4d1dcfb2f4..1221e766ac 100644
--- a/output/rhv-upload-finalize.py
+++ b/output/rhv-upload-finalize.py
@@ -73,7 +73,7 @@ def finalize_transfer(connection, transfer_id, disk_id):
                         .image_transfers_service()
                         .image_transfer_service(transfer_id))
 
-    start = time.time()
+    start = time.monotonic()
 
     transfer_service.finalize()
 
@@ -125,14 +125,14 @@ def finalize_transfer(connection, transfer_id, disk_id):
                 raise RuntimeError(
                     "transfer %s was paused by system" % (transfer.id,))
 
-            if time.time() > start + timeout:
+            if time.monotonic() > start + timeout:
                 raise RuntimeError(
                     "timed out waiting for transfer %s to finalize, "
                     "transfer is %s"
                     % (transfer.id, transfer.phase))
 
     debug("transfer %s finalized in %.3f seconds"
-          % (transfer_id, time.time() - start))
+          % (transfer_id, time.monotonic() - start))
 
 
 # Parameters are passed in via a JSON doc from the OCaml code.
diff --git a/output/rhv-upload-transfer.py b/output/rhv-upload-transfer.py
index cf4f8807e6..62b842b67b 100644
--- a/output/rhv-upload-transfer.py
+++ b/output/rhv-upload-transfer.py
@@ -128,13 +128,13 @@ def create_disk(connection):
     # can't start if the disk is locked.
 
     disk_service = disks_service.disk_service(disk.id)
-    endt = time.time() + timeout
+    endt = time.monotonic() + timeout
     while True:
         time.sleep(1)
         disk = disk_service.get()
         if disk.status == types.DiskStatus.OK:
             break
-        if time.time() > endt:
+        if time.monotonic() > endt:
             raise RuntimeError(
                 "timed out waiting for disk %s to become unlocked" % disk.id)
 
@@ -176,7 +176,7 @@ def create_transfer(connection, disk, host):
     # If the transfer was paused, we need to cancel it to remove the disk,
     # otherwise the system will remove the disk and transfer shortly after.
 
-    endt = time.time() + timeout
+    endt = time.monotonic() + timeout
     while True:
         time.sleep(1)
         try:
@@ -204,7 +204,7 @@ def create_transfer(connection, disk, host):
                 "unexpected transfer %s phase %s"
                 % (transfer.id, transfer.phase))
 
-        if time.time() > endt:
+        if time.monotonic() > endt:
             transfer_service.cancel()
             raise RuntimeError(
                 "timed out waiting for transfer %s" % transfer.id)


-- 
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