From 81f1508d99d4740e7a2a092128d651cf245a554e Mon Sep 17 00:00:00 2001 Message-Id: <81f1508d99d4740e7a2a092128d651cf245a554e@dist-git> From: Michal Privoznik Date: Tue, 18 Jan 2022 12:40:09 +0100 Subject: [PATCH] Revert "report error when virProcessGetStatInfo() is unable to parse data" This reverts commit 938382b60ae5bd1f83b5cb09e1ce68b9a88f679a. Turns out, the commit did more harm than good. It changed semantics on some public APIs. For instance, while qemuDomainGetInfo() previously did not returned an error it does now. While the calls to virProcessGetStatInfo() is guarded with virDomainObjIsActive() it doesn't necessarily mean that QEMU's PID is still alive. QEMU might be gone but we just haven't realized it (e.g. because the eof handler thread is waiting for a job). Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2041610 Signed-off-by: Michal Privoznik Reviewed-by: Andrea Bolognani (cherry picked from commit 105dace22cc7b5b18d72a4dcad4a2cf386ce5c99) Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2043579 Signed-off-by: Michal Privoznik --- src/ch/ch_driver.c | 2 ++ src/qemu/qemu_driver.c | 7 ++++++- src/util/virprocess.c | 8 ++------ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c index 3cbc668489..53e0872207 100644 --- a/src/ch/ch_driver.c +++ b/src/ch/ch_driver.c @@ -1073,6 +1073,8 @@ chDomainHelperGetVcpus(virDomainObj *vm, if (virProcessGetStatInfo(&vcpuinfo->cpuTime, &vcpuinfo->cpu, NULL, vm->pid, vcpupid) < 0) { + virReportSystemError(errno, "%s", + _("cannot get vCPU placement & pCPU time")); return -1; } } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 65ac5ef367..d3d76c003f 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1359,6 +1359,8 @@ qemuDomainHelperGetVcpus(virDomainObj *vm, if (virProcessGetStatInfo(&vcpuinfo->cpuTime, &vcpuinfo->cpu, NULL, vm->pid, vcpupid) < 0) { + virReportSystemError(errno, "%s", + _("cannot get vCPU placement & pCPU time")); return -1; } } @@ -2519,6 +2521,8 @@ qemuDomainGetInfo(virDomainPtr dom, if (virDomainObjIsActive(vm)) { if (virProcessGetStatInfo(&(info->cpuTime), NULL, NULL, vm->pid, 0) < 0) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("cannot read cputime for domain")); goto cleanup; } } @@ -10526,7 +10530,8 @@ qemuDomainMemoryStatsInternal(virQEMUDriver *driver, } if (virProcessGetStatInfo(NULL, NULL, &rss, vm->pid, 0) < 0) { - virResetLastError(); + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("cannot get RSS for domain")); } else { stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_RSS; stats[ret].val = rss; diff --git a/src/util/virprocess.c b/src/util/virprocess.c index 85d8c8e747..b559a4257e 100644 --- a/src/util/virprocess.c +++ b/src/util/virprocess.c @@ -1784,10 +1784,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime, virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_STIME], NULL, 10, &systime) < 0 || virStrToLong_l(proc_stat[VIR_PROCESS_STAT_RSS], NULL, 10, &rss) < 0 || virStrToLong_i(proc_stat[VIR_PROCESS_STAT_PROCESSOR], NULL, 10, &cpu) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot parse process status data for pid '%d/%d'"), - (int) pid, (int) tid); - return -1; + VIR_WARN("cannot parse process status data"); } /* We got jiffies @@ -1884,8 +1881,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime G_GNUC_UNUSED, pid_t pid G_GNUC_UNUSED, pid_t tid G_GNUC_UNUSED) { - virReportSystemError(ENOSYS, "%s", - _("Process statistics data is not supported on this platform")); + errno = ENOSYS; return -1; } -- 2.35.0