From nobody Tue Oct 28 17:55:03 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1760023783; cv=none; d=zohomail.com; s=zohoarc; b=EtbWTdc6hxn/AfSW6f5Y6+f51i9HaSq/Z+2bjtldWgXqbofmDPLOCZKGZErAWAFxVnXlzfR/pRMpwpYLsOczHo4glWNqsR1jTaNMbby4/5Wq3ofY2kO/C/ZyLpaYdulZ2bOTOMPup2pnfmkwxu+b+ZtggItvyRFGoFLwXTb0TX0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760023783; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=DUr/GCWXAvG3dDrfW9+I+xFSkeu4kMZZX8swj2Rg+wI=; b=k9cg2+N3sF1hMxVej/sct/nNrQmvP3RScZqizH+5SDcMapVRP32sd+Ms0PCM9UcvfF08YTWh1oYVDTw0GhQfc3no9TFrlJgHye2DXt070yaBVvRJO4OG5FCe2fZqxJ+Mn1HKmUVP/CRkwUh85txMpGAFAexQ01pWM71MNY914bc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1760023783675284.3678885063754; Thu, 9 Oct 2025 08:29:43 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id B2E884182E; Thu, 9 Oct 2025 11:29:42 -0400 (EDT) Received: from [172.19.199.20] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 3DBB2446D2; Thu, 9 Oct 2025 11:17:18 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 75ED344216; Thu, 9 Oct 2025 11:16:38 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 0173543ED9 for ; Thu, 9 Oct 2025 11:16:30 -0400 (EDT) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-452-UllLcaWwOUOmXtFk8ZKwkg-1; Thu, 09 Oct 2025 11:16:29 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 48F3A19560AE for ; Thu, 9 Oct 2025 15:16:28 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.12]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7E9161955F22 for ; Thu, 9 Oct 2025 15:16:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1760022990; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DUr/GCWXAvG3dDrfW9+I+xFSkeu4kMZZX8swj2Rg+wI=; b=iTPAmaMYx+N5WNh33LN5Z914qccmkIZV6v8Xhoj2t3tddhdfYvETZuxh+Bg10ouukTE3UF rfilwoZBSG+bu9As+lDwsyaxHc5RSkzhIKeqzhlNz/0F0krhp5XCA+V9UqNzCCzOha8FsQ GL1EIqIaZtVzN9ETB0XIWlW9XITUivo= X-MC-Unique: UllLcaWwOUOmXtFk8ZKwkg-1 X-Mimecast-MFC-AGG-ID: UllLcaWwOUOmXtFk8ZKwkg_1760022988 To: devel@lists.libvirt.org Subject: [RFC PATCH 07/16] qemuMonitorJSONGetAllBlockStatsInfo: Directly probe data from 'query-named-block-nodes' Date: Thu, 9 Oct 2025 17:16:07 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: FwkW96Bli-ao67cEIZ3TCp2rtS1fpo8P-flXamDl7XU_1760022988 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: WLJAWOKBLPM26GPCSUAP3F3IDG5ZHPX3 X-Message-ID-Hash: WLJAWOKBLPM26GPCSUAP3F3IDG5ZHPX3 X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1760023784789116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Currently the data which was probed for statistics from 'query-named-block-nodes' was updated in a separate call in qemuMonitorJSONBlockStatsUpdateCapacityBlockdev. This patch moves and adapts the code so that everything is probed in qemuMonitorJSONGetAllBlockStatsInfo. qemuMonitorJSONBlockStatsUpdateCapacityBlockdev is now an empty function and will be removed later. Signed-off-by: Peter Krempa --- src/qemu/qemu_monitor_json.c | 90 ++++++++++++++++++------------------ tests/qemumonitorjsontest.c | 2 + 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 44d7a35874..0aa74e226d 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2524,6 +2524,42 @@ qemuMonitorJSONQueryBlockstats(qemuMonitor *mon, } +static int +qemuMonitorJSONGetOneBlockStatsNamedNodes(size_t pos G_GNUC_UNUSED, + virJSONValue *val, + void *opaque) +{ + GHashTable *stats =3D opaque; + virJSONValue *image; + const char *nodename; + qemuBlockStats *entry; + + if (!(nodename =3D virJSONValueObjectGetString(val, "node-name")) || + !(image =3D virJSONValueObjectGetObject(val, "image"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-named-block-nodes entry was not in expecte= d format")); + return -1; + } + + if (!(entry =3D virHashLookup(stats, nodename))) { + entry =3D qemuBlockStatsNew(); + g_hash_table_insert(stats, g_strdup(nodename), entry); + } + + /* updating actual size makes sense only when virtual size is present = */ + if (virJSONValueObjectGetNumberUlong(image, "virtual-size", &entry->ca= pacity) =3D=3D 0) { + /* if actual-size is missing, image is not thin provisioned */ + if (virJSONValueObjectGetNumberUlong(image, "actual-size", &entry-= >physical) < 0) + entry->physical =3D entry->capacity; + } + + ignore_value(virJSONValueObjectGetNumberUlong(val, "write_threshold", + &entry->write_threshold)= ); + + return 1; /* we don't want to steal the value from the JSON array */ +} + + int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mon, GHashTable *hash) @@ -2533,6 +2569,7 @@ qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mon, size_t i; g_autoptr(virJSONValue) blockstatsDevices =3D NULL; g_autoptr(virJSONValue) blockstatsNodes =3D NULL; + g_autoptr(virJSONValue) nodes =3D NULL; if (!(blockstatsDevices =3D qemuMonitorJSONQueryBlockstats(mon, false)= )) return -1; @@ -2580,59 +2617,22 @@ qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mo= n, nstats =3D rc; } - return nstats; -} - - -static int -qemuMonitorJSONBlockStatsUpdateCapacityBlockdevWorker(size_t pos G_GNUC_UN= USED, - virJSONValue *val, - void *opaque) -{ - GHashTable *stats =3D opaque; - virJSONValue *image; - const char *nodename; - qemuBlockStats *entry; - - if (!(nodename =3D virJSONValueObjectGetString(val, "node-name")) || - !(image =3D virJSONValueObjectGetObject(val, "image"))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("query-named-block-nodes entry was not in expecte= d format")); + if (!(nodes =3D qemuMonitorJSONQueryNamedBlockNodes(mon))) return -1; - } - - if (!(entry =3D virHashLookup(stats, nodename))) { - entry =3D qemuBlockStatsNew(); - g_hash_table_insert(stats, g_strdup(nodename), entry); - } - - /* updating actual size makes sense only when virtual size is present = */ - if (virJSONValueObjectGetNumberUlong(image, "virtual-size", &entry->ca= pacity) =3D=3D 0) { - /* if actual-size is missing, image is not thin provisioned */ - if (virJSONValueObjectGetNumberUlong(image, "actual-size", &entry-= >physical) < 0) - entry->physical =3D entry->capacity; - } - ignore_value(virJSONValueObjectGetNumberUlong(val, "write_threshold", - &entry->write_threshold)= ); + if (virJSONValueArrayForeachSteal(nodes, + qemuMonitorJSONGetOneBlockStatsNamed= Nodes, + hash) < 0) + return -1; - return 1; /* we don't want to steal the value from the JSON array */ + return nstats; } int -qemuMonitorJSONBlockStatsUpdateCapacityBlockdev(qemuMonitor *mon, - GHashTable *stats) +qemuMonitorJSONBlockStatsUpdateCapacityBlockdev(qemuMonitor *mon G_GNUC_UN= USED, + GHashTable *stats G_GNUC_U= NUSED) { - g_autoptr(virJSONValue) nodes =3D NULL; - - if (!(nodes =3D qemuMonitorJSONQueryNamedBlockNodes(mon))) - return -1; - - if (virJSONValueArrayForeachSteal(nodes, - qemuMonitorJSONBlockStatsUpdateCapac= ityBlockdevWorker, - stats) < 0) - return -1; return 0; } diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 7b56a507ea..a229a89860 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -1544,6 +1544,8 @@ testQemuMonitorJSONqemuMonitorJSONGetAllBlockStatsInf= o(const void *opaque) return -1; if (qemuMonitorTestAddItem(test, "query-blockstats", reply) < 0) return -1; + if (qemuMonitorTestAddItem(test, "query-named-block-nodes", "{\"return= \":[]}") < 0) + return -1; #define CHECK0FULL(var, value, varformat, valformat) \ if (stats->var !=3D value) { \ --=20 2.51.0