
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@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 :|