summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Zoffoli <xmerlin@gentoo.org>2005-03-25 02:14:00 +0000
committerChristian Zoffoli <xmerlin@gentoo.org>2005-03-25 02:14:00 +0000
commitb52de235aa27c83d3027a977edb2d61ebb78a443 (patch)
treecb9e913d08593c0800b3fdcef14d3e36f68837db /sys-cluster/cman
parentVersion bump. (diff)
downloadgentoo-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/ChangeLog5
-rwxr-xr-xsys-cluster/cman/files/cman.rc134
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
}