From mboxrd@z Thu Jan 1 00:00:00 1970 From: rohara@sourceware.org Date: 29 Jun 2006 17:24:35 -0000 Subject: [Cluster-devel] cluster/fence/scripts scsi_reserve Message-ID: <20060629172435.24816.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Changes by: rohara at sourceware.org 2006-06-29 17:24:34 Added files: fence/scripts : scsi_reserve Log message: Initial check-in of SCSI persistent reservation init script. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/scripts/scsi_reserve.diff?cvsroot=cluster&r1=NONE&r2=1.1 /cvs/cluster/cluster/fence/scripts/scsi_reserve,v --> standard output revision 1.1 --- cluster/fence/scripts/scsi_reserve +++ - 2006-06-29 17:24:35.150795000 +0000 @@ -0,0 +1,122 @@ +#!/bin/bash +# +# chkconfig: +# description: start/stop persistent reservation service for lvm + +. /etc/init.d/functions + +# check for sg_persist command provided by sg3_utils package +# +if ! sg_persist -V &> /dev/null ; then + echo "error: sg_persist not found" + exit 2 +fi + +# check for gethostip command provided by syslinux package +# +if ! gethostip -h &> /dev/null ; then + echo "error: gethostip not found" + exit 3 +fi + +# get scsi devices that are part of clustered volumes +# +scsi_devices=$( lvs -o vg_attr,devices --noheadings \ + | awk --posix ' $1 ~ /[-a-z]{5}c/ { print $2 } ' \ + | sed -e 's/([0-9]*)//' | sort | uniq ) + +# if not scsi devices were found we can exit now +# +[ -z "$scsi_devices" ] && exit 0 + +# get the node name and node addr from cman +# +node_name=$( cman_tool status | grep "Node name" | awk -F": " '{print $2}' ) +node_addr=$( cman_tool status | grep "Node addr" | awk -F": " '{print $2}' ) + +# create unique key for this host +# +key=$( gethostip -x $node_name ) + +case $1 in + +start) + +rval=0 + +touch /var/lock/subsys/${0##*/} + +# register each device using our key +# +for dev in $scsi_devices +do + echo -n "Registering device: $dev" + for error in 1 + do + sg_persist -d $dev -o -G -S $key &>/dev/null || break + sg_persist -d $dev -o -R -K $key -T 5 &>/dev/null || break + error=0 + done + if [ $error -ne 0 ]; then + rval=1 + fi + echo +done +;; + +stop) + +rval=0 + +# unregister each device for this node +# +for dev in $scsi_devices +do + + if sg_persist -d $dev -i -r 2>/dev/null | grep -qiE "${key#0}" ; then + echo "Unable to unregister device: $dev" + error=0 + else + echo -n "Unregistering device: $dev" + for error in 1 + do + sg_persist -d $dev -o -G -K $key -S 0 &>/dev/null || break + error=0 + done + fi + if [ $error -ne 0 ]; then + rval=1 + fi + echo +done + +rm -f /var/lock/subsys/${0##*/} +;; + +status) + +rval=0 + +# find devices that are registered with our key +# +for dev in $scsi_devices +do + if sg_persist -d $dev -i -k 2>/dev/null | grep -qiE "${key#0}" ; then + devices[${#devices[@]}]=$dev + fi +done + +if [ -z $devices ]; then + echo "No devices registered." +else + echo "Found ${#devices[@]} registered device(s):" + + for i in "${devices[@]}" ; do + echo $i + done +fi +;; + +esac + +exit $status