Re: Fwd: undefining and redefining a Domain from libvirt java bindings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2010/10/13 Matthias Bolte <matthias.bolte@xxxxxxxxxxxxxx>:
> 2010/10/12 Matthias Bolte <matthias.bolte@xxxxxxxxxxxxxx>:
>> 2010/10/12 Ravi Pawar <ravifc@xxxxxxxxx>:
>>> hi,
>>>
>>> i am trying to undefine a domain  by using dm.undefine();
>>> and then trying to create one with same name is giving me error saying
>>> 'Domain not found: no domain with matching uuid
>>> 'aeae9d4e-17cb-b661-a612-88ac677c28c1'
>>>
>>> i have attached my test program which reproduces the issue.
>>>
>>> please let me know where i am going wrong?
>>>
>>> configuration: libvirt : 0.6.3
>>>                     Java Bindings: 0.4.2
>>
>> I didn't look into this problem in detail, but I think you need to
>> call free on the Domain object after you undefined it.
>>
>> dm.undefine();
>> dm.free();
>> dm = null;
>>
>> Matthias
>>
>
> Okay, calling free doesn't help. I tested it with libvirt 0.6.3 and
> libvirt-java 0.4.6 and can reproduce your problem.
>
> This problem is fixed in libvirt 0.8.2. I didn't track it down to the
> actual commit.
>
> So in order to fix your problem you'll have to update libvirt to 0.8.2
> or identify the commit between 0.8.1 and 0.8.2 that fixes your problem
> and backport it to 0.6.3.
>
> Matthias
>

I found the commit (30ec755ecb3350116d2851afa0de02e77dbe2c51) that
avoids the problem in your original test code. I say 'avoid' instead
of 'fix' because the actual fix is to call free on the domain objects
after undefining them as I initially suggested. But when I tested this
I did it wrong and jumped to false conclusions.

Just to say it once again: Adding free calls solve this problem for me
with libvirt 0.6.3.

I attached a modified version of your test code that works for me.

Matthias
import org.libvirt.Connect;
import org.libvirt.Domain;
import org.libvirt.LibvirtException;

public class TestRedef {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Connect conn = null;
		int flags = 0;

		try {
			conn = new Connect("qemu:///system", false);

			String dumpxml = "<domain type='kvm'>"+
			  "<name>tt2</name>"+
			  "<memory>524288</memory>"+
			  "<currentMemory>524288</currentMemory>"+
			  "<vcpu>1</vcpu>"+
			  "<os>"+
			  "  <type arch='x86_64'>hvm</type>"+
			  "  <boot dev='hd'/>"+
			  "</os>"+
			  "<features>"+
			  "  <acpi/>"+
			  "  <apic/>"+
			   " <pae/>"+
			  "</features>"+
			  "<clock offset='utc'/>"+
			  "<on_poweroff>destroy</on_poweroff>"+
			  "<on_reboot>restart</on_reboot>"+
			  "<on_crash>restart</on_crash>"+
			  "<devices>"+
			  "  <disk type='file' device='disk'>"+
			  "    <driver name='qemu' cache='none'/>"+
			  "    <source file='/var/lib/libvirt/images/tt.img'/>"+
			  "    <target dev='hda' bus='ide'/>"+
			  "  </disk>"+
			  "  <interface type='network'>"+
			  "    <mac address='54:52:00:02:02:2c'/>"+
			  "    <source network='default'/>"+
			  "  </interface>"+
			  "  <serial type='pty'>"+
			  "    <target port='0'/>"+
			  "  </serial>"+
			  "  <console type='pty'>"+
			  "    <target port='0'/>"+
			  "  </console>"+
			  "  <input type='mouse' bus='ps2'/>"+
			  "  <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>"+
			  "</devices>"+
			"</domain>";

			Domain dm = null;

			System.out.println("lookup of tt2...");
			try {
				dm = conn.domainLookupByName("tt2");
			} catch (LibvirtException e) {
				// TODO: handle exception
			}
			System.out.println("lookup of tt2... done");

			if (dm != null) {
				System.out.println("undefine tt2...");
				dm.undefine();
				dm.free();
				System.out.println("undefine tt2... done");
			}

			System.out.println("first define/undefine tt2...");
			Domain dm1 = conn.domainDefineXML(dumpxml);
			System.out.println("first define/undefine tt2... defined");
			dm1.undefine();
			dm1.free();
			System.out.println("first define/undefine tt2... undefined");

			System.out.println("second define/undefine tt2...");
			Domain dm2 = conn.domainDefineXML(dumpxml);
			System.out.println("second define/undefine tt2... defined");
			dm2.undefine();
			dm2.free();
			System.out.println("second define/undefine tt2... undefined");
		} catch (LibvirtException e) {
			System.out.println("exception caught:" + e);
			System.out.println(e.getError());
			return;
		}
	}
}

[Index of Archives]     [Virt Tools]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]

  Powered by Linux