Hotpatch: introduce DomainHotpatchManage API
Signed-off-by: Hao Wang <wanghao232@huawei.com> Signed-off-by: Bihong Yu <yubihong@huawei.com> Signed-off-by: AlexChen <alex.chen@huawei.com>
This commit is contained in:
parent
60d4c4a423
commit
eb02e33f40
211
Hotpatch-introduce-DomainHotpatchManage-API.patch
Normal file
211
Hotpatch-introduce-DomainHotpatchManage-API.patch
Normal file
@ -0,0 +1,211 @@
|
||||
From 9a12606bb5caf3e213ce1564445d88325592e642 Mon Sep 17 00:00:00 2001
|
||||
From: AlexChen <alex.chen@huawei.com>
|
||||
Date: Tue, 19 Oct 2021 14:50:32 +0800
|
||||
Subject: [PATCH] Hotpatch: introduce DomainHotpatchManage API
|
||||
|
||||
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 | 18 ++++++++++
|
||||
scripts/check-aclrules.py | 1 +
|
||||
src/driver-hypervisor.h | 8 +++++
|
||||
src/libvirt-domain.c | 58 ++++++++++++++++++++++++++++++++
|
||||
src/libvirt_public.syms | 4 +++
|
||||
src/remote/remote_driver.c | 1 +
|
||||
src/remote/remote_protocol.x | 20 ++++++++++-
|
||||
7 files changed, 109 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
|
||||
index 90cb652db1..f91061724b 100644
|
||||
--- a/include/libvirt/libvirt-domain.h
|
||||
+++ b/include/libvirt/libvirt-domain.h
|
||||
@@ -4991,4 +4991,22 @@ int virDomainBackupBegin(virDomainPtr domain,
|
||||
char *virDomainBackupGetXMLDesc(virDomainPtr domain,
|
||||
unsigned int flags);
|
||||
|
||||
+typedef enum {
|
||||
+ VIR_DOMAIN_HOTPATCH_NONE = 0, /* No action */
|
||||
+ VIR_DOMAIN_HOTPATCH_APPLY, /* Apply hotpatch */
|
||||
+ VIR_DOMAIN_HOTPATCH_UNAPPLY, /* Unapply hotpatch */
|
||||
+ VIR_DOMAIN_HOTPATCH_QUERY, /* Query hotpatch */
|
||||
+
|
||||
+# ifdef VIR_ENUM_SENTINELS
|
||||
+ VIR_DOMAIN_HOTPATCH_LAST
|
||||
+# endif
|
||||
+} virDomainHotpatchAction;
|
||||
+
|
||||
+char *
|
||||
+virDomainHotpatchManage(virDomainPtr domain,
|
||||
+ int action,
|
||||
+ const char *patch,
|
||||
+ const char *id,
|
||||
+ unsigned int flags);
|
||||
+
|
||||
#endif /* LIBVIRT_DOMAIN_H */
|
||||
diff --git a/scripts/check-aclrules.py b/scripts/check-aclrules.py
|
||||
index a1fa473174..e196f81de9 100755
|
||||
--- a/scripts/check-aclrules.py
|
||||
+++ b/scripts/check-aclrules.py
|
||||
@@ -53,6 +53,7 @@ whitelist = {
|
||||
"connectURIProbe": True,
|
||||
"localOnly": True,
|
||||
"domainQemuAttach": True,
|
||||
+ "domainHotpatchManage": True,
|
||||
}
|
||||
|
||||
# XXX this vzDomainMigrateConfirm3Params looks
|
||||
diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
|
||||
index bce023017d..afc21a0b3f 100644
|
||||
--- a/src/driver-hypervisor.h
|
||||
+++ b/src/driver-hypervisor.h
|
||||
@@ -1387,6 +1387,13 @@ typedef char *
|
||||
(*virDrvDomainBackupGetXMLDesc)(virDomainPtr domain,
|
||||
unsigned int flags);
|
||||
|
||||
+typedef char *
|
||||
+(*virDrvDomainHotpatchManage)(virDomainPtr domain,
|
||||
+ int action,
|
||||
+ const char *patch,
|
||||
+ const char *id,
|
||||
+ unsigned int flags);
|
||||
+
|
||||
typedef struct _virHypervisorDriver virHypervisorDriver;
|
||||
typedef virHypervisorDriver *virHypervisorDriverPtr;
|
||||
|
||||
@@ -1650,4 +1657,5 @@ struct _virHypervisorDriver {
|
||||
virDrvDomainAgentSetResponseTimeout domainAgentSetResponseTimeout;
|
||||
virDrvDomainBackupBegin domainBackupBegin;
|
||||
virDrvDomainBackupGetXMLDesc domainBackupGetXMLDesc;
|
||||
+ virDrvDomainHotpatchManage domainHotpatchManage;
|
||||
};
|
||||
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
|
||||
index a12809c2d5..068ab52f54 100644
|
||||
--- a/src/libvirt-domain.c
|
||||
+++ b/src/libvirt-domain.c
|
||||
@@ -12733,3 +12733,61 @@ virDomainBackupGetXMLDesc(virDomainPtr domain,
|
||||
virDispatchError(conn);
|
||||
return NULL;
|
||||
}
|
||||
+
|
||||
+/**
|
||||
+ * virDomainHotpatchManage:
|
||||
+ * @domain: a domain object
|
||||
+ * @action: the action type from virDomainHotpatchAction
|
||||
+ * @patch: the target hotpatch file
|
||||
+ * @id: the patch id of the target hotpatch
|
||||
+ * @flags: extra flags; not used yet, so callers should always pass 0
|
||||
+ *
|
||||
+ * Manage hotpatch for the current domain according to @action.
|
||||
+ *
|
||||
+ * If the @action is set to VIR_DOMAIN_HOTPATCH_APPLY, apply hotpatch
|
||||
+ * @patch to the current domain.
|
||||
+ *
|
||||
+ * If the @action is set to VIR_DOMAIN_HOTPATCH_UNAPPLY, unapply the
|
||||
+ * hotpatch which is matched with @id from the current domain.
|
||||
+ *
|
||||
+ * If the @action is set to VIR_DOMAIN_HOTPATCH_QUERY, query infomations
|
||||
+ * of the applied hotpatch of the current domain.
|
||||
+ *
|
||||
+ * Returns success messages in case of success, NULL otherwise.
|
||||
+ */
|
||||
+char *
|
||||
+virDomainHotpatchManage(virDomainPtr domain,
|
||||
+ int action,
|
||||
+ const char *patch,
|
||||
+ const char *id,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ virConnectPtr conn;
|
||||
+
|
||||
+ virResetLastError();
|
||||
+
|
||||
+ virCheckDomainReturn(domain, NULL);
|
||||
+ conn = domain->conn;
|
||||
+
|
||||
+ virCheckReadOnlyGoto(conn->flags, error);
|
||||
+
|
||||
+ if (action == VIR_DOMAIN_HOTPATCH_APPLY)
|
||||
+ virCheckNonNullArgGoto(patch, error);
|
||||
+
|
||||
+ if (action == VIR_DOMAIN_HOTPATCH_UNAPPLY)
|
||||
+ virCheckNonNullArgGoto(id, error);
|
||||
+
|
||||
+ if (conn->driver->domainHotpatchManage) {
|
||||
+ char *ret;
|
||||
+ ret = conn->driver->domainHotpatchManage(domain, action, patch, id, flags);
|
||||
+ if (!ret)
|
||||
+ goto error;
|
||||
+
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ virReportUnsupportedError();
|
||||
+ error:
|
||||
+ virDispatchError(conn);
|
||||
+ return NULL;
|
||||
+}
|
||||
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
|
||||
index 539d2e3943..0ad0b9e489 100644
|
||||
--- a/src/libvirt_public.syms
|
||||
+++ b/src/libvirt_public.syms
|
||||
@@ -873,4 +873,8 @@ LIBVIRT_6.0.0 {
|
||||
virDomainBackupGetXMLDesc;
|
||||
} LIBVIRT_5.10.0;
|
||||
|
||||
+LIBVIRT_6.2.0 {
|
||||
+ global:
|
||||
+ virDomainHotpatchManage;
|
||||
+} LIBVIRT_6.0.0;
|
||||
# .... define new API here using predicted next version number ....
|
||||
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
|
||||
index 7bae0c2514..1202d44017 100644
|
||||
--- a/src/remote/remote_driver.c
|
||||
+++ b/src/remote/remote_driver.c
|
||||
@@ -8684,6 +8684,7 @@ static virHypervisorDriver hypervisor_driver = {
|
||||
.domainAgentSetResponseTimeout = remoteDomainAgentSetResponseTimeout, /* 5.10.0 */
|
||||
.domainBackupBegin = remoteDomainBackupBegin, /* 6.0.0 */
|
||||
.domainBackupGetXMLDesc = remoteDomainBackupGetXMLDesc, /* 6.0.0 */
|
||||
+ .domainHotpatchManage = remoteDomainHotpatchManage, /* 6.2.0 */
|
||||
};
|
||||
|
||||
static virNetworkDriver network_driver = {
|
||||
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
|
||||
index 8b05082b61..ee13075ce1 100644
|
||||
--- a/src/remote/remote_protocol.x
|
||||
+++ b/src/remote/remote_protocol.x
|
||||
@@ -3771,6 +3771,18 @@ struct remote_domain_backup_get_xml_desc_ret {
|
||||
remote_nonnull_string xml;
|
||||
};
|
||||
|
||||
+struct remote_domain_hotpatch_manage_args {
|
||||
+ remote_nonnull_domain dom;
|
||||
+ int action;
|
||||
+ remote_string patch;
|
||||
+ remote_string id;
|
||||
+ unsigned int flags;
|
||||
+};
|
||||
+
|
||||
+struct remote_domain_hotpatch_manage_ret {
|
||||
+ remote_string info;
|
||||
+};
|
||||
+
|
||||
/*----- Protocol. -----*/
|
||||
|
||||
/* Define the program number, protocol version and procedure numbers here. */
|
||||
@@ -6668,5 +6680,11 @@ enum remote_procedure {
|
||||
* @priority: high
|
||||
* @acl: domain:read
|
||||
*/
|
||||
- REMOTE_PROC_DOMAIN_BACKUP_GET_XML_DESC = 422
|
||||
+ REMOTE_PROC_DOMAIN_BACKUP_GET_XML_DESC = 422,
|
||||
+
|
||||
+ /**
|
||||
+ * @generate: both
|
||||
+ * @acl: domain:read
|
||||
+ */
|
||||
+ REMOTE_PROC_DOMAIN_HOTPATCH_MANAGE = 800
|
||||
};
|
||||
--
|
||||
2.27.0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user