On Fri, May 21, 2010 at 11:50:10AM -0400, Cole Robinson wrote: > On 05/21/2010 08:11 AM, Guido Winkelmann wrote: > > Hi, > > > > Sometimes when stopping a virtual domain using virDomainDestroy(), I come > > across a domain that is already stopped. (For example when someone already > > stopped the domain manually using virsh or because the guest OS issued a > > shutdown.) This is a special case that I absolutely need to catch and handle. > > > > In virt-manager, we basically do: > > def destroy(vm): > if vm.is_running(): > vm.destroy() > return > > I'd recommend doing something similar in your app: no reason to run a > command if you can check ahead of time if it will fail. You can use > virDomainIsActive to check the domain status. > > > Unfortunately, when this happens, and I call virGetLastError() afterwards, I > > always just get the error code VIR_ERR_OPERATION_INVALID, which doesn't look > > very precise to me... > > > > Two questions about this: > > > > Is the domain not running at that moment the only possible condition that can > > trigger this particular error code when calling virDomainDestroy()? > > > > Yes, there are other errors but none that use OPERATION_INVALID. > > > Can't we have a more obvious/precise error code in that case, like > > VIR_ERR_DOMAIN_NOT_RUNNING or something like that? > > > > Sounds like a reasonable idea, won't help you though if your app needs > to support older versions. VIR_ERR_INVALID_OPERATION is already precisely defined to mean that the operation request is not valid for the current state of the VM. VIR_ERR_DOMAIN_NOT_RUNNING would just be replicating those semantics, but needlessly restricting itself to the case of not running, so you'd end up having to add ALREADY_RUNNING, ALREADY_PAUSED, etc which is just pointless 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 :|