]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: extend xmlopt with job config & add job object into domain object
authorKristina Hanicova <khanicov@redhat.com>
Mon, 5 Sep 2022 13:57:03 +0000 (15:57 +0200)
committerJán Tomko <jtomko@redhat.com>
Wed, 7 Sep 2022 10:06:18 +0000 (12:06 +0200)
This patch adds the generalized job object into the domain object
so that it can be used by all drivers without the need to extract
it from the private data.

Because of this, the job object needs to be created and set
during the creation of the domain object. This patch also extends
xmlopt with possible job config containing virDomainJobObj
callbacks, its private data callbacks and one variable
(maxQueuedJobs).

This patch includes:
* addition of virDomainJobObj into virDomainObj (used in the
  following patches)
* extending xmlopt with job config structure
* new function for freeing the virDomainJobObj

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
22 files changed:
src/bhyve/bhyve_domain.c
src/ch/ch_conf.c
src/conf/domain_conf.c
src/conf/domain_conf.h
src/conf/virconftypes.h
src/conf/virdomainjob.c
src/conf/virdomainjob.h
src/hyperv/hyperv_driver.c
src/libvirt_private.syms
src/libxl/libxl_conf.c
src/lxc/lxc_conf.c
src/openvz/openvz_conf.c
src/qemu/qemu_conf.c
src/qemu/qemu_process.c
src/security/virt-aa-helper.c
src/test/test_driver.c
src/vbox/vbox_common.c
src/vmware/vmware_driver.c
src/vmx/vmx.c
src/vz/vz_driver.c
tests/bhyveargv2xmltest.c
tests/testutils.c

index 69555a3efcf64da27088233dea82abd06992eeb5..b7b2db57b8295746fc9961130753f875fbae967c 100644 (file)
@@ -221,7 +221,7 @@ virBhyveDriverCreateXMLConf(struct _bhyveConn *driver)
     return virDomainXMLOptionNew(&virBhyveDriverDomainDefParserConfig,
                                  &virBhyveDriverPrivateDataCallbacks,
                                  &virBhyveDriverDomainXMLNamespace,
-                                 NULL, NULL);
+                                 NULL, NULL, NULL);
 }
 
 
index 775596e9f5d935556c82ebc5ba2d6c916c0a8e03..0d07fa270ced088145bca680b0920c555ff9885c 100644 (file)
@@ -110,7 +110,7 @@ chDomainXMLConfInit(virCHDriver *driver)
     virCHDriverDomainDefParserConfig.priv = driver;
     return virDomainXMLOptionNew(&virCHDriverDomainDefParserConfig,
                                  &virCHDriverPrivateDataCallbacks,
-                                 NULL, NULL, NULL);
+                                 NULL, NULL, NULL, NULL);
 }
 
 virCHDriverConfig *
