From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4371 invoked by alias); 27 Mar 2009 19:07:17 -0000 Received: (qmail 4359 invoked by alias); 27 Mar 2009 19:07:17 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion.fedora.phx.redhat.com Subject: cluster: STABLE3 - cman init: major clean up of shutdown sequence To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/STABLE3 X-Git-Reftype: branch X-Git-Oldrev: 7a15c284c78688473f3d3eacdbd0dc9a5a131a87 X-Git-Newrev: c062d7a1a908bdd35f9b7dfd2fdf67f7600dcc9e From: "Fabio M. Di Nitto" Message-Id: <20090327190647.1415C12020C@lists.fedorahosted.org> Date: Fri, 27 Mar 2009 19:07:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q1/txt/msg00962.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=c062d7a1a908bdd35f9b7dfd2fdf67f7600dcc9e Commit: c062d7a1a908bdd35f9b7dfd2fdf67f7600dcc9e Parent: 7a15c284c78688473f3d3eacdbd0dc9a5a131a87 Author: Fabio M. Di Nitto AuthorDate: Thu Mar 26 11:38:47 2009 +0100 Committer: Fabio M. Di Nitto CommitterDate: Fri Mar 27 20:05:46 2009 +0100 cman init: major clean up of shutdown sequence add stop_daemon function as common way to stop a daemon. Make it so to accomodate all sorts of requirements (such as attempt N times to stop before giving up). move all the stop_ functions right underneath the start_ equivalent. rename stop_fence to leave_fence_domain. remove stop_daemons in favour of single functions. clean stop function to be < 80 cols. Signed-off-by: Fabio M. Di Nitto --- cman/init.d/cman.in | 237 +++++++++++++++++++++++++++++---------------------- 1 files changed, 136 insertions(+), 101 deletions(-) diff --git a/cman/init.d/cman.in b/cman/init.d/cman.in index 9cf1360..09e0580 100644 --- a/cman/init.d/cman.in +++ b/cman/init.d/cman.in @@ -190,6 +190,27 @@ start_daemon() return 0 } +stop_daemon() +{ + daemon=$1 + shift + maxretries=$1 + + [ -z "$maxretries" ] && maxretries=1 + retries=0 + + while status $daemon > /dev/null 2>&1 && \ + [ $retries -lt $maxretries ]; do + + errmsg=$( pkill -TERM $daemon ) || return 1 + sleep 1 + ((retries++)) + done + + status $daemon > /dev/null 2>&1 && return 1 + return 0 +} + ### check functions (enable/disable) (on/off) mtab_configfs() @@ -376,6 +397,12 @@ load_kernel_modules() return 0 } +unload_kernel_modules() +{ + /sbin/modprobe -r lock_dlm > /dev/null 2>&1 || true + /sbin/modprobe -r dlm > /dev/null 2>&1 || true +} + start_configfs() { if ! mtab_configfs; then @@ -385,6 +412,19 @@ start_configfs() return 0 } +stop_configfs() +{ + if mtab_configfs && [ -z "$(ls -1 /sys/kernel/config)" ]; then + errmsg=$( /bin/umount /sys/kernel/config 2>&1 ) + if [ $? -ne 0 ]; then + return 1 + fi + /sbin/modprobe -r configfs > /dev/null 2>&1 || true + fi + return 0 +} + + set_networking_params() { if [ ! -f /proc/sys/net/core/rmem_default ]; then @@ -417,6 +457,15 @@ start_cman() return 0 } +stop_cman() +{ + if cman_running; then + errmsg=$( @SBINDIR@/cman_tool -t $CMAN_SHUTDOWN_TIMEOUT \ + -w leave $cmanremove 2>&1 ) || return 1 + fi + return 0 +} + unfence_self() { fence_node -U > /dev/null 2>&1 @@ -430,36 +479,72 @@ start_qdiskd() return $? } +stop_qdiskd() +{ + stop_daemon qdiskd 5 + return $? +} + start_groupd() { start_daemon groupd return $? } +stop_groupd() +{ + stop_daemon groupd + return $? +} + start_fenced() { start_daemon fenced return $? } +stop_fenced() +{ + stop_daemon fenced + return $? +} + start_dlm_controld() { start_daemon dlm_controld return $? } +stop_dlm_controld() +{ + stop_daemon dlm_controld + return $? +} + start_gfs_controld() { start_daemon gfs_controld return $? } +stop_gfs_controld() +{ + stop_daemon gfs_controld + return $? +} + start_cmannotifyd() { start_daemon cmannotifyd return $? } +stop_cmannotifyd() +{ + stop_daemon cmannotifyd + return $? +} + join_fence_domain() { if ! @SBINDIR@/cman_tool status | grep Flags | grep 2node > /dev/null 2>&1; then @@ -473,12 +558,27 @@ join_fence_domain() return 0 } +leave_fence_domain() +{ + if status fenced > /dev/null 2>&1; then + @SBINDIR@/fence_tool leave -w 10 > /dev/null 2>&1 + return $? + fi + return 0 +} + start_fence_xvmd() { start_daemon fence_xvmd "$FENCE_XVMD_OPTS" return $? } +stop_fence_xvmd() +{ + stop_daemon fence_xvmd + return $? +} + start() { echo "Starting cluster: " @@ -546,113 +646,53 @@ start() return 0 } -stop_configfs() -{ - if mtab_configfs && [ -z "$(ls -1 /sys/kernel/config)" ]; then - errmsg=$( /bin/umount /sys/kernel/config 2>&1 ) - if [ $? -ne 0 ]; then - return 1 - fi - /sbin/modprobe -r configfs > /dev/null 2>&1 || true - fi - return 0 -} - -stop_cman() -{ - if cman_running; then - errmsg=$( @SBINDIR@/cman_tool -t $CMAN_SHUTDOWN_TIMEOUT \ - -w leave $cmanremove 2>&1 ) || return 1 - fi - return 0 # all ok -} - -stop_daemons() +stop() { - if status gfs_controld > /dev/null 2>&1; then - errmsg=$(pkill -TERM gfs_controld) || return 1 - fi - if status dlm_controld > /dev/null 2>&1; then - errmsg=$(pkill -TERM dlm_controld) || return 1 - fi - if status fenced > /dev/null 2>&1; then - errmsg=$(pkill -TERM fenced) || return 1 - fi - if status groupd > /dev/null 2>&1; then - errmsg=$(pkill -TERM groupd) || return 1 - fi - return 0 # all ok -} + echo "Stopping cluster: " -stop_cmannotifyd() -{ - if status cmannotifyd > /dev/null 2>&1; then - errmsg=$(pkill -TERM cmannotifyd) || return 1 - fi - return 0 -} + runwrap stop_fence_xvmd \ + fence_xvmd_enabled \ + "Stopping virtual machine fencing host" -stop_qdiskd() -{ - retries=0 + runwrap leave_fence_domain \ + fence_join_enabled \ + "Leaving fence domain" - while status qdiskd > /dev/null 2>&1 && [ $retries -lt 5 ]; do - errmsg=$(pkill -TERM qdiskd) || return 1 - sleep 1 - ((retries++)) - done - if status qdiskd > /dev/null 2>&1; then - return 1 - fi - return 0 -} + runwrap stop_gfs_controld \ + none \ + "Stopping gfs_controld" -stop_fence() -{ - if ! fence_join_enabled; then - return 0 - fi + runwrap stop_dlm_controld \ + none \ + "Stopping dlm_controld" - if status fenced > /dev/null 2>&1; then - @SBINDIR@/fence_tool leave -w 10 > /dev/null 2>&1 - return $? - fi - return 0 # all ok -} + runwrap stop_fenced \ + none \ + "Stopping fenced" -stop_fence_xvmd() -{ - if ! fence_xvmd_enabled; then - return 0 - fi + runwrap stop_groupd \ + none \ + "Stopping groupd" - if status fence_xvmd > /dev/null 2>&1; then - errmsg=$(pkill -TERM fence_xvmd) || return 1 - sleep 1 # A bit of time for fenced to exit - fi + runwrap stop_qdiskd \ + none \ + "Stopping qdiskd" - status fence_xvmd - return $? -} + runwrap stop_cman \ + none \ + "Stopping cman" -unload_modules() -{ - /sbin/modprobe -r lock_dlm > /dev/null 2>&1 || true - /sbin/modprobe -r dlm > /dev/null 2>&1 || true -} + runwrap stop_cmannotifyd \ + cmannotifyd_enabled \ + "Stopping cmannotifyd" -stop() -{ - echo "Stopping cluster: " + runwrap unload_kernel_modules \ + none \ + "Unloading kernel modules" - runwrap stop_fence_xvmd none "Stopping virtual machine fencing host" - runwrap stop_fence none "Stopping fencing" - runwrap stop_daemons none "Stopping daemons" - runwrap stop_qdiskd none "Stopping qdiskd" - runwrap stop_cman none "Stopping cman" - runwrap stop_cmannotifyd none "Stopping cmannotifyd" - runwrap unload_modules none "Unloading modules" - runwrap stop_configfs none "Unmounting configfs" + runwrap stop_configfs \ + none \ + "Unmounting configfs" return 0 } @@ -693,12 +733,7 @@ start) ;; stop) cmanremove="" - if stop; then - rm -f $LOCK_FILE - else - echo $errmsg - rtrn=1 - fi + stop && rm -f $LOCK_FILE ;; restart|reload) echo -n "Restarting cluster: "