[PATCH] use qemudReadLogOutput (was: Re: [libvirt] can't install fedora guest)
Daniel P. Berrange
berrange at redhat.com
Mon Feb 9 11:02:58 UTC 2009
On Sat, Feb 07, 2009 at 06:05:51PM +0100, Guido G?nther wrote:
> On Fri, Feb 06, 2009 at 04:48:09PM +0000, Daniel P. Berrange wrote:
> > That will cause libvirtd to spin 100% cpu forever, if a guest fails
> > to start up. eg disk to mis-configured disk
> >
> > The core problem here, is that ret == 0 has 2 possible implications
> >
> > - QEMU has exited, and no more data will be written
> > - QEMU is still starting up, and we have read all the data
> > written so far, but more may arrive soon.
> >
> > The current code there is correct for the first scenario, but even
> > removing it, is not entirely correct for the 2nd scenario. If we
> > hit ret == 0, and QEMU is still running, we shouldn't spin 100%
> > CPU in read - we should poll() to wait for more data.
> >
> > As a quick fix though, we could probably detect whether QEMU has exited
> > by doing 'kill(vm->pid, 0)' and check for errno == ESRCH - indicates
> > that the process no longer exists.
> >
> > eg,
> >
> > } else if (ret == 0) {
> > if (kill(vm->pid, 0) == -1) {
> > if (errno == ERSCH)
> > return 0;
> > else
> > return -1;
> > } else {
> > continue; /* should really go into poll() at this point */
> > }
> > } else {
> The problem is that we're using this function for two purposes: To read
> from a logfile where poll()'ing on POLLIN always returns "data readable"
> which leaves us spinning (and EOF might get in our way) and also using
> it on the monitor PTY itself where it works as expected. Why not simply
> introduce qemudReadLogOutput? This at least allows us to usleep while
> waiting for the log file to fill up with data. I couldn't make libvirtd
> spin with this patch anymore. O.k. to apply?
Ah of course, I forgot poll() isn't particularly useful on regular
files. For a non-spinning version we'd need to integrate with inotify
to monitor changes. ACK to your proposed patch for now.
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list