[libvirt] [PATCH 5/7] conf: Introduce storage pool functions into capabilities

Pavel Hrdina phrdina at redhat.com
Wed Jan 30 08:31:28 UTC 2019


On Tue, Jan 15, 2019 at 08:15:47PM -0500, John Ferlan wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1581670
> 
> Introduce the bare bones functions to processing capability
> data for the storage driver. Currently just looking to store
> and format the storage pool types in output, such as:
> 
>   <pool>
>     <type>dir</pool>
> 
>   <pool>
>     <type>fs</pool>
>   </pool>
> 
> ...
> 
>   <pool>
>     <type>iscsi-direct</pool>
>   </pool>

This looks weird, if you look into output of domcapabilities we use
different formatting to list type values, so how about this:

  <pool>
    <enum name='type'>
      <value>dir</value>
      <value>fs</value>
      ...
    </enum>
  </pool>

The name of the enum could be 'backend' as well.

Pavel

> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/conf/capabilities.c  | 60 ++++++++++++++++++++++++++++++++++++++++
>  src/conf/capabilities.h  | 15 ++++++++++
>  src/libvirt_private.syms |  1 +
>  3 files changed, 76 insertions(+)
> 
> diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
> index 1269a4c739..c60743a38d 100644
> --- a/src/conf/capabilities.c
> +++ b/src/conf/capabilities.c
> @@ -28,6 +28,7 @@
>  #include "cpu_conf.h"
>  #include "domain_conf.h"
>  #include "physmem.h"
> +#include "storage_conf.h"
>  #include "viralloc.h"
>  #include "virarch.h"
>  #include "virbuffer.h"
> @@ -180,6 +181,17 @@ virCapabilitiesFreeGuest(virCapsGuestPtr guest)
>      VIR_FREE(guest);
>  }
>  
> +
> +static void
> +virCapabilitiesFreeStoragePool(virCapsStoragePoolPtr pool)
> +{
> +    if (!pool)
> +        return;
> +
> +    VIR_FREE(pool);
> +}
> +
> +
>  void
>  virCapabilitiesFreeNUMAInfo(virCapsPtr caps)
>  {
> @@ -221,6 +233,10 @@ virCapsDispose(void *object)
>      virCapsPtr caps = object;
>      size_t i;
>  
> +    for (i = 0; i < caps->npools; i++)
> +        virCapabilitiesFreeStoragePool(caps->pools[i]);
> +    VIR_FREE(caps->pools);
> +
>      for (i = 0; i < caps->nguests; i++)
>          virCapabilitiesFreeGuest(caps->guests[i]);
>      VIR_FREE(caps->guests);
> @@ -792,6 +808,30 @@ virCapabilitiesDomainDataLookup(virCapsPtr caps,
>                                                     emulator, machinetype);
>  }
>  
> +
> +int
> +virCapabilitiesAddStoragePool(virCapsPtr caps,
> +                              int poolType)
> +{
> +    virCapsStoragePoolPtr pool;
> +
> +    if (VIR_ALLOC(pool) < 0)
> +        goto error;
> +
> +    pool->type = poolType;
> +
> +    if (VIR_RESIZE_N(caps->pools, caps->npools_max, caps->npools, 1) < 0)
> +        goto error;
> +    caps->pools[caps->npools++] = pool;
> +
> +    return 0;
> +
> + error:
> +    virCapabilitiesFreeStoragePool(pool);
> +    return -1;
> +}
> +
> +
>  static int
>  virCapabilitiesFormatNUMATopology(virBufferPtr buf,
>                                    size_t ncells,
> @@ -1276,6 +1316,24 @@ virCapabilitiesFormatGuestXML(virCapsGuestPtr *guests,
>  }
>  
>  
> +static void
> +virCapabilitiesFormatStoragePoolXML(virCapsStoragePoolPtr *pools,
> +                                    size_t npools,
> +                                    virBufferPtr buf)
> +{
> +    size_t i;
> +
> +    for (i = 0; i < npools; i++) {
> +        virBufferAddLit(buf, "<pool>\n");
> +        virBufferAdjustIndent(buf, 2);
> +        virBufferAsprintf(buf, "<type>%s</pool>\n",
> +                          virStoragePoolTypeToString(pools[i]->type));
> +        virBufferAdjustIndent(buf, -2);
> +        virBufferAddLit(buf, "</pool>\n\n");
> +    }
> +}
> +
> +
>  /**
>   * virCapabilitiesFormatXML:
>   * @caps: capabilities to format
> @@ -1297,6 +1355,8 @@ virCapabilitiesFormatXML(virCapsPtr caps)
>  
>      virCapabilitiesFormatGuestXML(caps->guests, caps->nguests, &buf);
>  
> +    virCapabilitiesFormatStoragePoolXML(caps->pools, caps->npools, &buf);
> +
>      virBufferAdjustIndent(&buf, -2);
>      virBufferAddLit(&buf, "</capabilities>\n");
>  
> diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
> index 31c2a07a9b..cca1a20949 100644
> --- a/src/conf/capabilities.h
> +++ b/src/conf/capabilities.h
> @@ -211,6 +211,13 @@ struct _virCapsHost {
>      bool iommu;
>  };
>  
> +typedef struct _virCapsStoragePool virCapsStoragePool;
> +typedef virCapsStoragePool *virCapsStoragePoolPtr;
> +struct _virCapsStoragePool {
> +    int type;
> +};
> +
> +
>  typedef int (*virDomainDefNamespaceParse)(xmlDocPtr, xmlNodePtr,
>                                            xmlXPathContextPtr, void **);
>  typedef void (*virDomainDefNamespaceFree)(void *);
> @@ -235,6 +242,10 @@ struct _virCaps {
>      size_t nguests;
>      size_t nguests_max;
>      virCapsGuestPtr *guests;
> +
> +    size_t npools;
> +    size_t npools_max;
> +    virCapsStoragePoolPtr *pools;
>  };
>  
>  typedef struct _virCapsDomainData virCapsDomainData;
> @@ -318,6 +329,10 @@ virCapabilitiesAddGuestFeature(virCapsGuestPtr guest,
>                                 bool defaultOn,
>                                 bool toggle);
>  
> +int
> +virCapabilitiesAddStoragePool(virCapsPtr caps,
> +                              int poolType);
> +
>  int
>  virCapabilitiesHostSecModelAddBaseLabel(virCapsHostSecModelPtr secmodel,
>                                          const char *type,
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index c3d6306809..9aaa8830e4 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -49,6 +49,7 @@ virCapabilitiesAddGuestFeature;
>  virCapabilitiesAddHostFeature;
>  virCapabilitiesAddHostMigrateTransport;
>  virCapabilitiesAddHostNUMACell;
> +virCapabilitiesAddStoragePool;
>  virCapabilitiesAllocMachines;
>  virCapabilitiesClearHostNUMACellCPUTopology;
>  virCapabilitiesDomainDataLookup;
> -- 
> 2.20.1
> 
> --
> 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: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190130/1a2b07f7/attachment-0001.sig>


More information about the libvir-list mailing list