#! /bin/sh

# Copyright (c) 2007 Javier Fernandez-Sanguino <jfs@debian.org>
# Copyright (c) 2013 Wessel Dankers <wsl@fruit.je>
#
#	This program is free software; you can redistribute it and/or modify
#	it under the terms of the GNU General Public License as published by
#	the Free Software Foundation; either version 2 of the License, or
#	(at your option) any later version.
#
#	This program is distributed in the hope that it will be useful,
#	but WITHOUT ANY WARRANTY; without even the implied warranty of
#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#	GNU General Public License for more details.
#
#	You should have received a copy of the GNU General Public License along
#	with this program; if not, write to the Free Software Foundation, Inc.,
#	51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

### BEGIN INIT INFO
# Provides:          cachefilesd
# Required-Start:    $local_fs
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: CacheFiles daemon
# Description:       CacheFiles daemon is the userland part required for the
#                    'fsc' mount option of NFS. See the NFS manpage.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

DAEMON=/sbin/cachefilesd
NAME=cachefilesd
DESC="fscache daemon"

PIDFILE=/var/run/$NAME.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

# Default options, these can be overridden by the information
# at /etc/default/$NAME
DAEMON_OPTS=

# Time to wait for the server to die, in seconds
# If this value is set too low you might not
# let some servers to die gracefully and
# 'restart' will not work
DIETIME=10

# Time to wait for the server to start, in seconds
# If this value is set each time the server is
# started (on start or restart) the script will
# stall to try to determine if it is running
# If it is not set and the server takes time
# to setup a pid file the log message might
# be a false positive (says it did not start
# when it actually did)
#STARTTIME=2

# Include defaults if available
if [ -f /etc/default/$NAME ]
then
	. /etc/default/$NAME
fi

case $RUN in yes) ;; *)
	log_failure_msg "$NAME disabled, please set RUN=yes in /etc/default/$NAME"
	exit 0
esac

start_server() {
	test -d /run/sendsigs.omit.d && ln -sf $PIDFILE /run/sendsigs.omit.d/
	start-stop-daemon --start --quiet --exec $DAEMON -- $DAEMON_OPTS
	return $?
}

running() {
	start-stop-daemon --stop --quiet --signal 0 --pidfile $PIDFILE --exec $DAEMON
	return $?
}

case $1 in start)
	log_daemon_msg "Starting $DESC" "$NAME"
	# Check if it's running first
	if running
	then
		log_progress_msg "already running"
		log_end_msg 0
		exit 0
	fi
	if start_server
	then
		# NOTE: Some servers might die some time after they start,
		# this code will detect this issue if STARTTIME is set
		# to a reasonable value
		[ -n "$STARTTIME" ] && sleep $STARTTIME
		if running
		then
			# It's ok, the server started and is running
			log_end_msg 0
		else
			# It is not running after we did start
			log_end_msg 1
		fi
	else
		log_end_msg 1
	fi
;; stop)
	log_daemon_msg "Stopping $DESC" "$NAME"
	if running
	then
		# Only stop the server if we see it running
		errcode=0
		start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON || errcode=$?
		log_end_msg $errcode
	else
		# If it's not running don't do anything
		log_progress_msg "not running"
		log_end_msg 0
	fi
;; force-stop)
	log_daemon_msg "Stopping (force) $DESC" "$NAME"
	if running
	then
		start-stop-daemon --stop --quiet --retry $DIETIME --pidfile $PIDFILE --exec $DAEMON
		log_end_msg $?
	else
		log_progress_msg "already stopped"
		log_end_msg 0
	fi
;; restart|force-reload)
	log_daemon_msg "Restarting $DESC" "$NAME"
	if running
	then
		if ! start-stop-daemon --stop --quiet --retry TERM/$DIETIME --pidfile $PIDFILE --exec $DAEMON
		then
			echo "Unable to stop daemon" >&2
			exit 2
		fi
	fi
	start_server
	errcode=$?
	[ -n "$STARTTIME" ] && sleep $STARTTIME
	running || errcode=$?
	log_end_msg $errcode
;; status)
	status_of_proc -p $PIDFILE $DAEMON $NAME
;; *)
	echo "Usage: $0 {start|stop|force-stop|restart|force-reload|status}" >&2
	exit 1
	;;
esac

exit 0
