
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 :|