On Tue, Oct 7, 2014 at 4:33 PM, Zibo Zhao <[email protected]> wrote: > From: Prateek Kumar <[email protected]> > > On registering the ovirt node form the ovirt engine web > interface the ovirt node installation goes fine but the > node will suffer a "communication failure" and the > status of the node will fail to go up status. > Its due to the race condition in libvirtd shutdown where > pid file is deleted before the real libvirtd process get > terminated. > The issue is fixed by making sure the libvirtd process > is terminated before deteting the pid file and providing
"deleting" > sufficient delay. > What's the difference between the two patches that came out hours apart ? Also, can we make these lines closer to 72 chars long .. it makes the log easier to read. ... and finally, while that is a fine description of the problem, it is talking about packages that we don't have in meta-virt. So I'd like the log to just describe the race, and the fix, and drop the oVirt parts. > Signed-off-by: Prateek Kumar <[email protected]> > Signed-off-by: Zibo Zhao <[email protected]> > --- > recipes-extended/libvirt/libvirt/libvirtd.sh | 36 > +++++++++++++++++++++------- > 1 file changed, 28 insertions(+), 8 deletions(-) > > diff --git a/recipes-extended/libvirt/libvirt/libvirtd.sh > b/recipes-extended/libvirt/libvirt/libvirtd.sh > index b4fa674..beb77ec 100755 > --- a/recipes-extended/libvirt/libvirt/libvirtd.sh > +++ b/recipes-extended/libvirt/libvirt/libvirtd.sh > @@ -9,6 +9,8 @@ > > . /etc/init.d/functions > > +PID=/var/run/libvirtd.pid > + > if [ -f /lib/lsb/init-functions ] > then > . /lib/lsb/init-functions > @@ -72,24 +74,42 @@ fi > > case "$1" in > start) > - if [ -e /var/run/libvirtd.pid ]; then > - if [ -d /proc/$(cat /var/run/libvirtd.pid) ]; then > + if [ -e $PID ]; then > + if [ -d /proc/$(cat $PID) ]; then > echo "virtualization library already > started; not starting." > else > - echo "Removing stale PID file > /var/run/libvirtd.pid." > - rm -f /var/run/libvirtd.pid > + echo "Removing stale PID file $PID." > + rm -f $PID The switch to using $PID really looks like it should be a separate patch. Since is has nothing to do with the race condition fix. > fi > fi > log_begin_msg "Starting virtualization library daemon: > libvirtd" > start-stop-daemon -K -x /usr/bin/dnsmasq > - start-stop-daemon --start --quiet --pidfile > /var/run/libvirtd.pid --exec /usr/sbin/libvirtd -- --daemon --listen > + start-stop-daemon --start --quiet --pidfile $PID --exec > /usr/sbin/libvirtd -- --daemon --listen > log_end_msg $? > ;; > stop) > + if [ -f $PID ]; then > + libvirtd_pid=$(cat $PID) > + fi > log_begin_msg "Stopping virtualization library daemon: > libvirtd" > - start-stop-daemon --stop --quiet --retry 3 --exec > /usr/sbin/libvirtd --pidfile /var/run/libvirtd.pid > - log_end_msg $? > - rm -f /var/run/libvirtd.pid > + start-stop-daemon --stop --quiet --retry 3 --exec > /usr/sbin/libvirtd --pidfile $PID > + CHECK=0 > + K=0 > + if [ "x$libvirtd_pid" != "x" ]; then > + while /bin/kill -0 $libvirtd_pid >/dev/null 2>&1; do we shouldn't hardcode /bin/kill. Bruce > + K=$(($K+1)) > + sleep 1 > + if [ $K -ge 60 ]; then > + log_end_msg "Stopping libvirtd: timed > out" > + CHECK=1 > + break > + fi > + done > + fi > + if [ $CHECK -eq 0 ]; then > + log_end_msg "Removing pid file $PID" > + rm -f $PID > + fi > ;; > restart) > $0 stop > -- > 1.9.1 > > -- > _______________________________________________ > meta-virtualization mailing list > [email protected] > https://lists.yoctoproject.org/listinfo/meta-virtualization -- "Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end" -- _______________________________________________ meta-virtualization mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-virtualization
