On Fri, May 16, 2008 at 05:39:46PM +0100, Daniel P. Berrange wrote:
On Fri, May 16, 2008 at 05:05:08PM +0100, Daniel P. Berrange wrote:
> When used with the --daemon arg, libvirtd will write out a pid file to
> /var/run/libvirtd.pid and exit if this file already exists. Unfortuantely
> it does this quite late in its startup procedure - in particular *after*
> the call to qemudInitialize(), which in turns initializes the drivers,
> which in turn autostarts all the VMs and networks.
>
> So if you start a 2nd libvirtd instance it would do autostart before it
> got to checking for existing PID file. This is clearly very bad because
> the same VM would be started twice resulting in data corruption. Fortunately
> the Red Hat / Fedora initscript also checks the PID file before even starting
> the daemon, but this can affect people starting the daemon directly.
>
> So this patch makes the goDaemon() / pidfile creation the very first thing
> the daemon does after parsing command line arguments. This also results in
> greatly increased startup time for OS, since the initscript doesn't have
> to wait for it to auto-start all the VMs & networks before it daemonizes.
> It also initializes the signal handlers before calling qemudInitialize()
> since these really need to be setup before we start any VMs / child procs.
There were actually some more changes needed. It needs to write the PID file
even if not running with --daemon mode to be truely safe, because some
init software won't run it in daemon mode at all. So this updated patch will
always write a PID file if run as root. It also fixes a few flaws in the
cleanup process to ensure it only unlinks the pidfile on failure if it owned
the pidfile, and removes a pointless warning when running non-root.
Yes this is a serious problem, patch looks fine, +1
Daniel
--
Red Hat Virtualization group
http://redhat.com/virtualization/
Daniel Veillard | virtualization library
http://libvirt.org/
veillard(a)redhat.com | libxml GNOME XML XSLT toolkit
http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine
http://rpmfind.net/