diff options
author | Christian Zoffoli <xmerlin@gentoo.org> | 2005-03-25 02:14:00 +0000 |
---|---|---|
committer | Christian Zoffoli <xmerlin@gentoo.org> | 2005-03-25 02:14:00 +0000 |
commit | b52de235aa27c83d3027a977edb2d61ebb78a443 (patch) | |
tree | cb9e913d08593c0800b3fdcef14d3e36f68837db /sys-cluster/cman | |
parent | Version bump. (diff) | |
download | gentoo-2-b52de235aa27c83d3027a977edb2d61ebb78a443.tar.gz gentoo-2-b52de235aa27c83d3027a977edb2d61ebb78a443.tar.bz2 gentoo-2-b52de235aa27c83d3027a977edb2d61ebb78a443.zip |
improved init script
(Portage version: 2.0.51.19)
Diffstat (limited to 'sys-cluster/cman')
-rw-r--r-- | sys-cluster/cman/ChangeLog | 5 | ||||
-rwxr-xr-x | sys-cluster/cman/files/cman.rc | 134 |
2 files changed, 127 insertions, 12 deletions
diff --git a/sys-cluster/cman/ChangeLog b/sys-cluster/cman/ChangeLog index 72467001234c..68bdcc658dad 100644 --- a/sys-cluster/cman/ChangeLog +++ b/sys-cluster/cman/ChangeLog @@ -1,6 +1,9 @@ # ChangeLog for sys-cluster/cman # Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-cluster/cman/ChangeLog,v 1.11 2005/03/23 02:37:10 xmerlin Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-cluster/cman/ChangeLog,v 1.12 2005/03/25 02:11:08 xmerlin Exp $ + + 25 Mar 2005; Christian Zoffoli <xmerlin@gentoo.org> files/cman.rc: + improved init script 23 Mar 2005; Christian Zoffoli <xmerlin@gentoo.org> cman-1.0_pre31.ebuild: ebuild cleanup diff --git a/sys-cluster/cman/files/cman.rc b/sys-cluster/cman/files/cman.rc index f696f5b830a4..f9e9f39bbbad 100755 --- a/sys-cluster/cman/files/cman.rc +++ b/sys-cluster/cman/files/cman.rc @@ -1,7 +1,7 @@ #!/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.4 2005/03/22 13:54:16 xmerlin Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-cluster/cman/files/cman.rc,v 1.5 2005/03/25 02:11:08 xmerlin Exp $ depend() { use net @@ -9,6 +9,72 @@ depend() { 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 @@ -16,9 +82,7 @@ start() { fi if [ ! -d /proc/cluster/config/cman ]; then - ebegin "Loading cman module" - modprobe cman - eend $? + load_modules cman fi ebegin "Starting cman" @@ -40,19 +104,67 @@ start() { } 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" - /sbin/cman_tool -t ${CMAN_SHUTDOWN_TIMEOUT} \ - -w leave ${CMAN_LEAVE_OPTS} > /dev/null + 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=2 + 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 + eend 0 + fi + eend $? + + sleep 1s + + local module="cman" + ebegin "Unloading ${module} kernel module" + modprobe -r ${module} &> /dev/null || return 0 if [ "$?" -ne 0 ] then - ewend 1 "Failed to stop cman" + ewend 1 "Failed to unload ${module} kernel module" else eend 0 - ebegin "Unloading cman kernel module" - modprobe -r cman - eend $? fi - + #unload_modules cman || return 0 } |