[libvirt] [PATCH 1/7] fspool: introduce filesystem pools API

Daniel P. Berrange berrange at redhat.com
Thu Aug 25 01:00:51 UTC 2016


On Fri, Aug 19, 2016 at 06:03:29PM +0300, Olga Krishtal wrote:
> API follows the API of storage pools closely in parts which
> do not differ for filesystems.
> 
> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> ---
>  include/libvirt/libvirt-fs.h | 273 +++++++++++++++++++++++++++++++++++++++++++
>  include/libvirt/libvirt.h    |   1 +
>  2 files changed, 274 insertions(+)
>  create mode 100644 include/libvirt/libvirt-fs.h
> 
> diff --git a/include/libvirt/libvirt-fs.h b/include/libvirt/libvirt-fs.h
> new file mode 100644
> index 0000000..4385220
> --- /dev/null
> +++ b/include/libvirt/libvirt-fs.h


> +typedef enum {
> +    VIR_FS_POOL_CREATE_NORMAL = 0,
> +
> +    /* Create the fspool and perform fspool build without any flags */
> +    VIR_FS_POOL_CREATE_WITH_BUILD = 1 << 0,
> +
> +    /* Create the fspool and perform fspool build using the
> +     * exclusive to VIR_FS_POOL_CREATE_WITH_BUILD_NO_OVERWRITE */
> +    VIR_FS_POOL_CREATE_WITH_BUILD_OVERWRITE = 1 << 1,
> +
> +    /* Create the pool and perform pool build using the
> +     * VIR_FS_POOL_BUILD_NO_OVERWRITE flag. This is mutually
> +     * exclusive to VIR_FS_POOL_CREATE_WITH_BUILD_OVERWRITE */
> +    VIR_FS_POOL_CREATE_WITH_BUILD_NO_OVERWRITE = 1 << 2,
> +} virFsPoolCreateFlags;


nitpick, I suggest we use  virFSPool, not virFsPool, since 'fs'
is an abbreviation and thus normal to capitalize both parts.

> +
> +typedef enum {
> +    VIR_FS_POOL_BUILD_NEW  = 0,   /* Regular build from scratch */
> +    VIR_FS_POOL_BUILD_NO_OVERWRITE = (1 << 2),  /* Do not overwrite existing pool */
> +    VIR_FS_POOL_BUILD_OVERWRITE = (1 << 3),  /* Overwrite data */
> +} virFsPoolBuildFlags;
> +
> +/**
> + * virFsPool:
> + *
> + * a virFsPool is a private structure representing a fspool
> + */
> +typedef struct _virFsPool virFsPool;
> +
> +/**
> + * virFsPoolPtr:
> + *
> + * a virFSPoolPtr is pointer to a virFsPool private structure, this is the
> + * type used to reference a fspool in the API.
> + */
> +typedef virFsPool *virFsPoolPtr;
> +
> +typedef enum {
> +    VIR_FS_POOL_INACTIVE = 0,
> +    VIR_FS_POOL_BUILDING = 1,
> +    VIR_FS_POOL_RUNNING = 2,
> +
> +# ifdef VIR_ENUM_SENTINELS
> +    VIR_FS_POOL_STATE_LAST
> +# endif
> +} virFsPoolState;
> +
> +typedef struct _virFsPoolInfo virFsPoolInfo;
> +
> +struct _virFsPoolInfo {
> +    int state;                     /* virFsPoolState flags */
> +    unsigned long long capacity;   /* Logical size bytes */
> +    unsigned long long allocation; /* Current allocation bytes */
> +    unsigned long long available;  /* Remaining free space bytes */
> +};
> +
> +typedef virFsPoolInfo *virFsPoolInfoPtr;
> +
> +/**
> + * virFsItem:
> + *
> + * a virFsItem is a private structure representing a fspool item
> + */
> +typedef struct _virFsItem virFsItem;
> +
> +/**
> + * virFsItemPtr:
> + *
> + * a virFsItemPtr is pointer to a virFsItem private structure, this is the
> + * type used to reference a fspool item in the API.
> + */
> +typedef virFsItem *virFsItemPtr;
> +
> +typedef struct _virFsItemInfo virFsItemInfo;
> +
> +typedef enum {
> +    VIR_FS_ITEM_DIR = 0,
> +    VIR_FS_ITEM_LAST
> +} virFsItemType;
> +
> +struct _virFsItemInfo {
> +    int type;                      /* virFsItemType flags */
> +    unsigned long long capacity;   /* Logical size bytes */
> +    unsigned long long allocation; /* Current allocation bytes */
> +};
> +
> +typedef virFsItemInfo *virFsItemInfoPtr;
> +/*
> + * Get connection from fspool.
> + */
> +virConnectPtr           virFsPoolGetConnect        (virFsPoolPtr fsool);