index a0f7fd7197f1c5ed6167c4d22f3a4f97bbd40937..d1568e73574f51906c5e5ee9e499969953fd276a 100644 (file)
@@ -1605,7 +1605,8 @@ virDomainXMLOptionNew(virDomainDefParserConfig *config,
                       virDomainXMLPrivateDataCallbacks *priv,
                       virXMLNamespace *xmlns,
                       virDomainABIStability *abi,
-                      virSaveCookieCallbacks *saveCookie)
+                      virSaveCookieCallbacks *saveCookie,
+                      virDomainJobObjConfig *jobConfig)
 {
     virDomainXMLOption *xmlopt;
 
@@ -1630,6 +1631,9 @@ virDomainXMLOptionNew(virDomainDefParserConfig *config,
     if (saveCookie)
         xmlopt->saveCookie = *saveCookie;
 
+    if (jobConfig)
+        xmlopt->jobObjConfig = *jobConfig;
+
     /* Technically this forbids to use one of Xerox's MAC address prefixes in
      * our hypervisor drivers. This shouldn't ever be a problem.
      *
@@ -3858,6 +3862,7 @@ static void virDomainObjDispose(void *obj)
     virDomainObjDeprecationFree(dom);
     virDomainSnapshotObjListFree(dom->snapshots);
     virDomainCheckpointObjListFree(dom->checkpoints);
+    virDomainJobObjFree(dom->job);
 }
 
 virDomainObj *
@@ -3890,6 +3895,12 @@ virDomainObjNew(virDomainXMLOption *xmlopt)
     if (!(domain->checkpoints = virDomainCheckpointObjListNew()))
         goto error;
 
+    domain->job = g_new0(virDomainJobObj, 1);
+    if (virDomainObjInitJob(domain->job,
+                            &xmlopt->jobObjConfig.cb,
+                            &xmlopt->jobObjConfig.jobDataPrivateCb) < 0)
+        goto error;
+
     virObjectLock(domain);
     virDomainObjSetState(domain, VIR_DOMAIN_SHUTOFF,
                                  VIR_DOMAIN_SHUTOFF_UNKNOWN);
index 2b1497d78dd82915efdd873c50452d0fb50240a7..42fa2a44001bfe7cf1f3bfaf23c9aa1fa8dd32b3 100644 (file)
@@ -56,6 +56,7 @@
 #include "virsavecookie.h"
 #include "virresctrl.h"
 #include "virenum.h"
+#include "virdomainjob.h"
 
 /* Flags for the 'type' field in virDomainDeviceDef */
 typedef enum {
@@ -3093,6 +3094,8 @@ struct _virDomainObj {
     virObjectLockable parent;
     virCond cond;
 
+    virDomainJobObj *job;
+
     pid_t pid; /* 0 for no PID, avoid negative values like -1 */
     virDomainStateReason state;
 
@@ -3277,11 +3280,19 @@ struct _virDomainABIStability {
     virDomainABIStabilityDomain domain;
 };
 
+
+struct _virDomainJobObjConfig {
+    virDomainObjPrivateJobCallbacks cb;
+    virDomainJobDataPrivateDataCallbacks jobDataPrivateCb;
+    unsigned int maxQueuedJobs;
+};
+
 virDomainXMLOption *virDomainXMLOptionNew(virDomainDefParserConfig *config,
                                           virDomainXMLPrivateDataCallbacks *priv,
                                           virXMLNamespace *xmlns,
                                           virDomainABIStability *abi,
-                                          virSaveCookieCallbacks *saveCookie);
+                                          virSaveCookieCallbacks *saveCookie,
+                                          virDomainJobObjConfig *jobConfig);
 
 virSaveCookieCallbacks *
 virDomainXMLOptionGetSaveCookie(virDomainXMLOption *xmlopt);
@@ -3321,6 +3332,9 @@ struct _virDomainXMLOption {
 
     /* Snapshot postparse callbacks */
     virDomainMomentPostParseCallback momentPostParse;
+
+    /* virDomainJobObj callbacks, private data callbacks and defaults */
+    virDomainJobObjConfig jobObjConfig;
 };
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainXMLOption, virObjectUnref);
 
index c3f1c5fa01228258ec5d7536298ea85cba7ee35a..154805091a2d5cf85dfe16954df69457f23d288f 100644 (file)
@@ -150,6 +150,8 @@ typedef struct _virDomainIdMapEntry virDomainIdMapEntry;
 
 typedef struct _virDomainInputDef virDomainInputDef;
 
+typedef struct _virDomainJobObjConfig virDomainJobObjConfig;
+
 typedef struct _virDomainKeyWrapDef virDomainKeyWrapDef;
 
 typedef struct _virDomainLeaseDef virDomainLeaseDef;
index 5ab4bdc18b7ef6962cf7bfea6f0851c33f4b9eaa..a073ff08cd5aa46f5c33da3aaaf5a52bf8e33bf5 100644 (file)
@@ -13,6 +13,7 @@
 #include "virthreadjob.h"
 #include "virlog.h"
 #include "virtime.h"
+#include "domain_conf.h"
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 
@@ -230,6 +231,16 @@ virDomainObjClearJob(virDomainJobObj *job)
         g_clear_pointer(&job->privateData, job->cb->freeJobPrivate);
 }
 
+void
+virDomainJobObjFree(virDomainJobObj *job)
+{
+    if (!job)
+        return;
+
+    virDomainObjClearJob(job);
+    g_free(job);
+}
+
 bool
 virDomainTrackJob(virDomainJob job)
 {
index bdfdc91935a8cada107098a47a24690aa12fcfdd..091d951aa6cbbf0845116c96649f9373ad8242f6 100644 (file)
@@ -11,7 +11,8 @@
 #include "virenum.h"
 #include "virthread.h"
 #include "virbuffer.h"
-#include "domain_conf.h"
+#include "virconftypes.h"
+#include "virxml.h"
 
 #define JOB_MASK(job)                  (job == 0 ? 0 : 1 << (job - 1))
 #define VIR_JOB_DEFAULT_MASK \
@@ -227,6 +228,8 @@ int virDomainObjPreserveJob(virDomainJobObj *currJob,
 void virDomainObjClearJob(virDomainJobObj *job);
 G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virDomainJobObj, virDomainObjClearJob);
 
+void virDomainJobObjFree(virDomainJobObj *job);
+
 bool virDomainTrackJob(virDomainJob job);
 
 bool virDomainNestedJobAllowed(virDomainJobObj *jobs, virDomainJob newJob);
index 288c01ad14f6d5fbc1d20d6ebb3b99e1dd5ecc91..3929e27e097524a8463fa9ed97a191caafc7e741 100644 (file)
@@ -1766,7 +1766,7 @@ hypervConnectOpen(virConnectPtr conn, virConnectAuthPtr auth,
         goto cleanup;
 
     /* init xmlopt for domain XML */
-    priv->xmlopt = virDomainXMLOptionNew(&hypervDomainDefParserConfig, NULL, NULL, NULL, NULL);
+    priv->xmlopt = virDomainXMLOptionNew(&hypervDomainDefParserConfig, NULL, NULL, NULL, NULL, NULL);
 
     if (hypervGetOperatingSystem(priv, &os) < 0)
         goto cleanup;
index 5077db9c6b0c48abd83bbfeb03c66410ad1fbab1..cd0b94297c7bcc703aa094f5c3f4fc81af9b8395 100644 (file)
@@ -1182,6 +1182,7 @@ virDomainAsyncJobTypeToString;
 virDomainJobDataCopy;
 virDomainJobDataFree;
 virDomainJobDataInit;
+virDomainJobObjFree;
 virDomainJobStatusToType;
 virDomainJobTypeFromString;
 virDomainJobTypeToString;
index 06f338ef904c1eaf2bc5000b85ebf07cd7aed3a6..918303c8d0787aac5cc6a0e51143014cd658015a 100644 (file)
@@ -2486,5 +2486,5 @@ libxlCreateXMLConf(libxlDriverPrivate *driver)
     return virDomainXMLOptionNew(&libxlDomainDefParserConfig,
                                  &libxlDomainXMLPrivateDataCallbacks,
                                  &libxlDriverDomainXMLNamespace,
-                                 NULL, NULL);
+                                 NULL, NULL, NULL);
 }
index 7834801fb5e4780eeb5263778f44af188fc0c745..fefe63bf200f4a9b51ccf3973bebefff3fc83d2e 100644 (file)
@@ -189,7 +189,7 @@ lxcDomainXMLConfInit(virLXCDriver *driver, const char *defsecmodel)
     return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig,
                                  &virLXCDriverPrivateDataCallbacks,
                                  &virLXCDriverDomainXMLNamespace,
-                                 NULL, NULL);
+                                 NULL, NULL, NULL);
 }
 
 
