<div><br></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 12, 2022 at 6:49 PM Michal Prívozník <<a href="mailto:mprivozn@redhat.com">mprivozn@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">On 1/11/22 19:13, Ani Sinha wrote:<br>
> Currently virProcessGetStatInfo() always returns success and only logs error<br>
> when it is unable to parse the data. Make this function actually report the<br>
> error and return a negative value in this error scenario.<br>
> <br>
> Fix the callers so that they do not override the error generated.<br>
> Also fix non-linux implementation of this function so as to report error.<br>
> <br>
> Signed-off-by: Ani Sinha <<a href="mailto:ani@anisinha.ca" target="_blank">ani@anisinha.ca</a>><br>
> ---<br>
>  src/ch/ch_driver.c     |  2 --<br>
>  src/qemu/qemu_driver.c |  7 +------<br>
>  src/util/virprocess.c  | 17 +++++++++++++----<br>
>  3 files changed, 14 insertions(+), 12 deletions(-)<br>
> <br>
> changelog:<br>
> v4: on freebsd error on the logs is a problem appaently. try to fix<br>
> that.<br>
> v3: fix non linux implementation<br>
> v2: fix callers<br>
> <br>
> diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c<br>
> index 53e0872207..3cbc668489 100644<br>
> --- a/src/ch/ch_driver.c<br>
> +++ b/src/ch/ch_driver.c<br>
> @@ -1073,8 +1073,6 @@ chDomainHelperGetVcpus(virDomainObj *vm,<br>
>              if (virProcessGetStatInfo(&vcpuinfo->cpuTime,<br>
>                                        &vcpuinfo->cpu, NULL,<br>
>                                        vm->pid, vcpupid) < 0) {<br>
> -                virReportSystemError(errno, "%s",<br>
> -                                      _("cannot get vCPU placement & pCPU time"));<br>
>                  return -1;<br>
>              }<br>
>          }<br>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c<br>
> index d3d76c003f..65ac5ef367 100644<br>
> --- a/src/qemu/qemu_driver.c<br>
> +++ b/src/qemu/qemu_driver.c<br>
> @@ -1359,8 +1359,6 @@ qemuDomainHelperGetVcpus(virDomainObj *vm,<br>
>              if (virProcessGetStatInfo(&vcpuinfo->cpuTime,<br>
>                                        &vcpuinfo->cpu, NULL,<br>
>                                        vm->pid, vcpupid) < 0) {<br>
> -                virReportSystemError(errno, "%s",<br>
> -                                     _("cannot get vCPU placement & pCPU time"));<br>
>                  return -1;<br>
>              }<br>
>          }<br>
> @@ -2521,8 +2519,6 @@ qemuDomainGetInfo(virDomainPtr dom,<br>
>      if (virDomainObjIsActive(vm)) {<br>
>          if (virProcessGetStatInfo(&(info->cpuTime), NULL, NULL,<br>
>                                    vm->pid, 0) < 0) {<br>
> -            virReportError(VIR_ERR_OPERATION_FAILED, "%s",<br>
> -                           _("cannot read cputime for domain"));<br>
>              goto cleanup;<br>
>          }<br>
>      }<br>
> @@ -10530,8 +10526,7 @@ qemuDomainMemoryStatsInternal(virQEMUDriver *driver,<br>
>      }<br>
>  <br>
>      if (virProcessGetStatInfo(NULL, NULL, &rss, vm->pid, 0) < 0) {<br>
> -        virReportError(VIR_ERR_OPERATION_FAILED, "%s",<br>
> -                       _("cannot get RSS for domain"));<br>
> +        virResetLastError();<br>
>      } else {<br>
>          stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_RSS;<br>
>          stats[ret].val = rss;<br>
> diff --git a/src/util/virprocess.c b/src/util/virprocess.c<br>
> index b559a4257e..cbb31441cc 100644<br>
> --- a/src/util/virprocess.c<br>
> +++ b/src/util/virprocess.c<br>
> @@ -1779,12 +1779,20 @@ virProcessGetStatInfo(unsigned long long *cpuTime,<br>
>      long rss = 0;<br>
>      int cpu = 0;<br>
>  <br>
> -    if (!proc_stat ||<br>
> -        virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_UTIME], NULL, 10, &usertime) < 0 ||<br>
> +    if (!proc_stat) {<br>
> +        VIR_WARN("Unable to get proc stats from the kernel");<br>
> +        return 0;<br>
> +    }<br>
> +<br>
<br>
I don't think I've objected to this part in v3, any reason for changing<br>
it? Because now it's actually worse. For instance in<br>
qemuDomainMemoryStatsInternal() there's the following:<br>
<br>
long rss;<br>
<br>
virProcessGetStatInfo(NULL, NULL, &rss, vm->pid, 0);<br>
<br>
Now, if virProcessGetStatInfo() returns 0 is @rss set? Depends whether<br>
@proc_stat was NULL or not. But the caller has no way of figuring that out.<br>
<br>
I believe all I wanted for you to do was to not change the semantics of<br>
qemuDomainMemoryStatsInternal(). I even suggested how to do that.</blockquote><div dir="auto"><br></div><div dir="auto">Yes I did that in v4. </div><div dir="auto"><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)">     }</span><br style="color:rgb(212,212,213);font-family:-apple-system,HelveticaNeue;word-spacing:1px"><br style="color:rgb(212,212,213);font-family:-apple-system,HelveticaNeue;word-spacing:1px"><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)">     if (virProcessGetStatInfo(NULL, NULL, &rss, vm->pid, 0) < 0) {</span><br style="color:rgb(212,212,213);font-family:-apple-system,HelveticaNeue;word-spacing:1px"><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)">-        virReportError(VIR_ERR_OPERATI</span><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)">ON_FAILED, "%s",</span><br style="color:rgb(212,212,213);font-family:-apple-system,HelveticaNeue;word-spacing:1px"><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)">-                       _("cannot get RSS for domain"));</span><br style="color:rgb(212,212,213);font-family:-apple-system,HelveticaNeue;word-spacing:1px"><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)">+        virResetLastError();</span><br></div><div dir="auto"><span style="word-spacing:1px;border-color:rgb(49,49,49);color:rgb(49,49,49)"><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)" dir="auto"></blockquote><div dir="auto"><div dir="auto" style="border-color:rgb(0,0,0);color:rgb(0,0,0)">I was also trying to find a solution for the logging issue as well as a part of v4 which clearly was incorrect.</div><div dir="auto"><br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)" dir="auto"><br></blockquote></div></div>