Libvirt Version: 0.9.8
Hi:
I added a new api for qemu_driver. and both added libvirt.c and remote.
I tested it and it worked well. the function of this new api was add a new
field in xml config of domain. (I added it like qemudDomainSetMemoryFlags)at
the same time, I added a new member to struct virDomainDef. then I tested xml
config converted to virDomaindef and virDomainDef converted to xml config both
well(just tested this new api). But there was a problem, if I change the memory
size or cpu number then apply it with virtManager. the xml config was changed.
but there is no field in the xml what I added. I guest the virDomainDef member
in virDomainObjPtr wasn't update.
I have no idea, can you give me some ideas? thanks!
here is my code in qemu_driver.c:
static int qemudDomainSetCustomOptions(virDomainPtr dom, char *opt)
{
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm;
virDomainDefPtr persistentDef = NULL;
int ret = -1;
qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
qemuDriverUnlock(driver);
if (!vm) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(dom->uuid, uuidstr);
qemuReportError(VIR_ERR_NO_DOMAIN,
_("no domain with matching uuid '%s'"), uuidstr);
goto cleanup;
}
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
if (!vm->persistent) {
qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("cannot change persistent config of a transient domain"));
goto endjob;
}
if (!(persistentDef = virDomainObjGetPersistentDef(driver->caps, vm)))
goto endjob;
sa_assert(persistentDef);
persistentDef->running_mode = opt;
ret = virDomainSaveConfig(driver->configDir, persistentDef);
ret = 0;
endjob:
if (qemuDomainObjEndJob(driver, vm) == 0)
vm = NULL;
cleanup:
if (vm)
virDomainObjUnlock(vm);
return ret;
}
xuanmao_001
_______________________________________________
libvirt-users mailing list
libvirt-users@redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-users