index c94f9b85771733e64f8119f77a7b3c9733ad0500..c28d0e9f4304efabc130410b1468867df710add6 100644 (file)
@@ -1062,5 +1062,5 @@ virDomainXMLOption *openvzXMLOption(struct openvz_driver *driver)
 {
     openvzDomainDefParserConfig.priv = driver;
     return virDomainXMLOptionNew(&openvzDomainDefParserConfig,
-                                 NULL, NULL, NULL, NULL);
+                                 NULL, NULL, NULL, NULL, NULL);
 }
index 3b75cdeb95dd95fd63130af6f973aee3e452b02a..2809ae53b990b25d2f9042f4e19774967048948e 100644 (file)
@@ -1278,7 +1278,8 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver,
                                  &virQEMUDriverPrivateDataCallbacks,
                                  &virQEMUDriverDomainXMLNamespace,
                                  &virQEMUDriverDomainABIStability,
-                                 &virQEMUDriverDomainSaveCookie);
+                                 &virQEMUDriverDomainSaveCookie,
+                                 NULL);
 }
 
 
index d37f3cddfc87d394b137424b9c4dc66ea496cb80..cb0bb816b8ff54709e555f21da5ca334c8c43cc0 100644 (file)
@@ -9273,7 +9273,7 @@ qemuProcessQMPConnectMonitor(qemuProcessQMP *proc)
     monConfig.data.nix.path = proc->monpath;
     monConfig.data.nix.listen = false;
 
-    if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)) ||
+    if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL, NULL)) ||
         !(proc->vm = virDomainObjNew(xmlopt)) ||
         !(proc->vm->def = virDomainDefNew(xmlopt)))
         return -1;
