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