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

Guido Winkelmann guido-libvi at unknownsite.de
Wed Jun 30 17:42:17 UTC 2010


Am Freitag, 21. Mai 2010 schrieb Cole Robinson:
> 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.

That's not a real solution. It might reduce the frequency with which the 
problem occurs, but it's still subject to a race condition.

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

After switching from libvirt 0.8.1 to libvirt from git, I'm getting 
VIR_ERR_RPC when trying to stop a domain that is not running. :(

Could this be caused by a mismatch of the libvirt versions between the machine 
my code is running on (0.8.1) and the version of libvirt on the qemu host 
(git)?

	Guido




More information about the libvirt-users mailing list