[libvirt] [PATCH 07/12] getstats: report block sizes for offline domains
Peter Krempa
pkrempa at redhat.com
Mon Dec 8 14:11:48 UTC 2014
On 12/06/14 09:14, Eric Blake wrote:
> The prior refactoring can now be put to use. With the same domain
> as the previous commit (one qcow2 disk and an empty cdrom drive):
> $ virsh domstats --block foo
> Domain: 'foo'
> block.count=2
> block.0.name=hda
> block.0.allocation=200704
> block.0.capacity=42949672960
> block.0.physical=200704
> block.1.name=hdc
>
> * src/qemu/qemu_driver.c (qemuStorageLimitsRefresh): Tweak
> semantics of helper function.
> (qemuDomainGetStatsBlock): Use it to report offline statistics.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
> src/qemu/qemu_driver.c | 60 +++++++++++++++++++++++++++++++++++---------------
> 1 file changed, 42 insertions(+), 18 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 404decd..723391b 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -10983,7 +10983,9 @@ qemuDomainMemoryPeek(virDomainPtr dom,
>
> /* Refresh the capacity and allocation limits of a given storage
> * source. Assumes that the caller has already obtained a domain job.
> - * Set *activeFail to true if data cannot be obtained because a
> + * Pass NULL for path to skip any errors about an empty drive.
> + * Pass NULL for activeFail to skip any monitor attempt, otherwise,
Having a separate offline-only helper in this case would avoid us having
this argument as it would never touch the monitor.
> + * set *activeFail to true if data cannot be obtained because a
> * transient guest is no longer active. */
> static int
> qemuStorageLimitsRefresh(virQEMUDriverPtr driver, virQEMUDriverConfigPtr cfg,
> @@ -11000,6 +11002,12 @@ qemuStorageLimitsRefresh(virQEMUDriverPtr driver, virQEMUDriverConfigPtr cfg,
> char *buf = NULL;
> ssize_t len;
>
> + if (!path) {
> + if (virStorageSourceIsEmpty(src))
> + return 0;
> + path = src->path;
> + }
Again, no need to pass path explicitly.
> +
> /* FIXME: For an offline domain, we always want to check current
> * on-disk statistics (as users have been known to change offline
> * images behind our backs). For a running domain, however, it
...
> @@ -18530,6 +18542,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
> virHashTablePtr stats = NULL;
> qemuDomainObjPrivatePtr priv = dom->privateData;
> bool abbreviated = false;
> + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
>
> if (!HAVE_JOB(privflags) || !virDomainObjIsActive(dom)) {
> abbreviated = true; /* it's ok, just go ahead silently */
> @@ -18555,8 +18568,18 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
>
> if (abbreviated || !disk->info.alias ||
> !(entry = virHashLookup(stats, disk->info.alias))) {
> - /* FIXME: we could still look up sizing by sharing code
> - * with qemuDomainGetBlockInfo */
> + if (qemuStorageLimitsRefresh(driver, cfg, dom,
> + disk, disk->src, NULL, NULL) < 0)
> + goto cleanup;
> + if (disk->src->allocation)
> + QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, i,
> + "allocation", disk->src->allocation);
> + if (disk->src->capacity)
> + QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, i,
> + "capacity", disk->src->capacity);
> + if (disk->src->physical)
> + QEMU_ADD_BLOCK_PARAM_ULL(record, maxparams, i,
> + "physical", disk->src->physical);
> continue;
> }
This part looks good. Having stats for offline VMs might be useful.
>
> @@ -18593,6 +18616,7 @@ qemuDomainGetStatsBlock(virQEMUDriverPtr driver,
>
> cleanup:
> virHashFree(stats);
> + virObjectUnref(cfg);
> return ret;
> }
>
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20141208/de1ad7ad/attachment-0001.sig>
More information about the libvir-list
mailing list