[Libvirt-cim] [PATCH 1 of 3] Add function to validate the client given object path o ComputerSystem

Heidi Eckhart heidieck at linux.vnet.ibm.com
Fri Jan 11 10:11:12 UTC 2008


Kaitlin Rupert wrote:
> Heidi Eckhart wrote:
>
> I like the idea of a validate function.  But the body of GetInstance() 
> is almost identical to the body of validate_domain_ref() - the only 
> exception is that one returns an instance and the other returns a status.
>
> Could these functions be consolidated?  
> You could change get_domain() to  something like _get_domain().  Then 
> get_domain() could call _get_domain() and validate_domain_ref().  When 
> you need the instance returned, you can use get_domain(), otherwise 
> you can just call validate_domain_ref() directly to validate.
>
In general a very good idea, but it causes a "hen and egg" situation. 
The intention of validate_domain_ref() is to be used by other providers 
to check if the client given object path is valid for this system. That 
means validate_domain_ref() can only get the object path as input 
parameter (besides the broker), because it should not be the calling 
function's responsibility to retrieve the domain instance before using 
validate_domain_ref(). This means validate_domain_ref() has to retrieve 
the real instance and compare this one against the client given object path.
If the functions are reordered like above, this causes that get_domain() 
calls _get_domain() twice. First to retrieve the instance for a later 
returning - and second within validate_domain_ref() as it needs the 
instance for the comparison. So validate_domain_ref() can not be used 
internally. Its only an interface for external provider usage.

But your comments made me rethink about the patch. So I've consolidated 
and reordered a bit.
- added a new function to libcmpiutil - cu_validate_ref(ref, inst) - 
that does the check between the system instance and the client given 
instance
- get_domain() is now using the new libcmpiutil function
- the parameter CMPIInstance **inst is now used to "configure" 
get_domain(); for internal usage the inst is returned and for external 
usage this can be ignored by setting it to NULL
- validate_domain_ref() is now only an interface name for the client; 
this could also be removed and the provider has then to call 
get_domain(broker, ref, NULL) or simply ignores the returned instance; 
but what I do not really like is, that this can confuse the reader of 
the code; but I'm open for discussion and opinions

Will send out the patch soon.

-- 
Regards

Heidi Eckhart
Software Engineer
IBM Linux Technology Center - Open Hypervisor




More information about the Libvirt-cim mailing list