Hi all,
The resource agent of scsi-2 reservation implements a exclusive mode
for controlling shared storage. It has to be exclusive because it's
the only mode that SCSI-2 reservation supports. There are still a lot
of legacy storages support SCSI-2 only out there, so this resource
agent should be helpful when setup 2 nodes cluster on such kind of
storages.
The attached patch can be applied to the tip.
Thanks for your time to review it ;)
# HG changeset patch
# User [EMAIL PROTECTED]
# Date 1224054627 -28800
# Node ID df5636637000a1c6c01253e5b6f36e3e25a08b96
# Parent 1c06aab5fd73b3f5cfe85c3b1910d80d5fd3f505
resource agent for scsi-2 reservation
diff -r 1c06aab5fd73 -r df5636637000 resources/OCF/Makefile.am
--- a/resources/OCF/Makefile.am Sat Oct 04 16:07:08 2008 +0800
+++ b/resources/OCF/Makefile.am Wed Oct 15 15:10:27 2008 +0800
@@ -84,6 +84,7 @@
SphinxSearchDaemon \
Stateful \
SysInfo \
+ scsi2reservation \
tomcat \
VIPArip \
vmware \
diff -r 1c06aab5fd73 -r df5636637000 resources/OCF/scsi2reservation
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resources/OCF/scsi2reservation Wed Oct 15 15:10:27 2008 +0800
@@ -0,0 +1,170 @@
+#!/bin/sh
+# by [EMAIL PROTECTED]
+# 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 $?
+
+
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/