From 180e19162083fb74e9e9cbc676ce42611bb2e496 Mon Sep 17 00:00:00 2001
From: AlexChen <alex.chen@huawei.com>
Date: Tue, 19 Oct 2021 22:41:24 +0800
Subject: [PATCH] hotpatch: introduce hotpatch async job flag
Signed-off-by: Hao Wang <wanghao232@huawei.com>
Signed-off-by: Bihong Yu <yubihong@huawei.com>
Signed-off-by: AlexChen <alex.chen@huawei.com>
include/libvirt/libvirt-domain.h | 1 +
src/conf/virdomainjob.c | 1 +
src/conf/virdomainjob.h | 1 +
src/qemu/qemu_domainjob.c | 2 ++
src/qemu/qemu_driver.c | 14 +++++++++++++-
src/qemu/qemu_migration.c | 2 ++
src/qemu/qemu_process.c | 1 +
tools/virsh-domain.c | 1 +
8 files changed, 22 insertions(+), 1 deletion(-)
@@ -4201,6 +4201,7 @@ typedef enum {
VIR_DOMAIN_JOB_OPERATION_DUMP = 8, /* (Since: 3.3.0) */
VIR_DOMAIN_JOB_OPERATION_BACKUP = 9, /* (Since: 6.0.0) */
VIR_DOMAIN_JOB_OPERATION_SNAPSHOT_DELETE = 10, /* (Since: 9.0.0) */
+ VIR_DOMAIN_JOB_OPERATION_HOTPATCH = 11, /* (Since: 6.2.0) */
# ifdef VIR_ENUM_SENTINELS
VIR_DOMAIN_JOB_OPERATION_LAST /* (Since: 3.3.0) */
@@ -51,6 +51,7 @@ VIR_ENUM_IMPL(virDomainAsyncJob,
"snapshot",
"start",
"backup",
+ "hotpatch",
);
virDomainJobData *
@@ -75,6 +75,7 @@ typedef enum {
VIR_ASYNC_JOB_SNAPSHOT,
VIR_ASYNC_JOB_START,
VIR_ASYNC_JOB_BACKUP,
+ VIR_ASYNC_JOB_HOTPATCH,
VIR_ASYNC_JOB_LAST
} virDomainAsyncJob;
@@ -56,6 +56,7 @@ qemuDomainAsyncJobPhaseToString(virDomainAsyncJob job,
case VIR_ASYNC_JOB_START:
case VIR_ASYNC_JOB_NONE:
case VIR_ASYNC_JOB_BACKUP:
+ case VIR_ASYNC_JOB_HOTPATCH:
G_GNUC_FALLTHROUGH;
case VIR_ASYNC_JOB_LAST:
break;
@@ -82,6 +83,7 @@ qemuDomainAsyncJobPhaseFromString(virDomainAsyncJob job,
case VIR_ASYNC_JOB_START:
case VIR_ASYNC_JOB_NONE:
case VIR_ASYNC_JOB_BACKUP:
+ case VIR_ASYNC_JOB_HOTPATCH:
G_GNUC_FALLTHROUGH;
case VIR_ASYNC_JOB_LAST:
break;
@@ -12251,6 +12251,8 @@ qemuDomainAbortJobFlags(virDomainPtr dom,
qemuBackupJobCancelBlockjobs(vm, priv->backup, true, VIR_ASYNC_JOB_NONE);
ret = 0;
break;
+ case VIR_ASYNC_JOB_HOTPATCH:
+ break;
case VIR_ASYNC_JOB_LAST:
default:
@@ -19942,7 +19944,8 @@ qemuDomainHotpatchManage(virDomainPtr domain,
const char *id,
unsigned int flags)
{
- virDomainObjPtr vm;
+ virDomainObj *vm;
+ virQEMUDriver *driver = domain->conn->privateData;
char *ret = NULL;
size_t len;
@@ -19951,6 +19954,12 @@ qemuDomainHotpatchManage(virDomainPtr domain,
if (!(vm = qemuDomainObjFromDomain(domain)))
goto cleanup;
+ if (VirDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_HOTPATCH,
+ VIR_DOMAIN_JOB_OPERATION_HOTPATCH, 0) < 0)
+ goto cleanup;
+
+ qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_DEFAULT_MASK);
+
switch (action) {
case VIR_DOMAIN_HOTPATCH_APPLY:
ret = qemuDomainHotpatchApply(vm, patch);
@@ -19977,6 +19986,9 @@ qemuDomainHotpatchManage(virDomainPtr domain,
if (len > 0)
ret[len - 1] = '\0';
+ endjob:
+ qemuDomainObjEndAsyncJob(driver, vm);
+
cleanup:
virDomainObjEndAPI(&vm);
return ret;
@@ -1846,6 +1846,8 @@ qemuMigrationJobName(virDomainObj *vm)
return _("start");
case VIR_ASYNC_JOB_BACKUP:
return _("backup");
+ case VIR_ASYNC_JOB_HOTPATCH:
+ return _("hotpatch job");
case VIR_ASYNC_JOB_NONE:
case VIR_ASYNC_JOB_LAST:
default:
@@ -3758,6 +3758,7 @@ qemuProcessRecoverJob(virQEMUDriver *driver,
JOB_MASK(VIR_JOB_MODIFY)));
break;
+ case VIR_ASYNC_JOB_HOTPATCH:
case VIR_ASYNC_JOB_NONE:
case VIR_ASYNC_JOB_LAST:
break;
@@ -6152,6 +6152,7 @@ VIR_ENUM_IMPL(virshDomainJobOperation,
N_("Dump"),
N_("Backup"),
N_("Snapshot delete"),
+ N_("Hotpatch"),
);
static const char *
--
2.27.0