[Libvirt-cim] [PATCH] Fix AllocationCapabilities to make EnumInstances and EnumInstanceNames work

Jay Gagnon grendel at linux.vnet.ibm.com
Tue Nov 20 14:57:10 UTC 2007


Dan Smith wrote:
> JG> +        for (i = 0; device_pool_names[i]; i++) {
> JG> +                s = get_pool_by_type(broker,
> JG> +                                     conn,
> JG> +                                     device_pool_names[i],
> JG> +                                     NAMESPACE(ref),
> JG> +                                     &device_pool_list);
> JG> +                if (s.rc != CMPI_RC_OK) {
> JG> +                        cu_statusf(broker, &s,
> JG> +                                   CMPI_RC_ERR_FAILED,
> JG> +                                   "Error fetching device pools");
> JG> +                        goto out;
> JG> +                }
> JG> +        }
>
> We do this elsewhere too.  Perhaps we need a get_all_pools() function
> in Virt_DevicePool?
>   
Sounds reasonable.  I'll do that.
> JG> +
> JG> +        for (i = 0; i < device_pool_list.cur; i++) {
> JG> +                inst = get_typed_instance(broker,
> JG> +                                          "AllocationCapabilities",
> JG> +                                          NAMESPACE(ref));
> JG> +                if (inst == NULL) {
> JG> +                        cu_statusf(broker, &s,
> JG> +                                   CMPI_RC_ERR_FAILED,
> JG> +                                   "Could not get alloc_cap instance");
> JG> +                        goto out;
> JG> +                }
> JG> +
> JG> +                s = cu_copy_prop(broker, device_pool_list.list[i], inst, 
> JG> +                                 "InstanceID", NULL);
>
> This function looks great, but I think we're missing the patch that
> adds it to libcmpiutil :)
>   
Oops.  I'll send that out when I send the next iteration of this.
> JG> +                if (s.rc != CMPI_RC_OK) {
> JG> +                        cu_statusf(broker, &s,
> JG> +                                   CMPI_RC_ERR_FAILED,
> JG> +                                   "Error copying InstanceID");
> JG> +                        goto out;
> JG> +                }
> JG> +                
> JG> +                s = cu_copy_prop(broker, device_pool_list.list[i], inst, 
> JG> +                                 "ResourceType", NULL);
> JG> +                if (s.rc != CMPI_RC_OK) {
> JG> +                        cu_statusf(broker, &s,
> JG> +                                   CMPI_RC_ERR_FAILED,
> JG> +                                   "Error copying InstanceID");
> JG> +                        goto out;
> JG> +                }
> JG> +                
> JG> +                inst_list_add(&alloc_cap_list, inst);
> JG> +        }
>
> To reduce the size of this loop, and to be in line with our other
> instance providers, I think it would be good to define a function that
> looks something like this:
>
>   CMPIStatus get_ac_instance(CMPIInstance *pool, CMPIInstance **ac);
>
> This would encapsulate things a bit and also would provide a clean
> hook for ElementCapabilities, which will need to, given a pool, get an
> instance of AllocationCapabilities.
>   
Sure, no problem.  Given all the inexplicable struggle getting that bit
working I guess I didn't want to look at it anymore, so the lack of
encapsulation didn't really strike me.  Easy fix though, and good call.

-- 

-Jay




More information about the Libvirt-cim mailing list