[libvirt] virDomainGetInfo() returns wrong domain state

Michal Privoznik mprivozn at redhat.com
Thu Sep 26 07:23:54 UTC 2013


On 24.09.2013 16:51, Panday Ritesh Sharma (rpanday) wrote:
>  
> 
> Hi Team,
> 
> I have written below code to get the VM state at run time. I found,
> though the VM is in shut-off state, when I use the function
> virDomainGetInfo();  I get state as running. Could you please let me
> know what wrong I am doing. To know the actual VM state I used ‘virsh
> list’ and it clearly shows the VM is in shut-off state. Please find the
> log and code snippet below.
> 
>  
> 
> Log from virsh:
> 
> =================
> 
> [host:~]$ virsh list  --all
> 
> Id    Name                           State
> 
> ----------------------------------------------------
> 
> 1     calvados                       running
> 
> 2     LCXR                           running
> 
> 3     default-sdr--1                 running
> 
> -     test--2                        shut off
> 
>  
> 
> Out put:
> 
> =========
> 
> 04.03.06.698923264:INFO: vm_libvirt_state_to_vmm_state: state returned is 1
> 
>  
> 
> Note : Here 1 is actually running.
> 
>  
> 
> Code snippet:
> 
> ===============
> 
> enum cidl_vmm_vm_state
> 
> vm_libvirt_state_to_vmm_state(unsigned char libvirt_state)
> 
> {
> 
>     enum cidl_vmm_vm_state state;
> 
>     INFO("%s: state returned is %u\n",__FUNCTION__, libvirt_state);
> <<<<<<<<<<<<<<<<<<
> 
>     if (libvirt_state == VIR_DOMAIN_RUNNING) {
> 
>         state = cidl_vm_state_running;
> 
>     } else if ((libvirt_state == VIR_DOMAIN_PAUSED) ||
> 
>                (libvirt_state == VIR_DOMAIN_BLOCKED)) {
> 
>         state = cidl_vm_state_paused;
> 
>     } else if (libvirt_state == VIR_DOMAIN_SHUTOFF) {
> 
>         state = cidl_vm_state_defined;
> 
>     } else {
> 
>         state = cidl_vm_state_not_defined;
> 
>     }
> 
>     return state;
> 
> }

While this part ^^^ looks okay, the part below looks suspicious. I mean
not from API perspective, but from data perspective.
> 
>  
> 
>            virDomainInfo res_util;
> 
>             virDomainPtr dom = virDomainLookupByName(virt,
> 
>                                                      private_names[vm_idx]);

Are you sure you're passing the correct name here? That's the only
possible source of the error here.

> 
>             res = virDomainGetInfo(dom, &res_util);
> 
>             vminfo[vm_idx].vm_state =
> 
>                   vm_libvirt_state_to_vmm_state(res_util.state);
> 
>  

Michal




More information about the libvir-list mailing list