#!/sbin/runscript # Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/sys-cluster/cman/files/cman.rc,v 1.6 2005/03/25 16:15:21 xmerlin Exp $ depend() { use net need ccs provide cluster-manager } umount_gfs_filesystems() { local sig retry local remaining="$(awk '$3 == "gfs" { print $2 }' /proc/mounts | sort -r)" if [ -n "${remaining}" ] then sig= retry=3 while [ -n "${remaining}" -a "${retry}" -gt 0 ] do if [ "${retry}" -lt 3 ] then ebegin "Unmounting GFS filesystems (retry)" umount ${remaining} &>/dev/null eend $? "Failed to unmount GFS filesystems this retry" else ebegin "Unmounting GFS filesystems" umount ${remaining} &>/dev/null eend $? "Failed to unmount GFS filesystems" fi remaining="$(awk '$3 == "gfs" { if ($2 != "/") print $2 }' /proc/mounts | sort -r)" [ -z "${remaining}" ] && break /bin/fuser -k -m ${sig} ${remaining} &>/dev/null sleep 5 retry=$((${retry} -1)) sig=-9 done fi } load_modules() { local module modules modules=$1 for module in ${modules}; do ebegin "Loading ${module} kernel module" modprobe ${module} > /dev/null eend $? "Failed to load ${module} kernel module" done } unload_modules() { local module modules modules=$1 for module in ${modules}; do ebegin "Unloading ${module} kernel module" modprobe -r ${module} > /dev/null eend $? "Failed to unload ${module} kernel module" done } unload_gfs_modules() { if [ -f /proc/fs/gfs ]; then modules="gfs lock_harness" fi if [ -d /proc/cluster/lock_dlm ]; then modules="${modules} lock_dlm" fi if [ -d /proc/cluster/lock_gulm ]; then modules="${modules} lock_gulm" fi unload_modules ${modules} } start() { #if grep -qE "<[[:space:]]*gulm([[:space:]]|[>]|$)" /etc/cluster/cluster.conf #then # die " section detected in /etc/cluster/cluster.conf" #fi if [ ! -d /proc/cluster/config/cman ]; then load_modules cman fi ebegin "Starting cman" /sbin/cman_tool -t ${CMAN_CLUSTER_TIMEOUT} \ -w join ${CMAN_JOIN_OPTS} > /dev/null if [ "$?" -ne 0 ] then ewend 1 "Failed to start cman" else eend 0 # make sure that we are quorate? if [ ${CMAN_QUORUM_TIMEOUT} -gt 0 ] then ebegin "Waiting for quorum (${CMAN_QUORUM_TIMEOUT} secs)" /sbin/cman_tool -t ${CMAN_QUORUM_TIMEOUT} -q wait eend $? fi fi } stop() { # umount GFS filesystems umount_gfs_filesystems # shutdown clvm, fenced services # need to be fixed (clvm missing) local fence_status="$(cman_tool services | awk '$1 ~ /Fence/ { print $3 }')" if [ -n "${fence_status}" ]; then if [ -x /sbin/fence_tool ]; then ebegin "Stopping fence domain" /sbin/fence_tool leave > /dev/null 2>&1 eend $? fi fi # shutdown dlm, gfs unload_gfs_modules ebegin "Stopping cman" local retry stat local cman_status cman_status="$(cman_tool status | awk '$1 ~ /Membership/ { print $3 }')" if [ "${cman_status}" != "Not-in-Cluster" -a -d /proc/cluster/config/cman ]; then retry=3 stat=1 while [ "${stat}" -eq 1 -a "${retry}" -gt 0 ] do /sbin/cman_tool -w -t ${CMAN_SHUTDOWN_TIMEOUT} \ leave ${CMAN_LEAVE_OPTS} > /dev/null stat=$? retry=$((${retry} -1)) done #if [ "${stat}" -ne 0 ]; then # /sbin/cman_tool -w -t 2 leave force > /dev/null #fi #if [ "$?" -ne 0 ] #then # ewend 1 "Failed to stop cman" #else # eend 0 #fi else stat=0 fi eend ${stat} if [ "${stat}" -eq 0 ]; then sleep 1s #ebegin "Unloading cman kernel module" #modprobe -r cman &> /dev/null || return 0 #eend $? unload_modules cman fi }