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