Bug 833769 - update virDomainDef with xml config.
update virDomainDef with xml config.
Product: Virtualization Tools
Classification: Community
Component: libvirt (Show other bugs)
x86_64 Linux
unspecified Severity medium
: ---
: ---
Assigned To: Libvirt Maintainers
Depends On:
  Show dependency treegraph
Reported: 2012-06-20 06:32 EDT by xuanmao
Modified: 2012-06-20 07:00 EDT (History)
2 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2012-06-20 07:00:13 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description xuanmao 2012-06-20 06:32:22 EDT
Libvirt Version: 0.9.8

   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;  

    vm = virDomainFindByUUID(&driver->domains, dom->uuid);

    if (!vm) {
	char uuidstr[VIR_UUID_STRING_BUFLEN];
	virUUIDFormat(dom->uuid, uuidstr);
		_("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;

    persistentDef->running_mode = opt;

    ret = virDomainSaveConfig(driver->configDir, persistentDef);

    ret = 0;
    if (qemuDomainObjEndJob(driver, vm) == 0)
	vm = NULL;

    if (vm)
	return ret;
Comment 1 Daniel Berrange 2012-06-20 07:00:13 EDT
Bugzilla is not the right place to hold discussions about how to understand libvirt code internals. Please take your questions to the llibvirt developers mailing list as mentioned here:


Note You need to log in before you can comment on or make changes to this bug.