From nobody Thu May 15 23:12:16 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1504249656384969.7311696485559; Fri, 1 Sep 2017 00:07:36 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1F1E7110E; Fri, 1 Sep 2017 07:07:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F14287901A; Fri, 1 Sep 2017 07:07:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BD30D3FAD0; Fri, 1 Sep 2017 07:07:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v816nr6V018610 for ; Fri, 1 Sep 2017 02:49:53 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7F9196F948; Fri, 1 Sep 2017 06:49:53 +0000 (UTC) Received: from mx1.redhat.com (ext-mx08.extmail.prod.ext.phx2.redhat.com [10.5.110.32]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 782F66F94F for ; Fri, 1 Sep 2017 06:49:52 +0000 (UTC) Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CB208C058EBE for ; Fri, 1 Sep 2017 06:49:49 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id v816nlJu010656 for ; Fri, 1 Sep 2017 09:49:47 +0300 (MSK) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1F1E7110E Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=virtuozzo.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 1F1E7110E DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CB208C058EBE Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=virtuozzo.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=nshirokovskiy@virtuozzo.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com CB208C058EBE From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Fri, 1 Sep 2017 09:49:20 +0300 Message-Id: <1504248571-571673-3-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1504248571-571673-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1504248571-571673-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 01 Sep 2017 06:49:50 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 01 Sep 2017 06:49:50 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.78 on 10.5.110.32 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v4 02/13] qemu: introduce qemu domain job status X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Fri, 01 Sep 2017 07:07:34 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This patch simply switches code from using VIR_DOMAIN_JOB_* to introduced QEMU_DOMAIN_JOB_STATUS_*. Later this gives us freedom to introduce states for postcopy and mirroring phases. --- src/qemu/qemu_domain.c | 27 ++++++++++++++++++++-- src/qemu/qemu_domain.h | 10 +++++++- src/qemu/qemu_driver.c | 10 ++++---- src/qemu/qemu_migration.c | 50 +++++++++++++++++++-----------------= ---- src/qemu/qemu_migration_cookie.c | 2 +- src/qemu/qemu_process.c | 2 +- 6 files changed, 65 insertions(+), 36 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8b3bb58..029e390 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -412,11 +412,34 @@ qemuDomainJobInfoUpdateDowntime(qemuDomainJobInfoPtr = jobInfo) return 0; } =20 +static virDomainJobType +qemuDomainJobStatusToType(qemuDomainJobStatus status) +{ + switch (status) { + case QEMU_DOMAIN_JOB_STATUS_NONE: + break; + + case QEMU_DOMAIN_JOB_STATUS_ACTIVE: + return VIR_DOMAIN_JOB_UNBOUNDED; + + case QEMU_DOMAIN_JOB_STATUS_COMPLETED: + return VIR_DOMAIN_JOB_COMPLETED; + + case QEMU_DOMAIN_JOB_STATUS_FAILED: + return VIR_DOMAIN_JOB_FAILED; + + case QEMU_DOMAIN_JOB_STATUS_CANCELED: + return VIR_DOMAIN_JOB_CANCELLED; + } + + return VIR_DOMAIN_JOB_NONE; +} + int qemuDomainJobInfoToInfo(qemuDomainJobInfoPtr jobInfo, virDomainJobInfoPtr info) { - info->type =3D jobInfo->type; + info->type =3D qemuDomainJobStatusToType(jobInfo->status); info->timeElapsed =3D jobInfo->timeElapsed; =20 info->memTotal =3D jobInfo->stats.ram_total; @@ -576,7 +599,7 @@ qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo, stats->cpu_throttle_percentage) < 0) goto error; =20 - *type =3D jobInfo->type; + *type =3D qemuDomainJobStatusToType(jobInfo->status); *params =3D par; *nparams =3D npar; return 0; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 01fb703..c309080 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -99,10 +99,18 @@ typedef enum { } qemuDomainAsyncJob; VIR_ENUM_DECL(qemuDomainAsyncJob) =20 +typedef enum { + QEMU_DOMAIN_JOB_STATUS_NONE =3D 0, + QEMU_DOMAIN_JOB_STATUS_ACTIVE, + QEMU_DOMAIN_JOB_STATUS_COMPLETED, + QEMU_DOMAIN_JOB_STATUS_FAILED, + QEMU_DOMAIN_JOB_STATUS_CANCELED, +} qemuDomainJobStatus; + typedef struct _qemuDomainJobInfo qemuDomainJobInfo; typedef qemuDomainJobInfo *qemuDomainJobInfoPtr; struct _qemuDomainJobInfo { - virDomainJobType type; + qemuDomainJobStatus status; virDomainJobOperation operation; unsigned long long started; /* When the async job started */ unsigned long long stopped; /* When the domain's CPUs were stopped */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5ee0692..7b79719 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3310,7 +3310,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDo= mainPtr dom, goto endjob; } =20 - priv->job.current->type =3D VIR_DOMAIN_JOB_UNBOUNDED; + priv->job.current->status =3D QEMU_DOMAIN_JOB_STATUS_ACTIVE; =20 /* Pause */ if (virDomainObjGetState(vm, NULL) =3D=3D VIR_DOMAIN_RUNNING) { @@ -13024,13 +13024,13 @@ qemuDomainGetJobStatsInternal(virQEMUDriverPtr dr= iver, info =3D priv->job.current; =20 if (!info) { - jobInfo->type =3D VIR_DOMAIN_JOB_NONE; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_NONE; ret =3D 0; goto cleanup; } *jobInfo =3D *info; =20 - if (jobInfo->type =3D=3D VIR_DOMAIN_JOB_UNBOUNDED) { + if (jobInfo->status =3D=3D QEMU_DOMAIN_JOB_STATUS_ACTIVE) { if (fetch) ret =3D qemuMigrationFetchJobStatus(driver, vm, QEMU_ASYNC_JOB= _NONE, jobInfo); @@ -13065,7 +13065,7 @@ qemuDomainGetJobInfo(virDomainPtr dom, if (qemuDomainGetJobStatsInternal(driver, vm, false, &jobInfo) < 0) goto cleanup; =20 - if (jobInfo.type =3D=3D VIR_DOMAIN_JOB_NONE) { + if (jobInfo.status =3D=3D QEMU_DOMAIN_JOB_STATUS_NONE) { memset(info, 0, sizeof(*info)); info->type =3D VIR_DOMAIN_JOB_NONE; ret =3D 0; @@ -13106,7 +13106,7 @@ qemuDomainGetJobStats(virDomainPtr dom, if (qemuDomainGetJobStatsInternal(driver, vm, completed, &jobInfo) < 0) goto cleanup; =20 - if (jobInfo.type =3D=3D VIR_DOMAIN_JOB_NONE) { + if (jobInfo.status =3D=3D QEMU_DOMAIN_JOB_STATUS_NONE) { *type =3D VIR_DOMAIN_JOB_NONE; *params =3D NULL; *nparams =3D 0; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index f0f6122..83d2c61 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -966,7 +966,7 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver, goto cleanup; =20 if (priv->job.abortJob) { - priv->job.current->type =3D VIR_DOMAIN_JOB_CANCELLED; + priv->job.current->status =3D QEMU_DOMAIN_JOB_STATUS_CANCELED; virReportError(VIR_ERR_OPERATION_ABORTED, _("%s: %s"), qemuDomainAsyncJobTypeToString(priv->job.asyncJ= ob), _("canceled by client")); @@ -1347,19 +1347,19 @@ qemuMigrationUpdateJobType(qemuDomainJobInfoPtr job= Info) { switch ((qemuMonitorMigrationStatus) jobInfo->stats.status) { case QEMU_MONITOR_MIGRATION_STATUS_COMPLETED: - jobInfo->type =3D VIR_DOMAIN_JOB_COMPLETED; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_COMPLETED; break; =20 case QEMU_MONITOR_MIGRATION_STATUS_INACTIVE: - jobInfo->type =3D VIR_DOMAIN_JOB_NONE; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_NONE; break; =20 case QEMU_MONITOR_MIGRATION_STATUS_ERROR: - jobInfo->type =3D VIR_DOMAIN_JOB_FAILED; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_FAILED; break; =20 case QEMU_MONITOR_MIGRATION_STATUS_CANCELLED: - jobInfo->type =3D VIR_DOMAIN_JOB_CANCELLED; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_CANCELED; break; =20 case QEMU_MONITOR_MIGRATION_STATUS_SETUP: @@ -1446,32 +1446,30 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver, else if (qemuMigrationUpdateJobStatus(driver, vm, asyncJob) < 0) return -1; =20 - switch (jobInfo->type) { - case VIR_DOMAIN_JOB_NONE: + switch (jobInfo->status) { + case QEMU_DOMAIN_JOB_STATUS_NONE: virReportError(VIR_ERR_OPERATION_FAILED, _("%s: %s"), qemuMigrationJobName(vm), _("is not active")); return -1; =20 - case VIR_DOMAIN_JOB_FAILED: + case QEMU_DOMAIN_JOB_STATUS_FAILED: virReportError(VIR_ERR_OPERATION_FAILED, _("%s: %s"), qemuMigrationJobName(vm), _("unexpectedly failed")); return -1; =20 - case VIR_DOMAIN_JOB_CANCELLED: + case QEMU_DOMAIN_JOB_STATUS_CANCELED: virReportError(VIR_ERR_OPERATION_ABORTED, _("%s: %s"), qemuMigrationJobName(vm), _("canceled by client")); return -1; =20 - case VIR_DOMAIN_JOB_COMPLETED: + case QEMU_DOMAIN_JOB_STATUS_COMPLETED: /* Fetch statistics of a completed migration */ if (events && updateJobStats && qemuMigrationUpdateJobStatus(driver, vm, asyncJob) < 0) return -1; break; =20 - case VIR_DOMAIN_JOB_BOUNDED: - case VIR_DOMAIN_JOB_UNBOUNDED: - case VIR_DOMAIN_JOB_LAST: + case QEMU_DOMAIN_JOB_STATUS_ACTIVE: break; } return 0; @@ -1529,7 +1527,7 @@ qemuMigrationCompleted(virQEMUDriverPtr driver, * will continue waiting until the migrate state changes to completed. */ if (flags & QEMU_MIGRATION_COMPLETED_POSTCOPY && - jobInfo->type =3D=3D VIR_DOMAIN_JOB_UNBOUNDED && + jobInfo->status =3D=3D QEMU_DOMAIN_JOB_STATUS_ACTIVE && jobInfo->stats.status =3D=3D QEMU_MONITOR_MIGRATION_STATUS_POSTCOP= Y) { VIR_DEBUG("Migration switched to post-copy"); if (updateStats && @@ -1538,18 +1536,18 @@ qemuMigrationCompleted(virQEMUDriverPtr driver, return 1; } =20 - if (jobInfo->type =3D=3D VIR_DOMAIN_JOB_COMPLETED) + if (jobInfo->status =3D=3D QEMU_DOMAIN_JOB_STATUS_COMPLETED) return 1; else return 0; =20 error: - if (jobInfo->type =3D=3D VIR_DOMAIN_JOB_UNBOUNDED) { + if (jobInfo->status =3D=3D QEMU_DOMAIN_JOB_STATUS_ACTIVE) { /* The migration was aborted by us rather than QEMU itself. */ - jobInfo->type =3D VIR_DOMAIN_JOB_FAILED; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_FAILED; return -2; - } else if (jobInfo->type =3D=3D VIR_DOMAIN_JOB_COMPLETED) { - jobInfo->type =3D VIR_DOMAIN_JOB_FAILED; + } else if (jobInfo->status =3D=3D QEMU_DOMAIN_JOB_STATUS_COMPLETED) { + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_FAILED; return -1; } else { return -1; @@ -1574,7 +1572,7 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr drive= r, =20 flags |=3D QEMU_MIGRATION_COMPLETED_UPDATE_STATS; =20 - jobInfo->type =3D VIR_DOMAIN_JOB_UNBOUNDED; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_ACTIVE; while ((rv =3D qemuMigrationCompleted(driver, vm, asyncJob, dconn, flags)) !=3D 1) { if (rv < 0) @@ -1582,7 +1580,7 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr drive= r, =20 if (events) { if (virDomainObjWait(vm) < 0) { - jobInfo->type =3D VIR_DOMAIN_JOB_FAILED; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_FAILED; return -2; } } else { @@ -3756,7 +3754,7 @@ qemuMigrationRun(virQEMUDriverPtr driver, * as this is a critical section so we are guaranteed * priv->job.abortJob will not change */ ignore_value(qemuDomainObjExitMonitor(driver, vm)); - priv->job.current->type =3D VIR_DOMAIN_JOB_CANCELLED; + priv->job.current->status =3D QEMU_DOMAIN_JOB_STATUS_CANCELED; virReportError(VIR_ERR_OPERATION_ABORTED, _("%s: %s"), qemuDomainAsyncJobTypeToString(priv->job.asyncJob), _("canceled by client")); @@ -3890,8 +3888,8 @@ qemuMigrationRun(virQEMUDriverPtr driver, ignore_value(virTimeMillisNow(&priv->job.completed->sent)); } =20 - if (priv->job.current->type =3D=3D VIR_DOMAIN_JOB_UNBOUNDED && !inPost= Copy) - priv->job.current->type =3D VIR_DOMAIN_JOB_FAILED; + if (priv->job.current->status =3D=3D QEMU_DOMAIN_JOB_STATUS_ACTIVE && = !inPostCopy) + priv->job.current->status =3D QEMU_DOMAIN_JOB_STATUS_FAILED; =20 cookieFlags |=3D QEMU_MIGRATION_COOKIE_NETWORK | QEMU_MIGRATION_COOKIE_STATS; @@ -3933,7 +3931,7 @@ qemuMigrationRun(virQEMUDriverPtr driver, goto cleanup; =20 cancelPostCopy: - priv->job.current->type =3D VIR_DOMAIN_JOB_FAILED; + priv->job.current->status =3D QEMU_DOMAIN_JOB_STATUS_FAILED; if (inPostCopy) goto cancel; else @@ -5652,7 +5650,7 @@ qemuMigrationJobStart(virQEMUDriverPtr driver, return -1; =20 qemuDomainObjSetAsyncJobMask(vm, mask); - priv->job.current->type =3D VIR_DOMAIN_JOB_UNBOUNDED; + priv->job.current->status =3D QEMU_DOMAIN_JOB_STATUS_ACTIVE; =20 return 0; } diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_coo= kie.c index 5f8595f..4914c77 100644 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -974,7 +974,7 @@ qemuMigrationCookieStatisticsXMLParse(xmlXPathContextPt= r ctxt) goto cleanup; =20 stats =3D &jobInfo->stats; - jobInfo->type =3D VIR_DOMAIN_JOB_COMPLETED; + jobInfo->status =3D QEMU_DOMAIN_JOB_STATUS_COMPLETED; =20 virXPathULongLong("string(./started[1])", ctxt, &jobInfo->started); virXPathULongLong("string(./stopped[1])", ctxt, &jobInfo->stopped); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 364c359..f6728be 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4000,7 +4000,7 @@ qemuProcessBeginJob(virQEMUDriverPtr driver, return -1; =20 qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE); - priv->job.current->type =3D VIR_DOMAIN_JOB_UNBOUNDED; + priv->job.current->status =3D QEMU_DOMAIN_JOB_STATUS_ACTIVE; =20 return 0; } --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list