[Cluster-devel] cluster/fence/agents/scsi scsi_reserve
rohara at sourceware.org
rohara at sourceware.org
Wed Jul 12 22:09:37 UTC 2006
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: rohara at sourceware.org 2006-07-12 22:09:37
Added files:
fence/agents/scsi: scsi_reserve
Log message:
Moved from fence/scripts directory.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/scsi/scsi_reserve.diff?cvsroot=cluster&r1=NONE&r2=1.1
/cvs/cluster/cluster/fence/agents/scsi/scsi_reserve,v --> standard output
revision 1.1
--- cluster/fence/agents/scsi/scsi_reserve
+++ - 2006-07-12 22:09:37.438853000 +0000
@@ -0,0 +1,139 @@
+#!/bin/bash
+#
+# chkconfig: 345 25 75
+# 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 -eq 0 ]; then
+ success
+ else
+ failure
+ rval=1
+ fi
+
+ echo
+
+ # attempt to create a reservation
+ #
+ sg_persist -d $dev -o -R -K $key -T 5 &>/dev/null
+
+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=1
+ 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 -eq 0 ]; then
+ success
+ else
+ failure
+ 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
More information about the Cluster-devel
mailing list