Nova M3 : Per-Property GetObject Optimizations
Rev 1.2, 23--Jun-99, raymcc
1.0 Introduction
This memo covers an optimization technique intended for internal use between CIMOM and providers during execution of complex queries. During construction of association objects, there are many cases where the object is only used for identification purposes (its key properties) and all other properties are ignored and the object is quickly discarded.
Considerable latency is introduced by some providers when build instances, since all properties must be populated. Some type of mechanism to signal the provider that the caller only needs a subset is required.
RAID 47566 is a critical bug for WMI Nova M3. The necessary optimization fixes cannot be achieved without functionality described here.
Associated RAID references: 52062, 52063, 47566 (P1).
2.0 Proposed Model
The model will make use of the IWbemContext object when used with read APIs, such as IWbemServices::GetObject. The context object will serve as a hint to the provider which properties the caller is interested in.
The IWbemServices APIs which will support this functionality are limited to
For other APIs, the functionality is already present (as in ExecQuery) or not relevant.
The provider is not required to interpret the context object or to honor the request, but may continue to provide the object as it normally does, as this would result in a superset of the user's request. However, if the provider is capable of interpreting the object, it should return instances with only the properties set which are requested.
The intent is that the provider can short-circuit its internal implementation and provide the instance much faster. If no speed optimizations are possible, the provider may as well return the entire instance.
CIMOM itself is not required to honor the request in the IWbemContext object with regard to repository requests, as it would actually result in a slowdown to remove properties from an instance.
Note: Extending this mechanism to cover other IWbemServices methods such as ExecQuery will be covered in the WMI Quasar Release.
2.0 Context Object Format
The context object must have the following contents:
Context Value | Meaning |
__GET_EXTENSIONS | A boolean value (VT_BOOL) used to signal that per-property gets are being used. This allows a quick single check without having to enumerate the entire context object. If any of the other values are used, this one must be. |
__GET_EXT_PROPERTIES | An array of strings listing the properties to be retrieved. Cannot be simultaneously specified with __GET_EXT_KEYS_ONLY. |
__GET_EXT_KEYS_ONLY | A boolean indicating that only key(s) should be provided. Cannot be simultaneously specified with __GET_EXT_PROPERTIES. |
Notes:
(1) Further extensions, such as "No Expensive Properties" will be defined for
WMI Quasar.
(2) There is no property name "*" as in a query.
(3) Since it is not possible to enforce that the user uses only one of
__GET_EXT_PROPERTIES and __GET_EXT_KEYS_ONLY, __GET_EXT_KEYS_ONLY will take precedence if
both are in fact (incorrectly) used.