#!/bin/sh
#
# corosync       Start the Corosync Cluster Engine
#
# Author:       Andrew Beekhof <abeekhof@suse.de>
# License:      Revised BSD
#
# chkconfig: - 20 20
# processname:  corosync
# description:  Corosync Cluster Engine
#
### BEGIN INIT INFO
# Description: corosync....
#
# Short-Description: Corosync Cluster Engine.
# Provides: corosync
# Required-Start: $network
# Should-Start: $syslog
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 6
### END INIT INFO

do_force=0
prog="corosync"
lockfile="/var/lock/subsys/$prog"

internal_status() {
    killall -0 corosync > /dev/null 2>&1
    return $?
}

status() {
    if
	! internal_status
    then
	echo "Stopped"
	return 7
    fi

    echo "Running"
    return 0
}

start() {
    echo -n $"Starting Corosync Cluster Engine ($prog): "
    if
	! internal_status
    then
	echo -n "starting... "
	$prog 2>&1 > /dev/null 2>&1
	echo -n "rc=$?: "
    fi

    sleep 2 # give it time to fail... $? isn't definitive

    if
	internal_status
    then
	echo "OK"
	return 0
    fi

    echo "Failed"
    return 1
}

do_force=0
do_forever=1

stop() {
    echo -n $"Stopping Corosync Cluster Engine ($prog): "

    killall -QUIT corosync

    if [ $do_forever = 0 ]; then
	for i in 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20; do
	    if
		internal_status
	    then
		sleep 2
		echo -n "."
	    else
		rm -f "$lockfile"
		echo "OK"
		return 0
	    fi
	done

	if [ $do_force = 1 ]; then
	    echo -n "Escalating... "
	    killall -KILL corosync
	    sleep 5

	    if
		! internal_status
	    then
		rm -f "$lockfile"
		echo "OK"
		return 0
	    fi
	fi

	echo "Failed"
	return 1
    fi

    while
        internal_status
    do
	sleep 1
	echo -n "."
    done

    rm -f "$lockfile"
    echo "OK"
    return 0
}

restart() {
    stop
    start
}

case "$1" in
    start|stop|restart)
        $1
        ;;
    force-stop)
	do_force=1
        stop
        ;;
    reload|force-reload)
        restart
        ;;
    condrestart|try-restart)
        [ ! -f "$lockfile" ] || restart
        ;;
    status)
        status $prog
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|try-restart|condrestart|reload|force-reload|force-stop|status}"
        exit 2
esac