[libvirt-users] Better error codes when stopping a VM that is already stopped

Cole Robinson crobinso at redhat.com
Fri May 21 15:50:10 UTC 2010


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.

- Cole




More information about the libvirt-users mailing list