#! /bin/bash
#
# squeezed          Start/Stop the memory ballooning daemon
#
# chkconfig: 2345 22 77
# description: Memory ballooning daemon
# processname: squeezed
# pidfile: /var/run/squeezed.pid

# Source function library.
. /etc/init.d/functions

# Memory ballooning daemon

# location of the executable:
SQUEEZED="/opt/xensource/libexec/squeezed"

# pidfile:
PID_FILE="/var/run/squeezed.pid"

# lock file
SUBSYS_FILE="/var/lock/subsys/squeezed"

# Source function library.
. /etc/init.d/functions

if [ -e /var/xapi/xiu-xc ]; then
	export XIU=/var/xapi/xiu
fi

# Enable core dumping
ulimit -c unlimited

start() {
	echo -n $"Starting the memory ballooning daemon: "
	
	if [ -e ${SUBSYS_FILE} ]; then
		if [ -e ${PID_FILE} ] && [ -e /proc/`cat ${PID_FILE}` ]; then
			echo -n $"cannot start squeezed: already running."
			failure $"cannot start squeezed: already running."
			echo
			return 1
		fi
	fi
	
	xenstore-rm /squeezed
	${SQUEEZED} -daemon -pidfile ${PID_FILE} >/dev/null 2>&1 </dev/null

	MAX_RETRIES=30
	RETRY=0
	while [ ${RETRY} -lt ${MAX_RETRIES} ]; do
        	PID=$(cat ${PID_FILE} 2>/dev/null)
		kill -0 ${PID} 2> /dev/null
		if [ $? -eq 0 ]; then
			touch ${SUBSYS_FILE}
			success
			echo
			return 0
		fi
		sleep 1
		echo -n .
		RETRY=$(( ${RETRY} + 1 ))
	done
	echo -n $"failed to start squeezed."
	failure $"failed to start squeezed."
	killproc squeezed
	rm -f ${SUBSYS_FILE} ${PID_FILE}
	echo
	return 1
}

stop() {
	echo -n $"Stopping the memory ballooning daemon: "

	if [ ! -e ${SUBSYS_FILE} ]; then
		echo -n $"cannot stop squeezed: squeezed is not running."
		failure $"cannot stop squeezed: squeezed is not running."
		echo
		return 1;
	fi

	killproc squeezed
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && rm -f ${SUBSYS_FILE}
	return $RETVAL
}

restart() {
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	*)
		echo $"Usage: $0 {start|stop|restart}"
		exit 1
esac
