318ea3c storage: initial support for linking with libgfapi

Authored and Committed by ericb 10 years ago
    storage: initial support for linking with libgfapi
    
    We support gluster volumes in domain XML, so we also ought to
    support them as a storage pool.  Besides, a future patch will
    want to take advantage of libgfapi to handle the case of a
    gluster device holding qcow2 rather than raw storage, and for
    that to work, we need a storage backend that can read gluster
    storage volume contents.  This sets up the framework.
    
    Note that the new pool is named 'gluster' to match a
    <disk type='network'><source protocol='gluster'> image source
    already supported in a <domain>; it does NOT match the
    <pool type='netfs'><source><target type='glusterfs'>,
    since that uses a FUSE mount to a local file name rather than
    a network name.
    
    This and subsequent patches have been tested against glusterfs
    3.4.1 (available on Fedora 19); there are likely bugs in older
    versions that may prevent decent use of gfapi, so this patch
    enforces the minimum version tested.  A future patch may lower
    the minimum.  On the other hand, I hit at least two bugs in
    3.4.1 that will be fixed in 3.5/3.4.2, where it might be worth
    raising the minimum: glfs_readdir is nicer to use than
    glfs_readdir_r [1], and glfs_fini should only return failure on
    an actual failure [2].
    
    [1] http://lists.gnu.org/archive/html/gluster-devel/2013-10/msg00085.html
    [2] http://lists.gnu.org/archive/html/gluster-devel/2013-10/msg00086.html
    
    * configure.ac (WITH_STORAGE_GLUSTER): New conditional.
    * m4/virt-gluster.m4: new file.
    * libvirt.spec.in (BuildRequires): Support gluster in spec file.
    * src/conf/storage_conf.h (VIR_STORAGE_POOL_GLUSTER): New pool
    type.
    * src/conf/storage_conf.c (poolTypeInfo): Treat similar to
    sheepdog and rbd.
    (virStoragePoolDefFormat): Don't output target for gluster.
    * src/storage/storage_backend_gluster.h: New file.
    * src/storage/storage_backend_gluster.c: Likewise.
    * po/POTFILES.in: Add new file.
    * src/storage/storage_backend.c (backends): Register new type.
    * src/Makefile.am (STORAGE_DRIVER_GLUSTER_SOURCES): Build new files.
    * src/storage/storage_backend.h (_virStorageBackend): Documet
    assumption.
    
    Signed-off-by: Eric Blake <eblake@redhat.com>
    
        
file modified
+21 -0
file modified
+15 -0
file added
+28
file modified
+1 -0
file modified
+10 -0
file modified
+22 -4
file modified
+2 -1