Skip to content

Commit

Permalink
scsi2reservation: New RA from Xinwei Hu.
Browse files Browse the repository at this point in the history
--HG--
extra : convert_revision : a71ddcd5a984e832e882bf2e645ae8cdb34a4a98
  • Loading branch information
Lars Marowsky-Bree committed Oct 23, 2008
1 parent c18f447 commit 2cf84b2
Show file tree
Hide file tree
Showing 2 changed files with 171 additions and 0 deletions.
1 change: 1 addition & 0 deletions heartbeat/Makefile.am
Expand Up @@ -83,6 +83,7 @@ ocf_SCRIPTS = ClusterMon \
SphinxSearchDaemon \
Stateful \
SysInfo \
scsi2reservation \
sfex \
tomcat \
VIPArip \
Expand Down
170 changes: 170 additions & 0 deletions heartbeat/scsi2reservation
@@ -0,0 +1,170 @@
#!/bin/sh
# by hxinwei@gmail.com
# License: GNU General Public License 2 (GPL2)

if [ -n "$OCF_DEBUG_LIBRARY" ]; then
. $OCF_DEBUG_LIBRARY
else
. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs
fi

scsi2reserve_meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="scsi2reserve">
<version>1.0</version>
<longdesc lang="en">
The scsi-2-reserve resource agent is a place holder for SCSI-2 reservation.
A healthy instance of scsi-2-reserve resource, indicates the own of the specified SCSI device.
This resource agent depends on the scsi_reserve from scsires package, which is Linux specific.
</longdesc>
<shortdesc lang="en">
scsi-2 reservation
</shortdesc>
<parameters>
<parameter name="scsi_reserve" unique="0" required="1">
<longdesc lang="en">
The scsi_reserve is a command from scsires package.
It helps to issue SCSI-2 reservation on SCSI devices.
</longdesc>
<shortdesc lang="en">
scsi_reserve command
</shortdesc>
<content type="string" default="/usr/sbin/scsi_reserve" />
</parameter>
<parameter name="sharedisk" unique="0" required="1">
<longdesc lang="en">
The shared disk that can be reserved.
</longdesc>
<shortdesc lang="en">
Shared disk.
</shortdesc>
<content type="string" default="/dev/sdb" />
</parameter>
<parameter name="start_loop" unique="0" required="1">
<longdesc lang="en">
We are going to try several times before giving up. Start_loop indicates how many times we are going to re-try.
</longdesc>
<shortdesc lang="en">
Times to re-try before giving up.
</shortdesc>
<content type="string" default="10" />
</parameter>
</parameters>
<actions>
<action name="start" timeout="300" />
<action name="stop" timeout="100" />
<action name="status" timeout="90" />
<action name="monitor" depth="0" timeout="20" interval="20" start-delay="1m" role="Slave" />
<action name="monitor" depth="0" timeout="20" interval="10" start-delay="1m" role="Master" />
<action name="meta-data" timeout="5" />
<action name="validate-all" timeout="30" />
</actions>
</resource-agent>
END

return $OCF_SUCCESS
}

scsi2reserve_usage() {
cat <<END
usage: $0 {start|stop|monitor|validate-all|meta-data}
END
}

case $__OCF_ACTION in
meta-data) scsi2reserve_meta_data
exit $OCF_SUCCESS
;;
usage|help) scsi2reserve_usage
exit $OCF_SUCCESS
;;
*)
;;
esac


scsi2reserve_validate ()
{
: ${OCF_RESKEY_start_loop=10}
if [ -x "${OCF_RESKEY_scsi_reserve}" ]; then
exit $OCF_ERR_INSTALLED
fi
if [ -z "${OCF_RESKEY_sharedisk}" ]; then
exit $OCF_ERR_GENERIC
fi
if [ ! -b "${OCF_RESKEY_sharedisk}" ]; then
exit $OCF_ERR_ARGS
fi
}

scsi2reserve_validate

scsi2reserve_start ()
{
ite=$OCF_RESKEY_start_loop
while [ $ite -ge 0 ]; do
/sbin/startproc ${OCF_RESKEY_scsi_reserve} -d ${OCF_RESKEY_sharedisk} --preempt --hold --stonith
sleep 15
/sbin/checkproc ${OCF_RESKEY_scsi_reserve}
rc=$?
if [ $rc -eq 0 ]; then
exit $OCF_SUCCESS
fi
ite=`expr $ite - 1`
done
exit $OCF_ERR_GENERIC
}

scsi2reserve_monitor ()
{
/sbin/checkproc ${OCF_RESKEY_scsi_reserve}
rc=$?
if [ $rc -eq 0 ]; then
exit $OCF_SUCCESS
else
exit $OCF_NOT_RUNNING
fi
}

scsi2reserve_stop ()
{
/sbin/killproc ${OCF_RESKEY_scsi_reserve}
${OCF_RESKEY_scsi_reserve} -d ${OCF_RESKEY_sharedisk} --release
exit $OCF_SUCCESS
}

if [ $# -ne 1 ]; then
scsi2reserve_usage
exit $OCF_ERR_ARGS
fi

case $__OCF_ACTION in
start) scsi2reserve_start
;;
stop) scsi2reserve_stop
;;
monitor) scsi2reserve_monitor
;;
validate-all) scsi2reserve_validate
exit $OCF_SUCCESS
;;
*) scsi2reserve_usage
exit $OCF_ERR_UNIMPLEMENTED
;;
esac

exit $?


0 comments on commit 2cf84b2

Please sign in to comment.