index 2d0bc99c7313c8dd55c5422835959ede7a638b5a..f338488da3cd9df3c66a6fd7eb88d826f6c65170 100644 (file)
@@ -632,7 +632,7 @@ get_definition(vahControl * ctl, const char *xmlStr)
     }
 
     if (!(ctl->xmlopt = virDomainXMLOptionNew(&virAAHelperDomainDefParserConfig,
-                                              NULL, NULL, NULL, NULL))) {
+                                              NULL, NULL, NULL, NULL, NULL))) {
         vah_error(ctl, 0, _("Failed to create XML config object"));
         return -1;
     }
index 641a141b6a14f3a12f9e12a783b3052cfca8a4f8..686ff051a8f1d158cfdec6d8e9d0a11b06ba1a6d 100644 (file)
@@ -460,7 +460,7 @@ testDriverNew(void)
     if (!(ret = virObjectLockableNew(testDriverClass)))
         return NULL;
 
-    if (!(ret->xmlopt = virDomainXMLOptionNew(&config, &privatecb, &ns, NULL, NULL)) ||
+    if (!(ret->xmlopt = virDomainXMLOptionNew(&config, &privatecb, &ns, NULL, NULL, NULL)) ||
         !(ret->eventState = virObjectEventStateNew()) ||
         !(ret->ifaces = virInterfaceObjListNew()) ||
         !(ret->domains = virDomainObjListNew()) ||
index e249980195a9516d83750c27794a753f3b63b918..bd77641d39cb95c77703cb3f69dae43b06e727b5 100644 (file)
@@ -143,7 +143,7 @@ vboxDriverObjNew(void)
 
     if (!(driver->caps = vboxCapsInit()) ||
         !(driver->xmlopt = virDomainXMLOptionNew(&vboxDomainDefParserConfig,
-                                                 NULL, NULL, NULL, NULL)))
+                                                 NULL, NULL, NULL, NULL, NULL)))
         goto cleanup;
 
     return driver;
index 2a18d739887b5b2de083ae64e8f13a6524dbb865..3c578434f3636205ffa46ca4f88b0d4e15dbf39d 100644 (file)
@@ -139,7 +139,7 @@ vmwareDomainXMLConfigInit(struct vmware_driver *driver)
                                               .free = vmwareDataFreeFunc };
     vmwareDomainDefParserConfig.priv = driver;
     return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv,
-                                 NULL, NULL, NULL);
+                                 NULL, NULL, NULL, NULL);
 }
 
 static virDrvOpenStatus
index fa5cc5614683fe7599d5b51a8d2caa08c3defb5e..bf0dba17d8312847800633ffbf04693035484f0e 100644 (file)
@@ -696,7 +696,7 @@ virVMXDomainXMLConfInit(virCaps *caps)
 {
     virVMXDomainDefParserConfig.priv = caps;
     return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, NULL,
-                                 &virVMXDomainXMLNamespace, NULL, NULL);
+                                 &virVMXDomainXMLNamespace, NULL, NULL, NULL);
 }
 
 char *
index 017c084edeba257ce3900f463996295e5b1c35ae..571d895167b6ef06be5d212dc00c37c7a6e6d4bc 100644 (file)
@@ -331,7 +331,7 @@ vzDriverObjNew(void)
     if (!(driver->caps = vzBuildCapabilities()) ||
         !(driver->xmlopt = virDomainXMLOptionNew(&vzDomainDefParserConfig,
                                                  &vzDomainXMLPrivateDataCallbacksPtr,
-                                                 NULL, NULL, NULL)) ||
+                                                 NULL, NULL, NULL, NULL)) ||
         !(driver->domains = virDomainObjListNew()) ||
         !(driver->domainEventState = virObjectEventStateNew()) ||
         (vzInitVersion(driver) < 0) ||
index 2ccc1379b9a5816043c07074326fa4c1c596e661..92189a2e588dad9a7016a4b08ca4396beda45120 100644 (file)
@@ -113,7 +113,7 @@ mymain(void)
     if ((driver.caps = virBhyveCapsBuild()) == NULL)
         return EXIT_FAILURE;
 
-    if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL,
+    if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL,
                                                NULL, NULL, NULL)) == NULL)
         return EXIT_FAILURE;
 
index 30f91dcd286a6aeb67e82d0406c9faf2d363a6f5..8fe624f029d72f49a7e54bf232909f52b208c77a 100644 (file)
@@ -989,7 +989,7 @@ static virDomainDefParserConfig virTestGenericDomainDefParserConfig = {
 virDomainXMLOption *virTestGenericDomainXMLConfInit(void)
 {
     return virDomainXMLOptionNew(&virTestGenericDomainDefParserConfig,
-                                 NULL, NULL, NULL, NULL);
+                                 NULL, NULL, NULL, NULL, NULL);
 }