
Kaitlin Rupert wrote:
+ + 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 ?
I tried using NULL for the keys based on the same line from the CMPI spec, but this crashed the provider. I might be missing something though. I've tested it with Pegasus and sfcb: Pegasus returns with FAILED and does not set the propertylist sfcb is crashing So my interpretation of this description seem to be wrong and the keyList is needed. Thanks for evaluating this.
-- Regards Heidi Eckhart Software Engineer IBM Linux Technology Center - Open Hypervisor