Blame SOURCES/libvirt-Revert-report-error-when-virProcessGetStatInfo-is-unable-to-parse-data.patch

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