On 25/08/16 04:00, Daniel P. Berrange wrote:
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(a)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
OK