[libvirt] [PATCH 1/6] lxc: Introduce method lxcConnectGetAllDomainStats().
Peter Krempa
pkrempa at redhat.com
Tue Mar 12 11:13:24 UTC 2019
On Mon, Mar 11, 2019 at 17:56:13 -0300, Julio Faracco wrote:
> This is an implementation of method used by driver to retrieve stats
> from all domain. Right now, this is a simple implementation considering
> only State, CPU, Disks and Balloon.
>
> Signed-off-by: Julio Faracco <jcfaracco at gmail.com>
> ---
> src/lxc/lxc_driver.c | 83 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 83 insertions(+)
>
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index 760f9f8bdf..1ab6179572 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -5277,6 +5277,88 @@ lxcDomainGetMetadata(virDomainPtr dom,
> return ret;
> }
>
> +static int
> +lxcConnectGetAllDomainStats(virConnectPtr conn,
> + virDomainPtr *doms,
> + unsigned int ndoms,
> + unsigned int stats,
> + virDomainStatsRecordPtr **retStats,
> + unsigned int flags)
> +{
> + virLXCDriverPtr driver = conn->privateData;
> + virDomainObjPtr *vms = NULL;
> + virDomainObjPtr vm;
> + size_t nvms;
> + virDomainStatsRecordPtr *tmpstats = NULL;
> + int nstats = 0;
> + size_t i;
> + int ret = -1;
> + unsigned int lflags = flags & (VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE |
> + VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT |
> + VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE);
Flags should not be silently ignored. You need to use virCheckFlags and
reject unsupported ones.
> + unsigned int supported = VIR_DOMAIN_STATS_STATE |
> + VIR_DOMAIN_STATS_CPU_TOTAL |
> + VIR_DOMAIN_STATS_BLOCK |
> + VIR_DOMAIN_STATS_BALLOON;
> +
> + virCheckFlags(VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE |
> + VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT |
> + VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE |
> + VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS, -1);
> +
> + if (virConnectGetAllDomainStatsEnsureACL(conn) < 0)
> + return -1;
> +
> + if (!stats) {
> + stats = supported;
> + } else if ((flags & VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS) &&
> + (stats & ~supported)) {
> + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
> + _("Stats types bits 0x%x are not supported by this daemon"),
> + stats & ~supported);
> + return -1;
> + }
> +
> + if (ndoms) {
> + if (virDomainObjListConvert(driver->domains, conn, doms, ndoms, &vms,
> + &nvms, virConnectGetAllDomainStatsCheckACL,
> + lflags, true) < 0)
> + return -1;
> + } else {
> + if (virDomainObjListCollect(driver->domains, conn, &vms, &nvms,
> + virConnectGetAllDomainStatsCheckACL,
> + lflags) < 0)
> + return -1;
> + }
> +
> + if (VIR_ALLOC_N(tmpstats, ndoms + 1) < 0)
> + goto cleanup;
> +
> + for (i = 0; i < nvms; i++) {
> + virDomainStatsRecordPtr tmp;
> + vm = vms[i];
> +
> + virObjectLock(vm);
> + tmp = lxcDomainGetStats(conn, vm);
> + virObjectUnlock(vm);
> +
> + if (!tmp)
> + goto cleanup;
> +
> + tmpstats[nstats++] = tmp;
> +
> + }
> +
> + *retStats = tmpstats;
> + tmpstats = NULL;
VIR_STEAL_PTR(*retStats, tmpstats);
> + ret = nstats;
> +
> + cleanup:
> + virDomainStatsRecordListFree(tmpstats);
> + virObjectListFreeCount(vms, nvms);
> +
> + return ret;
> +}
>
> static int
> lxcDomainGetCPUStats(virDomainPtr dom,
> @@ -5448,6 +5530,7 @@ static virHypervisorDriver lxcHypervisorDriver = {
> .domainMemoryStats = lxcDomainMemoryStats, /* 1.2.2 */
> .nodeGetCPUStats = lxcNodeGetCPUStats, /* 0.9.3 */
> .nodeGetMemoryStats = lxcNodeGetMemoryStats, /* 0.9.3 */
> + .connectGetAllDomainStats = lxcConnectGetAllDomainStats, /* 5.1.0 */
5.2.0
> .nodeGetCellsFreeMemory = lxcNodeGetCellsFreeMemory, /* 0.6.5 */
> .nodeGetFreeMemory = lxcNodeGetFreeMemory, /* 0.6.5 */
> .nodeGetCPUMap = lxcNodeGetCPUMap, /* 1.0.0 */
> --
> 2.19.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/20190312/bd132052/attachment-0001.sig>
More information about the libvir-list
mailing list