[Cluster-devel] [PATCH] rgmanager: Backport upstream fixes for SAPDatabase agent
Lon Hohberger
lhh at redhat.com
Wed Jan 4 21:43:15 UTC 2012
This patch is specific to the RHEL5 branches and was
provided by Frank Danapfel based on his work with the
upstream version of the SAPDatabase agent.
Resolves: rhbz#747352
Signed-off-by: Lon Hohberger <lhh at redhat.com>
---
rgmanager/src/resources/SAPDatabase | 95 ++++++++++++++++++++---------------
1 files changed, 54 insertions(+), 41 deletions(-)
diff --git a/rgmanager/src/resources/SAPDatabase b/rgmanager/src/resources/SAPDatabase
index 3be8c8e..eccc1a8 100644
--- a/rgmanager/src/resources/SAPDatabase
+++ b/rgmanager/src/resources/SAPDatabase
@@ -80,12 +80,12 @@ meta_data() {
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="SAPDatabase">
-<version>1.92.1</version>
+<version>1.93</version>
<longdesc lang="en">
Resource script for SAP databases. It manages a SAP database of any type as an HA resource.
</longdesc>
-<shortdesc lang="en">SAP database resource agent</shortdesc>
+<shortdesc lang="en">Manages any SAP database (based on Oracle, MaxDB, or DB2)</shortdesc>
<parameters>
<parameter name="SID" unique="1" required="1" primary="1">
@@ -201,26 +201,27 @@ do_exit() {
# listener_start: Start the given listener
#
listener_start() {
- orasid="ora`echo $SID | tr '[:upper:]' '[:lower:]'`"
- rc=$OCF_SUCCESS
+ local orasid="ora`echo $SID | tr '[:upper:]' '[:lower:]'`"
+ local lrc=$OCF_SUCCESS
+ local output
output=`echo "lsnrctl start $NETSERVICENAME" | su - $orasid 2>&1`
if [ $? -eq 0 ]
then
ocf_log info "Oracle Listener $NETSERVICENAME started: $output"
- rc=$OCF_SUCCESS
+ lrc=$OCF_SUCCESS
else
ocf_log err "Oracle Listener $NETSERVICENAME start failed: $output"
- rc=$OCF_ERR_GENERIC
+ lrc=$OCF_ERR_GENERIC
fi
- return $rc
+ return $lrc
}
#
# listener_stop: Stop the given listener
#
listener_stop() {
- orasid="ora`echo $SID | tr '[:upper:]' '[:lower:]'`"
- rc=$OCF_SUCCESS
+ local orasid="ora`echo $SID | tr '[:upper:]' '[:lower:]'`"
+ local lrc=$OCF_SUCCESS
if
listener_status
then
@@ -228,84 +229,89 @@ listener_stop() {
else
return $OCF_SUCCESS
fi
+ local output
output=`echo "lsnrctl stop $NETSERVICENAME" | su - $orasid 2>&1`
if [ $? -eq 0 ]
then
ocf_log info "Oracle Listener $NETSERVICENAME stopped: $output"
else
ocf_log err "Oracle Listener $NETSERVICENAME stop failed: $output"
- rc=$OCF_ERR_GENERIC
+ lrc=$OCF_ERR_GENERIC
fi
- return $rc
+ return $lrc
}
#
# listener_status: is the given listener running?
#
listener_status() {
- orasid="ora`echo $SID | tr '[:upper:]' '[:lower:]'`"
+ local lrc=$OCF_SUCCESS
+ local orasid="ora`echo $SID | tr '[:upper:]' '[:lower:]'`"
# Note: ps cuts off it's output at column $COLUMNS, so "ps -ef" can not be used here
# as the output might be to long.
- cnt=`ps efo args --user $orasid | grep $NETSERVICENAME | grep -c tnslsnr`
+ local cnt=`ps efo args --user $orasid | grep $NETSERVICENAME | grep -c tnslsnr`
if [ $cnt -eq 1 ]
then
- rc=$OCF_SUCCESS
+ lrc=$OCF_SUCCESS
else
ocf_log info "listener process not running for $NETSERVICENAME for $SID"
- rc=$OCF_ERR_GENERIC
+ lrc=$OCF_ERR_GENERIC
fi
- return $rc
+ return $lrc
}
#
# x_server_start: Start the given x_server
#
x_server_start() {
- rc=$OCF_SUCCESS
+ local rc=$OCF_SUCCESS
+ local output
output=`echo "x_server start" | su - $sidadm 2>&1`
if [ $? -eq 0 ]
then
ocf_log info "MaxDB x_server start: $output"
- rc=$OCF_SUCCESS
+ lrc=$OCF_SUCCESS
else
ocf_log err "MaxDB x_server start failed: $output"
- rc=$OCF_ERR_GENERIC
+ lrc=$OCF_ERR_GENERIC
fi
- return $rc
+ return $lrc
}
#
# x_server_stop: Stop the x_server
#
x_server_stop() {
- rc=$OCF_SUCCESS
+ local lrc=$OCF_SUCCESS
+ local output
output=`echo "x_server stop" | su - $sidadm 2>&1`
if [ $? -eq 0 ]
then
ocf_log info "MaxDB x_server stop: $output"
else
ocf_log err "MaxDB x_server stop failed: $output"
- rc=$OCF_ERR_GENERIC
+ lrc=$OCF_ERR_GENERIC
fi
- return $rc
+ return $lrc
}
#
# x_server_status: is the x_server running?
#
x_server_status() {
- sdbuser=`grep "^SdbOwner" /etc/opt/sdb | awk -F'=' '{print $2}'`
+ local lrc=$OCF_SUCCESS
+ local sdbuser=`grep "^SdbOwner" /etc/opt/sdb | awk -F'=' '{print $2}'`
# Note: ps cuts off it's output at column $COLUMNS, so "ps -ef" can not be used here
# as the output might be to long.
- cnt=`ps efo args --user $sdbuser | grep -c vserver`
+ local cnt=`ps efo args --user $sdbuser | grep -c vserver`
if [ $cnt -ge 1 ]
then
- rc=$OCF_SUCCESS
+ lrc=$OCF_SUCCESS
else
ocf_log info "x_server process not running"
- rc=$OCF_ERR_GENERIC
+ lrc=$OCF_ERR_GENERIC
fi
- return $rc
+ return $lrc
}
#
@@ -340,9 +346,14 @@ su - $sidadm -c $TEMPFILE
retcode=$?
rm -f $TEMPFILE
+if [ $retcode -ne 0 ]; then
+ ocf_log err "Failed to stop database, return code $retcode"
+fi
+
if [ $retcode -eq 0 ]; then
sapdatabase_status
if [ $? -ne $OCF_NOT_RUNNING ]; then
+ ocf_log crit "Database did not actually stop!"
retcode=1
fi
fi
@@ -439,9 +450,7 @@ $SRVMGRDBA_EXE /NOLOG >> $LOG << !
connect / as sysdba
shutdown abort
startup mount
-WHENEVER SQLERROR EXIT SQL.SQLCODE
-WHENEVER OSERROR EXIT FAILURE
-alter database recover automatic database;
+alter database end backup;
alter database open;
exit
!
@@ -560,7 +569,7 @@ sapuserexit() {
if [ -x "$VALUE" ]
then
ocf_log info "Calling userexit ${NAME} with customer script file ${VALUE}"
- eval "$VALUE" >& /dev/null
+ "$VALUE" >/dev/null 2>&1
ocf_log info "Exiting userexit ${NAME} with customer script file ${VALUE}, returncode: $?"
else
ocf_log warn "Attribute ${NAME} is set to ${VALUE}, but this file is not executable"
@@ -662,7 +671,12 @@ sapdatabase_stop() {
#
sapdatabase_monitor() {
strict=$1
- rc=$OCF_SUCCESS
+
+ sapdatabase_status
+ rc=$?
+ if [ $rc -ne $OCF_SUCCESS ]; then
+ return $rc
+ fi
case $DBTYPE in
ADA) x_server_status
@@ -675,8 +689,7 @@ sapdatabase_monitor() {
if [ $strict -eq 0 ]
then
- sapdatabase_status
- rc=$?
+ return $rc
else
if [ $DBJ2EE_ONLY -eq 0 ]
then
@@ -720,7 +733,7 @@ sapdatabase_monitor() {
if [ -n "$EXECMD" ]
then
- output=`eval ${JAVA_HOME}/bin/java -cp $MYCP $EXECMD`
+ output=`${JAVA_HOME}/bin/java -cp $MYCP $EXECMD 2> /dev/null`
if [ $? -le 0 ]
then
rc=$OCF_SUCCESS
@@ -755,9 +768,9 @@ sapdatabase_status() {
SUSER="ora`echo $SID | tr '[:upper:]' '[:lower:]'`"
SNUM=4
;;
- DB6) SEARCH="db2[a-z][a-z][a-z][a-z][a-z]"
+ DB6) SEARCH="db2[a-z][a-z][a-z]"
SUSER="db2`echo $SID | tr '[:upper:]' '[:lower:]'`"
- SNUM=5
+ SNUM=2
;;
esac
@@ -768,7 +781,7 @@ sapdatabase_status() {
then
rc=$OCF_SUCCESS
else
- # ocf_log info "Database Instance $SID is not running on `hostname`"
+ ocf_log err "Database Instance $SID is not running on `hostname`"
rc=$OCF_NOT_RUNNING
fi
return $rc
@@ -876,7 +889,7 @@ if [ -z "$OCF_RESKEY_DBTYPE" ]; then
ocf_log err "Please set OCF_RESKEY_DBTYPE to the database vendor specific tag (ORA,ADA,DB6)!"
do_exit $OCF_ERR_ARGS
fi
-DBTYPE=`echo "$OCF_RESKEY_DBTYPE" | tr '[a-z]' '[A-Z]'`
+DBTYPE=`echo "$OCF_RESKEY_DBTYPE" | tr "[a-z]" "[A-Z]"`
# optional OCF parameters, we try to guess which directories are correct
EXESTARTDB="startdb"
@@ -947,7 +960,7 @@ then
then
BOOTSTRAP="$OCF_RESKEY_DIR_BOOTSTRAP"
else
- BOOTSTRAP=`echo /usr/sap/$SID/*/j2ee/cluster/bootstrap | head -1`
+ BOOTSTRAP=`ls -1d /usr/sap/$SID/*/j2ee/cluster/bootstrap | head -1`
fi
if [ -n "$OCF_RESKEY_DIR_SECSTORE" ]
--
1.7.3.4
More information about the Cluster-devel
mailing list