[libvirt] [PATCH] Log virRun command output, return with error

Richard W.M. Jones rjones at redhat.com
Wed Sep 24 11:24:18 UTC 2008


On Tue, Sep 23, 2008 at 04:56:45PM -0400, Cole Robinson wrote:
>      if ((ret = virExec(conn, argv, NULL, NULL,
> -                       &childpid, -1, NULL, NULL, VIR_EXEC_NONE)) < 0)
> +                       &childpid, -1, &outfd, &errfd, VIR_EXEC_NONE)) < 0)
>          return ret;
>  
>      while ((ret = waitpid(childpid, &exitstatus, 0) == -1) && errno == EINTR);
> @@ -418,16 +430,31 @@ virRun(virConnectPtr conn,
>          return -1;
>      }
>  
> +    /* Log command output */
> +    if (outfd) {
> +        ret = saferead(outfd, out, sizeof(out)-1);
> +        err[ret < 0 ? 0 : ret] = '\0';
> +        if (*out)
> +            DEBUG("Command stdout: %s", out);
> +    }
> +    if (errfd) {
> +        ret = saferead(errfd, err, sizeof(err)-1);
> +        err[ret < 0 ? 0 : ret] = '\0';
> +        if (*err)
> +            DEBUG("Command stderr: %s", err);
> +    }
> +

I'm sure this works in tests, but I don't think it'll work reliably
all the time.

What happens if the command pauses for some time before sending output
to stdout/stderr?  You need to integrate these in the event loop,
which is going to make everything a lot more complicated.

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top




More information about the libvir-list mailing list