[libvirt] [PATCH 02/50] list: Expose pool type via virStoragePoolGetInfo

Osier Yang jyang at redhat.com
Fri Jul 20 13:00:21 UTC 2012


On 2012年07月20日 20:44, Daniel P. Berrange wrote:
> On Fri, Jul 20, 2012 at 02:28:26PM +0200, Jiri Denemark wrote:
>> On Fri, Jul 20, 2012 at 00:40:33 +0800, Osier Yang wrote:
>>> Mainly for later patches' use, to filter the pools by pool type.
>>>
>>> include/libvirt/libvirt.h.in: Add enum virStoragePoolType; Add
>>> pool type to virStoragePoolInfo.
>>>
>>> src/conf/storage_conf.h: Remove enum virStoragePoolType.
>>>
>>> src/storage/storage_driver.c: Expose pool type via storagePoolGetInfo.
>>> ---
>>>   include/libvirt/libvirt.h.in |   17 +++++++++++++++++
>>>   src/conf/storage_conf.h      |   19 -------------------
>>>   src/storage/storage_driver.c |    2 ++
>>>   3 files changed, 19 insertions(+), 19 deletions(-)
>>>
>>> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
>>> index e34438c..2820b2a 100644
>>> --- a/include/libvirt/libvirt.h.in
>>> +++ b/include/libvirt/libvirt.h.in
>>> @@ -2335,6 +2335,22 @@ typedef struct _virStoragePool virStoragePool;
>>>    */
>>>   typedef virStoragePool *virStoragePoolPtr;
>>>
>>> +typedef enum {
>>> +    VIR_STORAGE_POOL_DIR,      /* Local directory */
>>> +    VIR_STORAGE_POOL_FS,       /* Local filesystem */
>>> +    VIR_STORAGE_POOL_NETFS,    /* Networked filesystem - eg NFS, GFS, etc */
>>> +    VIR_STORAGE_POOL_LOGICAL,  /* Logical volume groups / volumes */
>>> +    VIR_STORAGE_POOL_DISK,     /* Disk partitions */
>>> +    VIR_STORAGE_POOL_ISCSI,    /* iSCSI targets */
>>> +    VIR_STORAGE_POOL_SCSI,     /* SCSI HBA */
>>> +    VIR_STORAGE_POOL_MPATH,    /* Multipath devices */
>>> +    VIR_STORAGE_POOL_RBD,      /* RADOS Block Device */
>>> +    VIR_STORAGE_POOL_SHEEPDOG, /* Sheepdog device */
>>> +
>>> +#ifdef VIR_ENUM_SENTINELS
>>> +    VIR_STORAGE_POOL_LAST,
>>> +#endif
>>> +} virStoragePoolType;
>>>
>>>   typedef enum {
>>>       VIR_STORAGE_POOL_INACTIVE = 0, /* Not running */
>>> @@ -2365,6 +2381,7 @@ typedef enum {
>>>   typedef struct _virStoragePoolInfo virStoragePoolInfo;
>>>
>>>   struct _virStoragePoolInfo {
>>> +  int type;                      /* virStoragePoolType */
>>>     int state;                     /* virStoragePoolState flags */
>>>     unsigned long long capacity;   /* Logical size bytes */
>>>     unsigned long long allocation; /* Current allocation bytes */
>>
>> Oops, you can't change public structs. Any combination of an app and libvirt
>> library that would not have the same definition of this struct would fail.

Oh, my bad. How about a new API like:

int virStoragePoolGetInfoFlags (virStoragePoolPtr pool,
                                 virTypedParameterPtr params,
                                 int *nparams,
                                 unsigned int flags);

With the param fields like:

# define VIR_STORAGE_POOL_GET_INFO_STATE       "state"
# define VIR_STORAGE_POOL_GET_INFO_TYPE        "type"
# define VIR_STORAGE_POOL_GET_INFO_CAPACITY    "capacity"
# define VIR_STORAGE_POOL_GET_INFO_ALLOCATION  "allocation"

Assuming one wants to get more info about a pool in future, we would
need a new API like this, with no suffering from not able to change
to public struct.

>
> Fortunately no other part of this patch series appears to rely on this
> extra field. Just remove this addition&  the place in storage_driver.c
> which sets it. The rest of this patch series can still be reviewed
> as is

The 'type' is used to filter the returned pool objects, so patches
1/50 to 14/50 should be skipped, though there is several patches
in the range not related with storage pool specificly.

The left are fine to review.

I will add a new API virStoragePoolGetInfoFlags if no disagreement,
and rebase the storage pool patches as a v2.

Thanks for pointing it out.

Regards,
Osier




More information about the libvir-list mailing list