#!/bin/sh
#
### BEGIN INIT INFO
# Provides:            saunafs-uraft
# Required-Start:      $local_fs $network $syslog $remote_fs
# Required-Stop:       $local_fs $syslog $remote_fs
# Should-Start:        $syslog
# Should-Stop:         $network $syslog
# Default-Start:       2 3 4 5
# Default-Stop:        0 1 6
# Short-Description:   Start up saunafs-master managed by saunafs-uraft high availability daemon
# Description:         SaunaFS is a distributed, scalable, fault-tolerant and highly available file system.
#                      This service starts up SaunaFS master managed by high availability daemon.
### END INIT INFO

NAME=saunafs-uraft
DAEMON=/usr/sbin/saunafs-uraft
MASTER=/usr/sbin/sfsmaster
MASTER_OPTS="-o ha-cluster-managed -o initial-personality=shadow"

# Exit if executable is not installed
[ -x $DAEMON ] || exit 0

PIDF=/var/run/${NAME}.pid
RETRY=TERM/30/KILL/5

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# define LSB log_* functions.
. /lib/lsb/init-functions

# Include saunafs-master defaults if available
SAUNAFSURAFT_ENABLE=false
SAUNAFSURAFT_CONFIG_FILE=
SAUNAFSURAFT_DEFAULTS_FILE=/etc/default/saunafs-uraft
if [ -s "$SAUNAFSURAFT_DEFAULTS_FILE" ] ; then
    . "$SAUNAFSURAFT_DEFAULTS_FILE"
    case "x$SAUNAFSURAFT_ENABLE" in
        xtrue) ;;
        xfalse)
           log_warning_msg "saunafs-uraft not enabled in \"$SAUNAFSURAFT_DEFAULTS_FILE\", exiting..."
           exit 0
           ;;
        *)
            log_failure_msg "value of SAUNAFSURAFT_ENABLE must be either 'true' or 'false';"
            log_failure_msg "not starting saunafs-uraft."
            exit 1
            ;;
    esac
fi

case "$1" in
    start)
        if $0 status >>/dev/null; then
            log_action_msg "$NAME is already running"
            exit 0
        fi
        log_action_begin_msg "$NAME starting"
        R=$($MASTER $MASTER_OPTS start)
        if ! $R ; then
            log_action_end_msg 1 "$R"
        else
            R=$(start-stop-daemon --start --exec ${DAEMON} --oknodo --pidfile ${PIDF} --make-pidfile \
                --background 2>&1)
            if $R ; then
                log_action_end_msg 0 "$R"
            else
                log_action_end_msg 1 "$R"
            fi
        fi
    ;;
    stop)
        log_action_begin_msg "$NAME stopping"
        R=$($MASTER $MASTER_OPTS stop)
        if ! $R ; then
            log_action_end_msg 1 "$R"
        else
            R=$(start-stop-daemon --stop --exec ${DAEMON} --pidfile $PIDF --retry=$RETRY --quiet)
            if $R ; then
                log_action_end_msg 0 "$R"
            else
                log_action_end_msg 1 "not running"
            fi
            rm -f "$PIDF"
        fi
        /usr/sbin/saunafs-uraft-helper drop-ip
    ;;
    force-reload|restart)
        $0 stop
        $0 start
    ;;
    status)
        ## return status 0 if process is running.
        status_of_proc -p "$PIDF" "$DAEMON" "$NAME"
    ;;
    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
    ;;
esac
