]> xenbits.xensource.com Git - libvirt.git/commitdiff
Revert "report error when virProcessGetStatInfo() is unable to parse data"
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 18 Jan 2022 11:40:09 +0000 (12:40 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 20 Jan 2022 16:51:07 +0000 (17:51 +0100)
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 <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
src/ch/ch_driver.c
src/qemu/qemu_driver.c
src/util/virprocess.c

index 3cbc66848989de870e83d4b02408adffbfea094e..53e0872207cba12d9932a3f5aaa9d6ea1270ef58 100644 (file)
@@ -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;
             }
         }
index 83cc7a04ea982101227b354e31578269a8365e70..0a1ba74e653bd2c573f943bbc035cedd9af47042 100644 (file)
@@ -1354,6 +1354,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;
             }
         }
@@ -2514,6 +2516,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;
         }
     }
@@ -10513,7 +10517,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;
index 85d8c8e747cb622754a339cb46ebc3bf2ee79def..b559a4257ec6621eced5b3b75edd64a1b9da418a 100644 (file)
@@ -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;
 }