[libvirt] [PATCH 0/2] glusterfs related fixes

Christophe Fergeau cfergeau at redhat.com
Thu Feb 6 18:09:43 UTC 2014


Sorry, screwed up sending the patches, will send a v2, ignore this thread.

Christophe

On Thu, Feb 06, 2014 at 07:03:25PM +0100, Christophe Fergeau wrote:
> Hi,
> 
> I noticed that "virsh pool-list --type gluster" is not giving me an empty
> list as expected, but rather the list of active pools. This is happening because
> virConnectListAllStoragePools() is returning VIR_ERROR_INVALID_ARG because
> VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER is unrecognized.
> 
> vshStoragePoolListCollect then goes to retry with only
> VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE | VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE
> in the flags, which is questionable, but explains the result I got.
> 
> Adding VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER to VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE
> is enough to fix that.
> 
> I've played a bit with adding some compile time checks to avoid this in the future, but
> while they work, they are a bit ugly-looking, and they would require some changes in
> docs/apibuild.py to teach it to parse 1 << N, or to make it ignore values
> in #ifdef VIR_ENUM_SENTINELS, so before spending too much time on this, I'd like to know
> if these checks would be a welcome/useful addition.
> 
> The checks are:
> 
> commit 2aee2a1827497ebde19738c88d2ababfe2dbb13d
> Author: Christophe Fergeau <cfergeau at redhat.com>
> Date:   Thu Feb 6 17:39:43 2014 +0100
> 
>     add pool related compile-time checks
> 
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index b3ce000..9d79ae6 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -3104,6 +3104,10 @@ typedef enum {
>      VIR_CONNECT_LIST_STORAGE_POOLS_RBD           = 1 << 14,
>      VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG      = 1 << 15,
>      VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER       = 1 << 16,
> +
> +#ifdef VIR_ENUM_SENTINELS
> +    VIR_CONNECT_LIST_STORAGE_POOLS_LAST
> +#endif
>  } virConnectListAllStoragePoolsFlags;
>  
>  int                     virConnectListAllStoragePools(virConnectPtr conn,
> diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
> index eaa9325..c8d4df4 100644
> --- a/src/conf/storage_conf.c
> +++ b/src/conf/storage_conf.c
> @@ -36,6 +36,7 @@
>  #include "virerror.h"
>  #include "datatypes.h"
>  #include "storage_conf.h"
> +#include "verify.h"
>  #include "virstoragefile.h"
>  
>  #include "virxml.h"
> @@ -51,6 +52,16 @@
>  #define DEFAULT_POOL_PERM_MODE 0755
>  #define DEFAULT_VOL_PERM_MODE  0600
>  
> +/* Check if VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE seems to
> + * contain all virConnectListAllStoragePoolsFlags elements
> + */
> +verify(VIR_CONNECT_LIST_STORAGE_POOLS_LAST < VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE);
> +
> +/* Check if virConnectListAllStorageFlags has one flag per known storage
> + * pool type */
> +verify(1 << (5+VIR_STORAGE_POOL_LAST) == VIR_CONNECT_LIST_STORAGE_POOLS_LAST - 1);
> +
> +
>  VIR_ENUM_IMPL(virStorageVol,
>                VIR_STORAGE_VOL_LAST,
>                "file", "block", "dir", "network", "netdir")
> @@ -281,6 +292,8 @@ static virStoragePoolTypeInfo poolTypeInfo[] = {
>      }
>  };
>  
> +/* Check if poolTypeInfo has one entry per known storage pool type */
> +verify(ARRAY_CARDINALITY(poolTypeInfo) == VIR_STORAGE_POOL_LAST);
>  
>  static virStoragePoolTypeInfoPtr
>  virStoragePoolTypeInfoLookup(int type)
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140206/c673cda4/attachment-0001.sig>


More information about the libvir-list mailing list