On Mon, Apr 12, 2010 at 03:41:44PM +0200, Gerhard Stenzel wrote: > Hi, I have a small libvirt-TCK script, which fails in a for me > unexpected way: > ########################################################## > use strict; > use warnings; > > use Term::ReadKey; > > use Test::More tests => 4; > > use Sys::Virt::TCK; > > my $tck = Sys::Virt::TCK->new(); > my $conn = eval { $tck->setup(); }; > BAIL_OUT "failed to setup test harness: $@" if $@; > END { $tck->cleanup if $tck; } > > # first domain > my $xml = $tck->generic_domain("tck")->as_xml; > my $dom; > ok_domain(sub { $dom = $conn->create_domain($xml) }, "defined domain > config"); > my $uuid = $dom->get_uuid_string(); > diag $uuid; > $xml = $dom->get_xml_description; > > diag "Starting inactive domain config"; > ok($dom->get_id() > 0, "running domain has an ID > 0"); > $dom->destroy; > > # new domain > my $newxml = $tck->generic_domain("tck")->as_xml; > > my $newdom; > ok_domain(sub { $newdom = $conn->create_domain($newxml) }, "defined > domain config"); > my $newuuid = $newdom->get_uuid_string(); > diag $newuuid; > $newxml = $newdom->get_xml_description(); > > ok($newdom->get_id() > 0, "running domain has an ID > 0"); > $newdom->destroy; > ########################################################## > > scripts/network/001-prepare-image.t .. > 1..4 > ok 1 - defined domain config > # 4317db52-00bb-3cac-5639-91cdce05a717 > # Starting inactive domain config > ok 2 - running domain has an ID > 0 > ok 3 - defined domain config > # 4317db52-00bb-3cac-5639-91cdce05a717 > libvirt error code: 42, message: Domain not found: no domain with > matching uuid '4317db52-00bb-3cac-5639-91cdce05a717' > > ########################################################## > If I change > my $newxml = $tck->generic_domain("tck")->as_xml; > to > my $newxml = $tck->generic_domain("tck2")->as_xml; > the script works as expected. > > I am wondering if this is a problem in the libvirt-perl wrapper or > working as designed and my expectation is simply wrong? It is a subtle issue crossing several layers. libvirt internally caches virDomainPtr instances based on name. You created a object in the perl layer '$dom' with the name, and then you create a new instance with the same name, but assign to a diferent perl object '$newdom'. This means that the old virDomainPtr associated with $dom still exists. If you explicitly set '$dom = undef' before creating the second domain you should release the old handle & make it all work as expected Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list