Bug 491766 - libvirtd fails to start if pid file exists but init script still says it started OK
libvirtd fails to start if pid file exists but init script still says it star...
Product: Virtualization Tools
Classification: Community
Component: libvirt (Show other bugs)
All Linux
medium Severity medium
: ---
: ---
Assigned To: Daniel Veillard
Depends On:
  Show dependency treegraph
Reported: 2009-03-23 18:22 EDT by Pasi Karkkainen
Modified: 2010-03-16 13:18 EDT (History)
7 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2009-11-26 10:15:10 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Pasi Karkkainen 2009-03-23 18:22:19 EDT
Description of problem:
libvirtd fails to start if pid file exists but init script still says it started OK. Error is being logged to /var/log/messages.

Version-Release number of selected component (if applicable):
# rpm -qa|grep -i libvirt

How reproducible:

Steps to Reproduce:
1. Make libvirtd crash or kill it.
2. Run "/etc/init.d/libvirtd start" and pay attention to start status: OK.
3. Check /var/log/messages for error about PID file already existing; libvirtd failed to start.
Actual results:
libvirtd fails to start if PID file already exists, but init script (/etc/init.d/libvirtd) still says it started OK (even when it didn't).

libvirtd: Failed to open pid file '/var/run/libvirtd.pid' : File exists

Expected results:
libvirtd init script should say FAILED instead of OK if PID file already exists..

Additional info:
Standard Fedora 10 with latest updates installed (no updates-testing in use).
Comment 1 Pasi Karkkainen 2009-03-24 15:07:10 EDT
I just tested libvirtd 0.6.1 and the issue still remains there.
Comment 2 Mark McLoughlin 2009-03-25 12:07:22 EDT
Moving to libvirt upstream bugzilla

Okay, here's what's happening:

  1) /etc/rc.d/init.d/functions:daemon() will happily start the daemon if
     there is a pid file, but the pid listed isn't running

  2) libvirtd refuses to start if there is a pid file

  3) it only does this after it has daemonized, so the error code is never
     seen by the init script

Suggest the following changes:

  -) Don't refuse to start if a pidfile exists

  -) Write the pidfile from the parent process after the daemon process
     has been spawned; if it fails, kill the daemon and return an error
Comment 3 Daniel Berrange 2009-10-23 12:51:57 EDT
I believe this patch should address the issue - it ensures we exit with an error status if pidfile can't be acquired, and I believe it also avoids unlinking the other apps pidfile upon failure

Comment 4 Daniel Berrange 2009-11-26 10:15:10 EST
Fixed in 0.7.4 release

Note You need to log in before you can comment on or make changes to this bug.