[PATCH v3 03/12] test_driver: Implement virDomainDetachDeviceFlags

Luke Yue lukedyue at gmail.com
Mon Nov 29 13:25:06 UTC 2021


On Fri, 2021-11-26 at 16:43 +0100, Martin Kletzander wrote:
> On Wed, Nov 10, 2021 at 10:24:22PM +0800, Luke Yue wrote:
> > Introduce testDomainChgDevice for further development (just like
> > what we
> > did for IOThread). And introduce
> > testDomainDetachDeviceLiveAndConfig for
> > detaching devices.
> > 
> > Signed-off-by: Luke Yue <lukedyue at gmail.com>
> > ---
> > src/test/test_driver.c | 202
> > +++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 202 insertions(+)
> > 
> > diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> > index ea474d55ac..6a7eb12f77 100644
> > --- a/src/test/test_driver.c
> > +++ b/src/test/test_driver.c
> > @@ -10051,6 +10051,207 @@
> > testConnectGetAllDomainStats(virConnectPtr conn,
> >     return ret;
> > }
> > 
> > +static int
> > +testDomainDetachDeviceLiveAndConfig(virDomainDef *vmdef,
> > +                                    virDomainDeviceDef *dev)
> 
> My comment from the previous patch would be nicely usable here as we
> could easily just make use of it.
> 
> Also I see no reason for splitting the next two patches from this
> one.
> 

OK, I will squash them in next version.

> [...]
> 
> > +
> > +static int
> > +testDomainChgDevice(virDomainPtr dom,
> > +                    virDomainDeviceAction action,
> > +                    const char *xml,
> > +                    const char *alias,
> > +                    unsigned int flags)
> > +{
> > +    testDriver *driver = dom->conn->privateData;
> > +    virDomainObj *vm = NULL;
> > +    virDomainDef *def;
> > +    virDomainDeviceDef *dev = NULL;
> > +    unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
> > +    int ret = -1;
> > +
> > +    virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
> > +                  VIR_DOMAIN_AFFECT_CONFIG, -1);
> 
> So here you check for both live and config, saying both of them are
> supported, ...
> 
> > +
> > +    if (!(vm = testDomObjFromDomain(dom)))
> > +        goto cleanup;
> > +
> > +    if (virDomainObjUpdateModificationImpact(vm, &flags) < 0)
> > +        goto cleanup;
> > +
> > +    if (!(def = virDomainObjGetOneDef(vm, flags)))
> > +        goto cleanup;
> > +
> 
> But here it would fail with both since you are explicitly saying you
> want just one definition.
> 
> > +    if (action == VIR_DOMAIN_DEVICE_ACTION_DETACH)
> > +        parse_flags |= VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE;
> > +
> > +    if (xml) {
> > +        if (!(dev = virDomainDeviceDefParse(xml, def, driver-
> > >xmlopt,
> > +                                            driver->caps,
> > parse_flags)))
> > +            goto cleanup;
> > +    } else if (alias) {
> > +        dev = g_new0(virDomainDeviceDef, 1);
> > +        if (virDomainDefFindDevice(def, alias, dev, true) < 0)
> > +            goto cleanup;
> > +    }
> > +
> > +    if (dev == NULL)
> > +        goto cleanup;
> > +
> > +    switch (action) {
> > +    case VIR_DOMAIN_DEVICE_ACTION_ATTACH:
> > +        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> > +                       _("attaching devices is not supported"));
> > +        goto cleanup;
> > +        break;
> > +
> > +    case VIR_DOMAIN_DEVICE_ACTION_DETACH:
> > +        if (testDomainDetachDeviceLiveAndConfig(def, dev) < 0)
> 
> And I kind of see now why you call the function "LiveAndConfig" since
> it
> can do both based on what DomainDef you call it with.  This function
> could be very easily modified to do both live and config properly.

Sorry, I missed that situation, will fix it in next version.

Thanks,
Luke




More information about the libvir-list mailing list