[libvirt] [PATCH v3 REBASE 07/16] qemu: simplify getting completed job stats

Nikolay Shirokovskiy posted 16 patches 7 years, 8 months ago
There is a newer version of this series
[libvirt] [PATCH v3 REBASE 07/16] qemu: simplify getting completed job stats
Posted by Nikolay Shirokovskiy 7 years, 8 months ago
---
 src/qemu/qemu_driver.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index c62d416..b8a4df7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -12905,12 +12905,18 @@ qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver,
                               qemuDomainJobInfoPtr jobInfo)
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
-    qemuDomainJobInfoPtr info;
     bool fetch = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
     int ret = -1;
 
-    if (completed)
-        fetch = false;
+    if (completed) {
+        if (priv->job.current || !priv->job.completed) {
+            jobInfo->status = QEMU_DOMAIN_JOB_STATUS_NONE;
+            return 0;
+        }
+
+        *jobInfo = *priv->job.completed;
+        return 0;
+    }
 
     /* Do not ask QEMU if migration is not even running yet  */
     if (!priv->job.current || !priv->job.current->stats.status)
@@ -12927,26 +12933,18 @@ qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver,
             return -1;
     }
 
-    if (!completed &&
-        !virDomainObjIsActive(vm)) {
+    if (!virDomainObjIsActive(vm)) {
         virReportError(VIR_ERR_OPERATION_INVALID, "%s",
                        _("domain is not running"));
         goto cleanup;
     }
 
-    if (completed && priv->job.current)
-        info = NULL;
-    else if (completed)
-        info = priv->job.completed;
-    else
-        info = priv->job.current;
-
-    if (!info) {
+    if (!priv->job.current) {
         jobInfo->status = QEMU_DOMAIN_JOB_STATUS_NONE;
         ret = 0;
         goto cleanup;
     }
-    *jobInfo = *info;
+    *jobInfo = *priv->job.current;
 
     if (jobInfo->status == QEMU_DOMAIN_JOB_STATUS_ACTIVE ||
         jobInfo->status == QEMU_DOMAIN_JOB_STATUS_POSTCOPY) {
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 REBASE 07/16] qemu: simplify getting completed job stats
Posted by Jiri Denemark 7 years, 8 months ago
On Thu, Aug 24, 2017 at 09:56:44 +0300, Nikolay Shirokovskiy wrote:
> ---
>  src/qemu/qemu_driver.c | 26 ++++++++++++--------------
>  1 file changed, 12 insertions(+), 14 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index c62d416..b8a4df7 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -12905,12 +12905,18 @@ qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver,
>                                qemuDomainJobInfoPtr jobInfo)
>  {
>      qemuDomainObjPrivatePtr priv = vm->privateData;
> -    qemuDomainJobInfoPtr info;
>      bool fetch = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
>      int ret = -1;
>  
> -    if (completed)
> -        fetch = false;
> +    if (completed) {
> +        if (priv->job.current || !priv->job.completed) {
> +            jobInfo->status = QEMU_DOMAIN_JOB_STATUS_NONE;
> +            return 0;
> +        }
> +
> +        *jobInfo = *priv->job.completed;
> +        return 0;

I think keeping just one return would make the code a bit easier to
read:

          if (priv->job.current || !priv->job.completed)
              jobInfo->status = QEMU_DOMAIN_JOB_STATUS_NONE;
          else
              *jobInfo = *priv->job.completed;

          return 0;

Or even

          if (priv->job.completed && !priv->job.current)
              *jobInfo = *priv->job.completed;
          else
              jobInfo->status = QEMU_DOMAIN_JOB_STATUS_NONE;

          return 0;

> +    }
>  
>      /* Do not ask QEMU if migration is not even running yet  */
>      if (!priv->job.current || !priv->job.current->stats.status)
...

Jirka

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list