[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