#!/bin/bash
# Copyright (c) 2008,2009,2010 Citrix Systems, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; version 2.1 only. with the special
# exception on linking described in file LICENSE.
#
# 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 Lesser General Public License for more details.
#
FILENAME=`basename $0`
LOCKFILE='/dev/shm/xe_toolstack_restart.lock'

(
flock -x -n 200
if [ "$?" != 0 ]; then 
	echo "Exiting: cannot lock $LOCKFILE. Is an instance of $0 running already?"
	exit 1
fi

echo "Executing $FILENAME"

POOLCONF=`cat @ETCDIR@/pool.conf`
SERVICES="xapi v6d squeezed perfmon xenopsd xenopsd-xc xenopsd-xenlight xenopsd-simulator xenopsd-libvirt xcp-rrdd-plugins xcp-rrdd-gpumon xcp-rrdd xcp-networkd fe forkexecd mpathalert-daemon"

TO_RESTART=""
for svc in $SERVICES ; do
	# xcp-networkd should be ignored if the do-not-use file exists
	if [ $svc == xcp-networkd -a -e /tmp/do-not-use-networkd ] ; then
		continue
	fi

	# mpathalert-daemon isn't in chkconfig, so needs to be handled specially
	if [ $svc == mpathalert-daemon -a $POOLCONF == "master" ] ; then
		TO_RESTART="$svc $TO_RESTART"
		@ETCDIR@/master.d/03-mpathalert-daemon stop
		continue
	fi

	# restart other services only if chkconfig said they were enabled
	chkconfig $svc

	if [ $? -eq 0 ] ; then
		TO_RESTART="$svc $TO_RESTART"
		service $svc stop
	fi
done

set -e

for svc in $TO_RESTART ; do
	# mpathalert-daemon isn't in chkconfig, so needs to be handled specially
	if [ $svc == mpathalert-daemon ] ; then 
		@ETCDIR@/master.d/03-mpathalert-daemon start
		continue
	fi
	service $svc start
done

rm -f $LOCKFILE
echo "done."
)200>$LOCKFILE

exit $?
