[Libvirt-cim] [PATCH 1 of 2] Add property filtering to RASD provider

Heidi Eckhart heidieck at linux.vnet.ibm.com
Mon Feb 25 11:24:34 UTC 2008


Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert <karupert at us.ibm.com>
> # Date 1203702578 28800
> # Node ID 2bff66d74872c62ef38fca81fafd32f0d7fb126a
> # Parent  d02f5729977381ec6f5aec3503dc5f970a428b88
> Add property filtering to RASD provider.
>
> wbemcli is unable to parse embedded instance arrays, so this additional property filtering support will allow queries to exclude the HostResource property.
>
> Failing Query:
> wbemcli ei http://localhost/root/virt:Xen_ProcResourceAllocationSettingData
> *
> * wbemcli: Parse Exception: Unknown attribute in list for PROPERTY.ARRAY (EMBEDDEDOB)
>
> Passing Query:
> wbemcli ei http://localhost/root/virt:Xen_ProcResourceAllocationSettingData ResourceType
>
> Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>
>
> diff -r d02f57299773 -r 2bff66d74872 src/Virt_RASD.c
> --- a/src/Virt_RASD.c	Fri Feb 22 12:54:52 2008 +0100
> +++ b/src/Virt_RASD.c	Fri Feb 22 09:49:38 2008 -0800
> @@ -312,6 +314,14 @@ static CMPIInstance *rasd_from_vdev(cons
>                                    NAMESPACE(ref));
>          if (inst == NULL)
>                  return inst;
> +
> +        if (properties != NULL) {
> +                const char *keys[] = {"InstanceID", NULL};
> +                s = CMSetPropertyFilter(inst, properties, keys);
> +                /* FIXME - in case of an error, should we continue on? */
> +                if (s.rc != CMPI_RC_OK)
> +                        CU_DEBUG("Unable to set property filter: %d", s.rc);
> +        }
>   
That's a very good point to enable the provider interfaces for the 
property filtering :). I think it makes sense to move this code into 
get_typed_instance() of libxkutil, to avoid implementing these lines for 
every provider. What's then only necessary is routing the properties 
list through the interfaces. But you will now think ... and how about 
the keys ? Well, that's an interesting thing. The CMPI 2.0 spec tells 
the following about the keys:
CMPI 2.0 Spec; "The keyList argument shall be ignored by the MB; it is 
here to maintain binary compatibility with previous specifications. 
Providers should explicitly set the key names and values via the 
CMPIInstanceMI.setObjectPath() function."
Translated I think this means, that we can ignore the keys by setting it 
to NULL. Do you agree ?

You can also skip the check if a the properties filter is there, as NULL 
is interpreted as "all properties accepted".
CMPI 2.0 Spec: "The propertyList argument defines the properties that 
will be accepted by subsequent setProperty() operations. The 
propertyList argument is an array of pointers to character strings, 
terminated by a NULL pointer. A NULL value effectively means that all 
properties will be accepted. A pointer to an empty list means that no 
properties will be accepted."

>
>  CMPIStatus get_rasd_by_ref(const CMPIBroker *broker,
>                             const CMPIObjectPath *reference,
> +                           const char **properties,
>                             CMPIInstance **_inst)
>  {
>          CMPIStatus s = {CMPI_RC_OK, NULL};
> @@ -435,7 +447,7 @@ CMPIStatus get_rasd_by_ref(const CMPIBro
>                  goto out;
>          }
>
> -        s = get_rasd_by_name(broker, reference, name, type, _inst);
> +        s = get_rasd_by_name(broker, reference, name, type, properties, _inst);
>   
Sorry, I broker your patch with my previous changes at this line.


-- 
Regards

Heidi Eckhart
Software Engineer
IBM Linux Technology Center - Open Hypervisor




More information about the Libvirt-cim mailing list