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

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