#!/bin/sh

# Start and stop CTDB (Clustered TDB daemon)
#
# chkconfig: - 90 01
#
# description: Starts and stops CTDB
# pidfile: /var/run/ctdb/ctdbd.pid
# config: /etc/sysconfig/ctdb

### BEGIN INIT INFO
# Provides:            ctdb
# Required-Start:      $local_fs $syslog $network $remote_fs
# Required-Stop:       $local_fs $syslog $network $remote_fs
# Default-Start:       2 3 4 5
# Default-Stop:        0 1 6
# Short-Description:   start and stop ctdb service
# Description:         Start and stop CTDB (Clustered TDB daemon)
### END INIT INFO

# Source function library.
if [ -f /etc/init.d/functions ] ; then
    # Red Hat
    . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
    # Red Hat
    . /etc/rc.d/init.d/functions
elif [ -f /etc/rc.status ] ; then
    # SUSE
    . /etc/rc.status
    rc_reset
    LC_ALL=en_US.UTF-8
elif [ -f /lib/lsb/init-functions ] ; then
    # Debian
    . /lib/lsb/init-functions
fi

# Avoid using root's TMPDIR
unset TMPDIR

[ -n "$CTDB_BASE" ] || export CTDB_BASE="/etc/ctdb"

. "${CTDB_BASE}/functions"

load_system_config "network"

# check networking is up (for redhat)
if [ "$NETWORKING" = "no" ] ; then
    exit 0
fi

load_system_config "ctdb"

detect_init_style
export CTDB_INIT_STYLE

ctdbd="${CTDBD:-/usr/sbin/ctdbd}"
ctdbd_wrapper="${CTDBD_WRAPPER:-/usr/sbin/ctdbd_wrapper}"
pidfile="/var/run/ctdb/ctdbd.pid"

############################################################

start()
{
    printf "Starting ctdbd service: "

    case "$CTDB_INIT_STYLE" in
	suse)
	    startproc \
		"$ctdbd_wrapper" "start"
	    rc_status -v
	    ;;
	redhat)
	    daemon --pidfile "$pidfile" \
		"$ctdbd_wrapper" "start"
	    RETVAL=$?
	    echo
	    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || RETVAL=1
	    return $RETVAL
	    ;;
	debian)
	    eval start-stop-daemon --start --quiet --background --exec \
		"$ctdbd_wrapper" "start"
	    ;;
    esac
}

stop()
{
    printf "Shutting down ctdbd service: "

    case "$CTDB_INIT_STYLE" in
	suse)
	    "$ctdbd_wrapper" "stop"
	    rc_status -v
	    ;;
	redhat)
	    "$ctdbd_wrapper" "stop"
	    RETVAL=$?
	    # Common idiom in Red Hat init scripts - success() always
	    # succeeds so this does behave like if-then-else
	    # shellcheck disable=SC2015
            [ $RETVAL -eq 0 ] && success || failure
	    echo ""
	    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ctdb
	    return $RETVAL
	    ;;
	debian)
	    "$ctdbd_wrapper" "stop"
	    log_end_msg $?
	    ;;
    esac
}

restart()
{
    stop
    start
}

check_status ()
{
	case "$CTDB_INIT_STYLE" in
	suse)
		checkproc -p "$pidfile" "$ctdbd"
		rc_status -v
		;;
	redhat)
		status -p "$pidfile" -l "ctdb" "$ctdbd"
		;;
	debian)
		status_of_proc -p "$pidfile" "$ctdbd" "ctdb"
		;;
	esac
}

############################################################

case "$1" in
    start)
  	start
	;;
    stop)
  	stop
	;;
    restart|reload|force-reload)
  	restart
	;;
    status)
  	check_status
	;;
    condrestart|try-restart)
  	if check_status >/dev/null ; then
	    restart
	fi
	;;
    cron)
	# used from cron to auto-restart ctdb
  	check_status >/dev/null 2>&1 || restart
	;;
    *)
	echo "Usage: $0 {start|stop|restart|reload|force-reload|status|cron|condrestart|try-restart}"
	exit 1
esac
