#!/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"

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

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

start()
{
	printf "Starting ctdbd service: "

	case "$CTDB_PLATFORM_STYLE" in
	suse)
		startproc "$ctdbd"
		rc_status -v
		;;
	redhat)
		daemon --pidfile "$pidfile" "$ctdbd"
		RETVAL=$?
		echo
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || RETVAL=1
		return $RETVAL
		;;
	debian)
		mkdir -p -m0755 ${pidfile%/*}
		eval start-stop-daemon --start --quiet --background --exec "$ctdbd"
		;;
	esac
}

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

	case "$CTDB_PLATFORM_STYLE" in
	suse)
		"$ctdb" "shutdown"
		rc_status -v
		;;
	redhat)
		"$ctdb" "shutdown"
		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)
		"$ctdb" "shutdown"
		log_end_msg $?
		;;
	esac
}

restart()
{
	stop
	start
}

check_status()
{
	case "$CTDB_PLATFORM_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
