From nobody Mon Mar 30 00:50:42 2026 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.zoho.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 149189897752130.782085342555888; Tue, 11 Apr 2017 01:22:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BF85CC065124; Tue, 11 Apr 2017 08:22:55 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8658418857; Tue, 11 Apr 2017 08:22:55 +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 3D92C5EC6C; Tue, 11 Apr 2017 08:22:55 +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 v3B8Mnux005475 for ; Tue, 11 Apr 2017 04:22:49 -0400 Received: by smtp.corp.redhat.com (Postfix) id C89BC80682; Tue, 11 Apr 2017 08:22:49 +0000 (UTC) Received: from mx1.redhat.com (ext-mx03.extmail.prod.ext.phx2.redhat.com [10.5.110.27]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BFEB18068D for ; Tue, 11 Apr 2017 08:22:47 +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 CAA7F787E0 for ; Tue, 11 Apr 2017 08:22:45 +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 v3B7fYc0009507 for ; Tue, 11 Apr 2017 10:41:35 +0300 (MSK) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BF85CC065124 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=virtuozzo.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com BF85CC065124 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CAA7F787E0 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=virtuozzo.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=nshirokovskiy@virtuozzo.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com CAA7F787E0 From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Tue, 11 Apr 2017 10:39:35 +0300 Message-Id: <1491896389-522630-3-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1491896389-522630-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1491896389-522630-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Delayed for 00:40:51 by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 11 Apr 2017 08:22:46 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 11 Apr 2017 08:22:46 +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.799 (BAYES_50, 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.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v3 02/16] 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 11 Apr 2017 08:22:56 +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 | 11 ++++++++- src/qemu/qemu_driver.c | 11 ++++----- src/qemu/qemu_migration.c | 50 +++++++++++++++++++-----------------= ---- src/qemu/qemu_migration_cookie.c | 2 +- src/qemu/qemu_process.c | 2 +- 6 files changed, 66 insertions(+), 37 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 54d9425..0ae53ef 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -402,11 +402,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; @@ -561,7 +584,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 caf1ebe..a5791bf 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -99,10 +99,19 @@ 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; + unsigned long long started; /* When the async job started */ unsigned long long stopped; /* When the domain's CPUs were stopped */ unsigned long long sent; /* When the source sent status info to the diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 388af4f..c5cca07 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3156,7 +3156,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) { @@ -12781,14 +12781,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_BOUNDED || - 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); @@ -12823,7 +12822,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; @@ -12864,7 +12863,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 d8222fe..e9a3fd0 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -946,7 +946,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")); @@ -1315,19 +1315,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: @@ -1414,32 +1414,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; @@ -1497,7 +1495,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 && @@ -1506,18 +1504,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; @@ -1542,7 +1540,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) @@ -1550,7 +1548,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 { @@ -3719,7 +3717,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")); @@ -3853,8 +3851,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; @@ -3896,7 +3894,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 @@ -5607,7 +5605,7 @@ qemuMigrationJobStart(virQEMUDriverPtr driver, JOB_MASK(QEMU_JOB_MIGRATION_OP))= ); } =20 - 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 ae56569..afe8682 100644 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -953,7 +953,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 5e119a2..1f1e2dc 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4151,7 +4151,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