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/

Reply via email to