From nobody Mon Apr 29 13:14:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1489678146947558.0157670739353; Thu, 16 Mar 2017 08:29:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 820353D962; Thu, 16 Mar 2017 15:29:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 54DB7183A7; Thu, 16 Mar 2017 15:29:06 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 0584B5EC62; Thu, 16 Mar 2017 15:29:06 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2GFSvWJ004002 for ; Thu, 16 Mar 2017 11:28:57 -0400 Received: by smtp.corp.redhat.com (Postfix) id B057C183A0; Thu, 16 Mar 2017 15:28:57 +0000 (UTC) Received: from angien.brq.redhat.com (dhcp129-47.brq.redhat.com [10.34.129.47]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0C92060F8A; Thu, 16 Mar 2017 15:28:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 820353D962 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 820353D962 From: Peter Krempa To: libvir-list@redhat.com Date: Thu, 16 Mar 2017 16:29:49 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 1/3] util: json: Make function to free JSON values in virHash universal X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Thu, 16 Mar 2017 15:29:07 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Move the helper that frees JSON entries put into hash tables into the JSON module so that it does not have to be reimplemented. --- src/libvirt_private.syms | 1 + src/qemu/qemu_monitor_json.c | 10 +--------- src/util/virjson.c | 8 ++++++++ src/util/virjson.h | 1 + 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index db0e11e33..84619f01f 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1832,6 +1832,7 @@ virJSONValueGetNumberLong; virJSONValueGetNumberUint; virJSONValueGetNumberUlong; virJSONValueGetString; +virJSONValueHashFree; virJSONValueIsArray; virJSONValueIsNull; virJSONValueNewArray; diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 75af5cb93..e6b73d340 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -7449,14 +7449,6 @@ qemuMonitorJSONFillQMPSchema(size_t pos ATTRIBUTE_UN= USED, } -static void -qemuMonitorJSONFreeSchemaEntry(void *opaque, - const void *name ATTRIBUTE_UNUSED) -{ - virJSONValueFree(opaque); -} - - virHashTablePtr qemuMonitorJSONQueryQMPSchema(qemuMonitorPtr mon) { @@ -7477,7 +7469,7 @@ qemuMonitorJSONQueryQMPSchema(qemuMonitorPtr mon) arr =3D virJSONValueObjectGet(reply, "return"); - if (!(schema =3D virHashCreate(512, qemuMonitorJSONFreeSchemaEntry))) + if (!(schema =3D virHashCreate(512, virJSONValueHashFree))) goto cleanup; if (virJSONValueArrayForeachSteal(arr, qemuMonitorJSONFillQMPSchema, diff --git a/src/util/virjson.c b/src/util/virjson.c index c907b5ded..b49b29b0f 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -376,6 +376,14 @@ virJSONValueFree(virJSONValuePtr value) } +void +virJSONValueHashFree(void *opaque, + const void *name ATTRIBUTE_UNUSED) +{ + virJSONValueFree(opaque); +} + + virJSONValuePtr virJSONValueNewString(const char *data) { diff --git a/src/util/virjson.h b/src/util/virjson.h index 5e32cb9a4..14b74c061 100644 --- a/src/util/virjson.h +++ b/src/util/virjson.h @@ -81,6 +81,7 @@ struct _virJSONValue { }; void virJSONValueFree(virJSONValuePtr value); +void virJSONValueHashFree(void *opaque, const void *name); int virJSONValueObjectCreate(virJSONValuePtr *obj, ...) ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL; --=20 2.12.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 13:14:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1489678140873482.64316573000394; Thu, 16 Mar 2017 08:29:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5C50D3DBE8; Thu, 16 Mar 2017 15:29:00 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2ACD060319; Thu, 16 Mar 2017 15:29:00 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CDF4A1853D01; Thu, 16 Mar 2017 15:28:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2GFSwAL004012 for ; Thu, 16 Mar 2017 11:28:58 -0400 Received: by smtp.corp.redhat.com (Postfix) id BE9F6183A1; Thu, 16 Mar 2017 15:28:58 +0000 (UTC) Received: from angien.brq.redhat.com (dhcp129-47.brq.redhat.com [10.34.129.47]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0BAD860F83; Thu, 16 Mar 2017 15:28:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5C50D3DBE8 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5C50D3DBE8 From: Peter Krempa To: libvir-list@redhat.com Date: Thu, 16 Mar 2017 16:29:50 +0100 Message-Id: <5b858c43fbf527beb789825a6d7b114e703d101b.1489677603.git.pkrempa@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 2/3] qemu: block: Add code to fetch block node data by node name X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Thu, 16 Mar 2017 15:29:01 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" To allow updating stats based on the node name, add a helper function that will fetch the required data from 'query-named-block-nodes' and return it in hash table for easy lookup. --- src/qemu/qemu_block.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_block.h | 3 +++ 2 files changed, 49 insertions(+) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index e31907842..586d56809 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -380,3 +380,49 @@ qemuBlockNodeNamesDetect(virQEMUDriverPtr driver, return ret; } + + +static int +qemuBlockFillNodeData(size_t pos ATTRIBUTE_UNUSED, + virJSONValuePtr item, + void *opaque) +{ + virHashTablePtr table =3D opaque; + const char *name; + + if (!(name =3D virJSONValueObjectGetString(item, "node-name"))) + return 1; + + if (virHashAddEntry(table, name, item) < 0) + return -1; + + return 0; +} + + +/** + * qemuBlockGetNodeData: + * @data: JSON object returned from query-named-block-nodes + * + * Returns a hash table organized by the node name of the JSON value objec= ts of + * data for given qemu block nodes. + * + * Returns a filled virHashTablePtr on success NULL on error. + */ +virHashTablePtr +qemuBlockGetNodeData(virJSONValuePtr data) +{ + virHashTablePtr ret =3D NULL; + + if (!(ret =3D virHashCreate(50, virJSONValueHashFree))) + return NULL; + + if (virJSONValueArrayForeachSteal(data, qemuBlockFillNodeData, ret) < = 0) + goto error; + + return ret; + + error: + virHashFree(ret); + return NULL; +} diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h index 56f4a74dd..9d6a24643 100644 --- a/src/qemu/qemu_block.h +++ b/src/qemu/qemu_block.h @@ -48,4 +48,7 @@ int qemuBlockNodeNamesDetect(virQEMUDriverPtr driver, virDomainObjPtr vm); +virHashTablePtr +qemuBlockGetNodeData(virJSONValuePtr data); + #endif /* __QEMU_BLOCK_H__ */ --=20 2.12.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 13:14:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1489678150881288.3764665606583; Thu, 16 Mar 2017 08:29:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5C6F68124F; Thu, 16 Mar 2017 15:29:10 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1D4D617F28; Thu, 16 Mar 2017 15:29:10 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C961E1853D02; Thu, 16 Mar 2017 15:29:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2GFSxnj004020 for ; Thu, 16 Mar 2017 11:28:59 -0400 Received: by smtp.corp.redhat.com (Postfix) id E3BA060F83; Thu, 16 Mar 2017 15:28:59 +0000 (UTC) Received: from angien.brq.redhat.com (dhcp129-47.brq.redhat.com [10.34.129.47]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3DE2D183A8; Thu, 16 Mar 2017 15:28:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5C6F68124F Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5C6F68124F From: Peter Krempa To: libvir-list@redhat.com Date: Thu, 16 Mar 2017 16:29:51 +0100 Message-Id: <7b3c0aad9789865f16c166955240448506ab3c4f.1489677603.git.pkrempa@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 3/3] qemu: stats: Display the block threshold size in bulk stats X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 16 Mar 2017 15:29:11 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Management tools may want to check whether the threshold is still set if they missed an event. Add the data to the bulk stats API where they can also query the current backing size at the same time. --- src/libvirt-domain.c | 4 ++++ src/qemu/qemu_driver.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++= +--- tools/virsh.pod | 3 +++ 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index fd367bcb0..815cbb1e1 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -11206,6 +11206,10 @@ virConnectGetDomainCapabilities(virConnectPtr conn, * backing image as unsigned long long. * "block..physical" - physical size in bytes of the container of= the * backing image as unsigned long long. + * "block..threshold.storage - current threshold for delivering t= he + * VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD + * event in bytes. + * See virDomainSetBlockThreshold. * * VIR_DOMAIN_STATS_PERF: * Return perf event statistics. diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 22cf866cd..a541b671d 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19186,6 +19186,32 @@ qemuDomainGetStatsOneBlockFallback(virQEMUDriverPt= r driver, static int +qemuDomainGetStatsOneBlockNode(virDomainStatsRecordPtr record, + int *maxparams, + virStorageSourcePtr src, + size_t block_idx, + virHashTablePtr nodedata) +{ + virJSONValuePtr data; + unsigned long long tmp; + int ret =3D -1; + + if (src->nodebacking && + (data =3D virHashLookup(nodedata, src->nodebacking))) { + if (virJSONValueObjectGetNumberUlong(data, "write_threshold", &tmp= ) =3D=3D 0 && + tmp > 0) + QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, block_idx, + "threshold.storage", tmp); + } + + ret =3D 0; + + cleanup: + return ret; +} + + +static int qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, virQEMUDriverConfigPtr cfg, virDomainObjPtr dom, @@ -19195,7 +19221,8 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, virStorageSourcePtr src, size_t block_idx, unsigned int backing_idx, - virHashTablePtr stats) + virHashTablePtr stats, + virHashTablePtr nodedata) { qemuBlockStats *entry; int ret =3D -1; @@ -19264,6 +19291,10 @@ qemuDomainGetStatsOneBlock(virQEMUDriverPtr driver, } } + if (qemuDomainGetStatsOneBlockNode(record, maxparams, src, block_idx, + nodedata) < 0) + goto cleanup; + ret =3D 0; cleanup: VIR_FREE(alias); @@ -19282,8 +19313,12 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, int ret =3D -1; int rc; virHashTablePtr stats =3D NULL; + virHashTablePtr nodestats =3D NULL; + virJSONValuePtr nodedata =3D NULL; qemuDomainObjPrivatePtr priv =3D dom->privateData; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + bool fetchnodedata =3D virQEMUCapsGet(priv->qemuCaps, + QEMU_CAPS_QUERY_NAMED_BLOCK_NODES); int count_index =3D -1; size_t visited =3D 0; bool visitBacking =3D !!(privflags & QEMU_DOMAIN_STATS_BACKING); @@ -19295,14 +19330,22 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, if (rc >=3D 0) ignore_value(qemuMonitorBlockStatsUpdateCapacity(priv->mon, st= ats, visitBacking)= ); + + if (fetchnodedata) + nodedata =3D qemuMonitorQueryNamedBlockNodes(priv->mon); + if (qemuDomainObjExitMonitor(driver, dom) < 0) goto cleanup; /* failure to retrieve stats is fine at this point */ - if (rc < 0) + if (rc < 0 || (fetchnodedata && !nodedata)) virResetLastError(); } + if (nodedata && + !(nodestats =3D qemuBlockGetNodeData(nodedata))) + goto cleanup; + /* When listing backing chains, it's easier to fix up the count * after the iteration than it is to iterate twice; but we still * want count listed first. */ @@ -19317,7 +19360,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, while (src && (backing_idx =3D=3D 0 || visitBacking)) { if (qemuDomainGetStatsOneBlock(driver, cfg, dom, record, maxpa= rams, disk, src, visited, backing_idx, - stats) < 0) + stats, nodestats) < 0) goto cleanup; visited++; backing_idx++; @@ -19330,6 +19373,8 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver, cleanup: virHashFree(stats); + virHashFree(nodestats); + virJSONValueFree(nodedata); virObjectUnref(cfg); return ret; } diff --git a/tools/virsh.pod b/tools/virsh.pod index 48be19234..c2a70f07f 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1005,6 +1005,9 @@ Information listed includes: "block..allocation" - offset of highest written sector in bytes "block..capacity" - logical size of source file in bytes "block..physical" - physical size of source file in bytes + "block..threshold.storage" - threshold (in bytes) for delivering the + VIR_DOMAIN_EVENT_ID_BLOCK_THRESHOLD eve= nt + See domblkthreshold. Selecting a specific statistics groups doesn't guarantee that the daemon supports the selected group of stats. Flag I<--enforce> --=20 2.12.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list