[Libvirt-cim] [PATCH] (#2) Add three new OperationalStatus states and map them all to libvirt states

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Thu Aug 13 16:23:12 UTC 2009


Richard Maciel wrote:
> # HG changeset patch
> # User Richard Maciel <rmaciel at linux.vnet.ibm.com>
> # Date 1250173962 10800
> # Node ID cb885d38b2d89130c13342aa6e7455f991e8fda5
> # Parent  fc6b58380e5f04b09514bdfe8aef54ed0a013e42
> (#2) Add three new OperationalStatus states and map them all to libvirt states

These states look like values for OperatingStatus.. is that what you 
meant instead of OperationalStatus?

> 
> OperationalStatus states added:
> STARTED
> SUSPENDED
> RELOCATED
> 
> #2:
>   Fixed patch submission date
> 
> Signed-off-by: Richard Maciel <rmaciel at linux.vnet.ibm.com>
> 
> diff -r fc6b58380e5f -r cb885d38b2d8 src/Virt_ComputerSystem.c
> --- a/src/Virt_ComputerSystem.c	Thu Aug 13 11:31:46 2009 -0300
> +++ b/src/Virt_ComputerSystem.c	Thu Aug 13 11:32:42 2009 -0300
> @@ -187,7 +187,7 @@
>          }
>  }
> 
> -static uint16_t state_lv_to_cim_os(const char lv_state)
> +static uint16_t state_lv_to_cim_os(const char lv_state, const bool migrating)
>  {
>          enum CIM_op_status {
>                  CIM_OP_STATUS_UNKNOWN = 0,
> @@ -208,25 +208,33 @@
>                  CIM_OP_STATUS_DORMANT = 15,
>                  CIM_OP_STATUS_COMPLETED = 17,
>                  CIM_OP_STATUS_POWER_MODE = 18,
> +                CIM_OP_STATUS_STARTED = 32768,
> +                CIM_OP_STATUS_SUSPENDED = 32769,
> +                CIM_OP_STATUS_RELOCATED = 32770,

If you're trying to add support for OperatingStatus, then I would create 
a new enum specifically for OperatingStatus values.

I would name them differently too so that it is clear the values are 
different from the OperationalStatus ones.

>          };
> 
> +        
> +        if (migrating)
> +                return CIM_OP_STATUS_RELOCATED;
> +
>          switch (lv_state) {
>          case VIR_DOMAIN_NOSTATE:
>          case VIR_DOMAIN_SHUTDOWN:
>          case VIR_DOMAIN_SHUTOFF:
> -                return CIM_OP_STATUS_DORMANT;
> +                return CIM_OP_STATUS_STOPPED;

This should be left as is.  This is the correct state for OperationalStatus.

> 
>          case VIR_DOMAIN_CRASHED:
>                  return CIM_OP_STATUS_ERROR;
> 
>          case VIR_DOMAIN_RUNNING:
> +                return CIM_OP_STATUS_STARTED;
> +
>          case VIR_DOMAIN_BLOCKED:
>          case VIR_DOMAIN_PAUSED:
> -                return CIM_OP_STATUS_OK;
> +                return CIM_OP_STATUS_SUSPENDED;
> 
>          default:
>                  return CIM_OP_STATUS_UNKNOWN;
> -
>          }
>  }
> 
> @@ -271,6 +279,7 @@
>          CMPIArray *array;
>          CMPIStatus s;
>          struct infostore_ctx *infostore = NULL;
> +        bool migrating = false;
> 
>          ret = virDomainGetInfo(dom, &info);
>          if (ret != 0) 
> @@ -290,14 +299,19 @@
>          array = CMNewArray(broker, 1, CMPI_uint16, &s);
>          if ((s.rc != CMPI_RC_OK) || (CMIsNullObject(array)))
>                  return 0;
> +        
> +        infostore = infostore_open(dom);
> 
> -        op_status = state_lv_to_cim_os((const int)info.state);
> +        if (infostore != NULL) 
> +                migrating = infostore_get_bool(infostore, "migrating");
> +        
> +        op_status = state_lv_to_cim_os((const int)info.state, migrating);

If migrating is false, then the state is set to "Unknown"

> +
>          CMSetArrayElementAt(array, 0, &op_status, CMPI_uint16);
> 
>          CMSetProperty(instance, "OperationalStatus",
>                        (CMPIValue *)&array, CMPI_uint16A);
> 
> -        infostore = infostore_open(dom);
>          if (infostore != NULL)
>                  req_state = (uint16_t)infostore_get_u64(infostore, "reqstate");
>          else



-- 
Kaitlin Rupert
IBM Linux Technology Center
kaitlin at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list