On Thu, Apr 14, 2022 at 11:11 AM Richard W.M. Jones <rjo...@redhat.com> wrote:
>
>
> Sorry, that patch was incomplete.  Here's a better patch.
>
> Rich.
>
> commit d2c018676111de0d5fb895301fb9035c8763f5bb (HEAD -> master)
> Author: Richard W.M. Jones <rjo...@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)

Looks good.

Nir

_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to