init-ceph: stop returns before daemons are dead

The existence of the pidfile must be checked outside of the loop to send
a signal to the daemon. Otherwise the daemon will remove the pidfile and
stop can return before the process is dead because it only checks
/proc/$pid if the pidfile exists.

http://tracker.ceph.com/issues/10389 Fixes: #10389

Signed-off-by: Loic Dachary <ldachary@redhat.com>
This commit is contained in:
Loic Dachary 2014-12-19 15:54:33 +01:00
parent de0213457d
commit 487c22a8a4

View File

@ -88,8 +88,7 @@ stop_daemon() {
action=$5
[ -z "$action" ] && action="Stopping"
echo -n "$action Ceph $name on $host..."
do_cmd "while [ 1 ]; do
[ -e $pidfile ] || break
do_cmd "if [ -e $pidfile ] ; then
pid=\`cat $pidfile\`
while [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline ; do
cmd=\"kill $signal \$pid\"
@ -98,8 +97,7 @@ stop_daemon() {
sleep 1
continue
done
break
done"
fi"
echo done
}