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

Daniel P. Berrange berrange at redhat.com
Mon May 24 10:26:16 UTC 2010


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




More information about the libvirt-users mailing list