]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Add infrastructure for statistics of a backup job
authorPeter Krempa <pkrempa@redhat.com>
Fri, 22 Nov 2019 16:30:05 +0000 (17:30 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 10 Dec 2019 11:41:57 +0000 (12:41 +0100)
Introduce QEMU_DOMAIN_JOB_STATS_TYPE_BACKUP and the convertors and other
plumbing to be able to report statistics for the backup job.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_driver.c

index cff5c680a47690b0de2d7455c404c1f1e1af97ca..05268b8d12c8f31ca01e278a1349b43b198fa462 100644 (file)
@@ -519,6 +519,12 @@ qemuDomainJobInfoToInfo(qemuDomainJobInfoPtr jobInfo,
         info->memRemaining = info->memTotal - info->memProcessed;
         break;
 
+    case QEMU_DOMAIN_JOB_STATS_TYPE_BACKUP:
+        info->fileTotal = jobInfo->stats.backup.total;
+        info->fileProcessed = jobInfo->stats.backup.transferred;
+        info->fileRemaining = info->fileTotal - info->fileProcessed;
+        break;
+
     case QEMU_DOMAIN_JOB_STATS_TYPE_NONE:
         break;
     }
@@ -751,6 +757,59 @@ qemuDomainDumpJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
 }
 
 
+static int
+qemuDomainBackupJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
+                                int *type,
+                                virTypedParameterPtr *params,
+                                int *nparams)
+{
+    qemuDomainBackupStats *stats = &jobInfo->stats.backup;
+    g_autoptr(virTypedParamList) par = g_new0(virTypedParamList, 1);
+
+    if (virTypedParamListAddInt(par, jobInfo->operation,
+                                VIR_DOMAIN_JOB_OPERATION) < 0)
+        return -1;
+
+    if (virTypedParamListAddULLong(par, jobInfo->timeElapsed,
+                                   VIR_DOMAIN_JOB_TIME_ELAPSED) < 0)
+        return -1;
+
+    if (stats->transferred > 0 || stats->total > 0) {
+        if (virTypedParamListAddULLong(par, stats->total,
+                                       VIR_DOMAIN_JOB_DISK_TOTAL) < 0)
+            return -1;
+
+        if (virTypedParamListAddULLong(par, stats->transferred,
+                                       VIR_DOMAIN_JOB_DISK_PROCESSED) < 0)
+            return -1;
+
+        if (virTypedParamListAddULLong(par, stats->total - stats->transferred,
+                                       VIR_DOMAIN_JOB_DISK_REMAINING) < 0)
+            return -1;
+    }
+
+    if (stats->tmp_used > 0 || stats->tmp_total > 0) {
+        if (virTypedParamListAddULLong(par, stats->tmp_used,
+                                       VIR_DOMAIN_JOB_DISK_TEMP_USED) < 0)
+            return -1;
+
+        if (virTypedParamListAddULLong(par, stats->tmp_total,
+                                       VIR_DOMAIN_JOB_DISK_TEMP_TOTAL) < 0)
+            return -1;
+    }
+
+    if (jobInfo->status != QEMU_DOMAIN_JOB_STATUS_ACTIVE &&
+        virTypedParamListAddBoolean(par,
+                                    jobInfo->status == QEMU_DOMAIN_JOB_STATUS_COMPLETED,
+                                    VIR_DOMAIN_JOB_SUCCESS) < 0)
+        return -1;
+
+    *nparams = virTypedParamListStealParams(par, params);
+    *type = qemuDomainJobStatusToType(jobInfo->status);
+    return 0;
+}
+
+
 int
 qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
                           int *type,
@@ -765,6 +824,9 @@ qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
     case QEMU_DOMAIN_JOB_STATS_TYPE_MEMDUMP:
         return qemuDomainDumpJobInfoToParams(jobInfo, type, params, nparams);
 
+    case QEMU_DOMAIN_JOB_STATS_TYPE_BACKUP:
+        return qemuDomainBackupJobInfoToParams(jobInfo, type, params, nparams);
+
     case QEMU_DOMAIN_JOB_STATS_TYPE_NONE:
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("invalid job statistics type"));
index d676570d4a12b7ae4f5637578fef924fc5d67844..a7ee6a9c6ed5a84b8fb723f7352a0cf8eb0198b0 100644 (file)
@@ -126,6 +126,7 @@ typedef enum {
     QEMU_DOMAIN_JOB_STATS_TYPE_MIGRATION,
     QEMU_DOMAIN_JOB_STATS_TYPE_SAVEDUMP,
     QEMU_DOMAIN_JOB_STATS_TYPE_MEMDUMP,
+    QEMU_DOMAIN_JOB_STATS_TYPE_BACKUP,
 } qemuDomainJobStatsType;
 
 
@@ -136,6 +137,14 @@ struct _qemuDomainMirrorStats {
     unsigned long long total;
 };
 
+typedef struct _qemuDomainBackupStats qemuDomainBackupStats;
+struct _qemuDomainBackupStats {
+    unsigned long long transferred;
+    unsigned long long total;
+    unsigned long long tmp_used;
+    unsigned long long tmp_total;
+};
+
 typedef struct _qemuDomainJobInfo qemuDomainJobInfo;
 typedef qemuDomainJobInfo *qemuDomainJobInfoPtr;
 struct _qemuDomainJobInfo {
@@ -160,6 +169,7 @@ struct _qemuDomainJobInfo {
     union {
         qemuMonitorMigrationStats mig;
         qemuMonitorDumpStats dump;
+        qemuDomainBackupStats backup;
     } stats;
     qemuDomainMirrorStats mirrorStats;
 };
index 52c99dd2289af08e0b19ab8e8d74b363dc44a6d9..e3872d5c3bccdd40fc6764d77e93c2784a35a5d2 100644 (file)
@@ -13858,6 +13858,10 @@ qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver,
             goto cleanup;
         break;
 
+    case QEMU_DOMAIN_JOB_STATS_TYPE_BACKUP:
+        /* TODO implement for backup job */
+        break;
+
     case QEMU_DOMAIN_JOB_STATS_TYPE_NONE:
         break;
     }