No need to copy the crazy whitespace we have in other headers - a single
' ' between return value and function name, is fine and no space at all
between function name and '('

> +
> +/*
> + * List active fspools
> + */
> +int                     virConnectNumOfFsPools     (virConnectPtr conn);
> +int                     virConnectListFsPools      (virConnectPtr conn,
> +                                                    char **const names,
> +                                                    int maxnames);
> +
> +/*
> + * List inactive fspools
> + */
> +int                     virConnectNumOfDefinedFsPools(virConnectPtr conn);
> +int                     virConnectListDefinedFsPools(virConnectPtr conn,
> +                                                     char **const names,
> +                                                     int maxnames);

The 4 apis follow our old model for listing objects which we discourage
apps from using since they require O(N) API calls and have a designed
in race condition.

So, I suggest just skip these 4 APis and exclusively rely on
the virConnectListAllFsPools API, as we have no need for back
compat with old apps for this new stuff.


> +
> +/*
> + * virConnectListAllFsPoolsFlags:
> + *
> + * Flags used to tune fspools returned by virConnectListAllFsPools().
> + * Note that these flags come in groups; if all bits from a group are 0,
> + * then that group is not used to filter results.
> + */
> +typedef enum {
> +    VIR_CONNECT_LIST_FS_POOLS_INACTIVE      = 1 << 0,
> +    VIR_CONNECT_LIST_FS_POOLS_ACTIVE        = 1 << 1,
> +
> +    VIR_CONNECT_LIST_FS_POOLS_PERSISTENT    = 1 << 2,
> +    VIR_CONNECT_LIST_FS_POOLS_TRANSIENT     = 1 << 3,
> +
> +    VIR_CONNECT_LIST_FS_POOLS_AUTOSTART     = 1 << 4,
> +    VIR_CONNECT_LIST_FS_POOLS_NO_AUTOSTART  = 1 << 5,
> +
> +    /* List fspools by type */
> +    VIR_CONNECT_LIST_FS_POOLS_DIR                = 1 << 6,
> +} virConnectListAllFsPoolsFlags;
> +
> +typedef enum {
> +    VIR_FS_XML_INACTIVE    = (1 << 0), /* dump inactive fspool/item information */
> +} virFsXMLFlags;
> +
> +
> +int                     virConnectListAllFsPools(virConnectPtr conn,
> +                                                 virFsPoolPtr **fspools,
> +                                                 unsigned int flags);
> +
> +/*
> + * Lookup fspool by name or uuid
> + */
> +virFsPoolPtr       virFsPoolLookupByName       (virConnectPtr conn,
> +                                                const char *name);
> +virFsPoolPtr       virFsPoolLookupByUUID       (virConnectPtr conn,
> +                                                const unsigned char *uuid);
> +virFsPoolPtr       virFsPoolLookupByUUIDString (virConnectPtr conn,
> +                                                const char *uuid);
> +virFsPoolPtr       virFsPoolLookupByItem       (virFsItemPtr item);
> +
> +
> +/*
> + * Creating/destroying fspools
> + */
> +virFsPoolPtr       virFsPoolCreateXML         (virConnectPtr conn,
> +                                               const char *xmlDesc,
> +                                               unsigned int flags);
> +virFsPoolPtr       virFsPoolDefineXML         (virConnectPtr conn,
> +                                               const char *xmlDesc,
> +                                               unsigned int flags);
> +int                     virFsPoolBuild        (virFsPoolPtr fsool,
> +                                               unsigned int flags);
> +int                     virFsPoolRefresh      (virFsPoolPtr fsool,
> +                                               unsigned int flags);
> +int                     virFsPoolUndefine     (virFsPoolPtr fsool);
> +int                     virFsPoolCreate       (virFsPoolPtr pool,
> +                                               unsigned int flags);
> +int                     virFsPoolDestroy      (virFsPoolPtr fsool);
> +int                     virFsPoolDelete       (virFsPoolPtr fsool,
> +                                               unsigned int flags);
> +int                     virFsPoolRefresh      (virFsPoolPtr fsool,
> +                                               unsigned int flags);
> +int                     virFsPoolRef          (virFsPoolPtr fspool);
> +int                     virFsPoolFree         (virFsPoolPtr fspool);
> +
> +/*
> + * FsPool information
> + */
> +const char*             virFsPoolGetName           (virFsPoolPtr fsool);
> +int                     virFsPoolGetUUID           (virFsPoolPtr fsool,
> +                                                    unsigned char *uuid);
> +int                     virFsPoolGetUUIDString     (virFsPoolPtr fsool,
> +                                                    char *buf);
> +
> +int                     virFsPoolGetInfo           (virFsPoolPtr item,
> +                                                    virFsPoolInfoPtr info);
> +
> +char *                  virFsPoolGetXMLDesc        (virFsPoolPtr fsool,
> +                                                    unsigned int flags);
> +int                     virFsPoolGetAutostart      (virFsPoolPtr pool,
> +                                                    int *autostart);
> +int                     virFsPoolSetAutostart      (virFsPoolPtr pool,
> +                                                    int autostart);
> +
> +
> +/*
> + * List/lookup fs items within a fsool
> + */
> +int                     virFsPoolNumOfItems      (virFsPoolPtr fsool);
> +int                     virFsPoolListItems       (virFsPoolPtr fsool,
> +                                                  char **const names,
> +                                                  int maxnames);
> +int                     virFsPoolListAllItems    (virFsPoolPtr fsool,
> +                                                  virFsItemPtr **items,
> +                                                  unsigned int flags);
> +
> +virConnectPtr           virFsItemGetConnect       (virFsItemPtr item);
> +
> +/*
> + * Lookup itemumes based on various attributes
> + */
> +virFsItemPtr        virFsItemLookupByName       (virFsPoolPtr fsool,
> +                                                 const char *name);
> +virFsItemPtr        virFsItemLookupByKey        (virConnectPtr conn,
> +                                                 const char *key);
> +virFsItemPtr        virFsItemLookupByPath       (virConnectPtr conn,
> +                                                 const char *path);
> +
> +
> +const char*             virFsItemGetName            (virFsItemPtr item);
> +const char*             virFsItemGetKey             (virFsItemPtr item);
> +
> +virFsItemPtr        virFsItemCreateXML          (virFsPoolPtr fsool,
> +                                                 const char *xmldesc,
> +                                                 unsigned int flags);
> +virFsItemPtr        virFsItemCreateXMLFrom      (virFsPoolPtr fsool,
> +                                                 const char *xmldesc,
> +                                                 virFsItemPtr cloneitem,
> +                                                 unsigned int flags);
> +
> +int                     virFsItemDelete             (virFsItemPtr item,
> +                                                     unsigned int flags);
> +int                     virFsItemRef                (virFsItemPtr item);
> +int                     virFsItemFree               (virFsItemPtr item);
> +
> +int                     virFsItemGetInfo            (virFsItemPtr item,
> +                                                     virFsItemInfoPtr info);
> +char *                  virFsItemGetXMLDesc         (virFsItemPtr item,
> +                                                     unsigned int flags);
> +
> +char *                  virFsItemGetPath            (virFsItemPtr item);
> +
> +int virFsPoolIsActive(virFsPoolPtr fspool);
> +int virFsPoolIsPersistent(virFsPoolPtr fspool);


All this looks fine to me.


Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list