[libvirt] [PATCH] test: storage: Fill in default vol types for every pool

John Ferlan jferlan at redhat.com
Fri Mar 8 12:40:56 UTC 2019



On 3/7/19 2:35 PM, Cole Robinson wrote:
> Fill in a default volume type for every pool type, as reported
> by the VolGetInfo API.
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
> A more complete fix would take into account VolDef->type, so test
> driver users could set this value via volume XML. That would require
> adding a PostParse callback to the storage driver infrastructure.
> This is still an improvement in the interim and would be part of
> a complete fix anyways
> 
>  src/test/test_driver.c | 27 ++++++++++++++++++++-------
>  1 file changed, 20 insertions(+), 7 deletions(-)
> 

At first I wondered if this had to do with changes I made starting at
commit 4ad00278f going thru commit 538b83ae, but it doesn't seem so.

> diff --git a/src/test/test_driver.c b/src/test/test_driver.c
> index ce0df1f8e3..3f37b2ede7 100644
> --- a/src/test/test_driver.c
> +++ b/src/test/test_driver.c
> @@ -5164,13 +5164,26 @@ testStorageVolDelete(virStorageVolPtr vol,
>  static int
>  testStorageVolumeTypeForPool(int pooltype)
>  {
> -    switch (pooltype) {
> -        case VIR_STORAGE_POOL_DIR:
> -        case VIR_STORAGE_POOL_FS:
> -        case VIR_STORAGE_POOL_NETFS:
> -            return VIR_STORAGE_VOL_FILE;
> -        default:
> -            return VIR_STORAGE_VOL_BLOCK;
> +    switch ((virStoragePoolType) pooltype) {
> +    case VIR_STORAGE_POOL_DIR:
> +    case VIR_STORAGE_POOL_FS:
> +    case VIR_STORAGE_POOL_NETFS:
> +    case VIR_STORAGE_POOL_VSTORAGE:
> +        return VIR_STORAGE_VOL_FILE;
> +    case VIR_STORAGE_POOL_SHEEPDOG:
> +    case VIR_STORAGE_POOL_ISCSI_DIRECT:

^^ This I would think should be BLOCK even though I see
virISCSIDirectRefreshVol uses NETWORK at volume creation.

Perhaps Michal can answer provide some insights.

> +    case VIR_STORAGE_POOL_GLUSTER:
> +    case VIR_STORAGE_POOL_RBD:
> +        return VIR_STORAGE_VOL_NETWORK;
> +    case VIR_STORAGE_POOL_LOGICAL:
> +    case VIR_STORAGE_POOL_DISK:
> +    case VIR_STORAGE_POOL_MPATH:
> +    case VIR_STORAGE_POOL_ISCSI:

^^^ To a degree ISCSI could be NETWORK, but may also be BLOCK. Still the
default seems to be BLOCK (see below)

> +    case VIR_STORAGE_POOL_SCSI:
> +    case VIR_STORAGE_POOL_ZFS:
> +    case VIR_STORAGE_POOL_LAST:

^^^ I agree w/ Andrea that this could an Enum error; however, it doesn't
seem the caller at this point can handle that.

> +    default:
> +        return VIR_STORAGE_VOL_BLOCK;
>      }
>  }
>  
> 

Using cscope I did an egrep search on "vol.*type.* = " as well as
"VIR_ALLOC.*vol" in order to help find places where a volume's type may
or should be set to see what kind of defaults are in use.

Beyond that consider that volume's in a pool volume list are recreated
at every refresh, so following the *Refresh logic to find types works
pretty well too.

For virStorageBackendRefreshLocal it's VIR_STORAGE_VOL_FILE
For virStorageBackendSCSINewLun it's VIR_STORAGE_VOL_BLOCK (used by scsi
and iscsi backends via calls to virStorageBackendSCSIFindLUs).

Perhaps a "more correct" answer comes from virStoragePoolTypeInfoLookup
or virStoragePoolOptionsForPoolType and adjustment of poolTypeInfo in
storage_conf.c?

John




More information about the libvir-list mailing list