From 318d807a0bd3372b634d1952b559c5c627ccfa5b Mon Sep 17 00:00:00 2001 From: Nikolay Shirokovskiy Date: Fri, 9 Nov 2018 12:21:50 +0300 Subject: [PATCH] qemu: don't log error for missing optional storage sources on stats Every time we call all domain stats for inactive domain with unavailable storage source we get error message in logs [1]. It's a bit noisy. While it's arguable whether we need such message or not for mandatory disks we would like not to see messages for optional disks. Let's filter at least for cases of local files. Fixing other cases would require passing flag down the stack to .backendInit of storage which is ugly. Stats for active domain are fine because we either drop disks with unavailable sources or clean source which is handled by virStorageSourceIsEmpty in qemuDomainGetStatsOneBlockFallback. We have these logs for successful stats since 25aa7035d (version 1.2.15) which in turn fixes 596a13713 (version 1.2.12 )which added substantial stats for offline disks. [1] error message example: qemuOpenFileAs:3324 : Failed to open file '/path/to/optional/disk': No such file or directory Signed-off-by: Nikolay Shirokovskiy --- src/qemu/qemu_domain.c | 9 +++++++++ src/qemu/qemu_domain.h | 3 +++ src/qemu/qemu_driver.c | 14 ++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6f10235b43..4f729500b7 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -13704,3 +13704,12 @@ qemuDomainIsUsingNoShutdown(qemuDomainObjPrivatePtr priv) { return priv->monJSON && priv->allowReboot == VIR_TRISTATE_BOOL_YES; } + + +bool +qemuDomainDiskIsMissingLocalOptional(virDomainDiskDefPtr disk) +{ + return disk->startupPolicy == VIR_DOMAIN_STARTUP_POLICY_OPTIONAL && + virStorageSourceIsLocalStorage(disk->src) && disk->src->path && + !virFileExists(disk->src->path); +} diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 4414a50c81..73d16966e5 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -1095,4 +1095,7 @@ qemuDomainRunningReasonToResumeEvent(virDomainRunningReason reason); bool qemuDomainIsUsingNoShutdown(qemuDomainObjPrivatePtr priv); +bool +qemuDomainDiskIsMissingLocalOptional(virDomainDiskDefPtr disk); + #endif /* LIBVIRT_QEMU_DOMAIN_H */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e32257f21e..ea316f61d1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -20720,6 +20720,20 @@ qemuDomainGetStatsBlockExportDisk(virDomainDiskDefPtr disk, const char *backendstoragealias; int ret = -1; + /* + * This helps to keep logs clean from error messages on getting stats + * for optional disk with nonexistent source file. We won't get any + * stats for such a disk anyway in below code. + */ + if (!virDomainObjIsActive(dom) && + qemuDomainDiskIsMissingLocalOptional(disk)) { + VIR_INFO("optional disk '%s' source file is missing, " + "skip getting stats", disk->dst); + + return qemuDomainGetStatsBlockExportHeader(disk, disk->src, *recordnr, + records, nrecords); + } + for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) { if (blockdev) { frontendalias = QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName;