On Wed, Dec 29, 2010 at 02:17:42PM +0100, Alexander Krauth wrote: > # HG changeset patch > # User Alexander Krauth <[email protected]> > # Date 1293628658 -3600 > # Node ID db59e6d7034fb4dba5733234b0f8ebc8c24ed131 > # Parent 3ead796745a79e6cbd72d4bb5d3f5433516561db > High: SAPInstance: Fix some returncodes in case of probe and monitor actions > > diff -r 3ead796745a7 -r db59e6d7034f heartbeat/SAPInstance > --- a/heartbeat/SAPInstance Wed Dec 29 14:00:12 2010 +0100 > +++ b/heartbeat/SAPInstance Wed Dec 29 14:17:38 2010 +0100 > @@ -208,6 +208,30 @@ > > > # > +# abnormal_end : essential things are missing, but in the natur of a SAP > installation - which can be very different > +# from customer to customer - we cannot handle this always as > an error > +# This would be the case, if the software is installed on > shared disks and not visible > +# to all cluster nodes at all times. > +# > +abnormal_end() { > + err_msg=$1 > + > + ocf_is_probe && { > + sapinstance_status > + exit $? > + } > + > + if [ "$ACTION" = "stop" ] > + then > + cleanup_instance > + exit $OCF_SUCCESS > + fi > + > + ocf_log err $err_msg > + exit $OCF_ERR_CONFIGURED > +} > + > +# > # sapinstance_init : Define global variables with default values, if > optional parameters are not set > # > # > @@ -233,16 +257,18 @@ > DIR_EXECUTABLE="/usr/sap/$SID/SYS/exe/run" > SAPSTARTSRV="/usr/sap/$SID/SYS/exe/run/sapstartsrv" > SAPCONTROL="/usr/sap/$SID/SYS/exe/run/sapcontrol" > - else > - ocf_log warn "Cannot find sapstartsrv and sapcontrol executable, > please set DIR_EXECUTABLE parameter!" > - exit $OCF_NOT_RUNNING > fi > else > - DIR_EXECUTABLE="$OCF_RESKEY_DIR_EXECUTABLE" > - SAPSTARTSRV="$OCF_RESKEY_DIR_EXECUTABLE/sapstartsrv" > - SAPCONTROL="$OCF_RESKEY_DIR_EXECUTABLE/sapcontrol" > + if have_binary "$OCF_RESKEY_DIR_EXECUTABLE/sapstartsrv" && have_binary > "$OCF_RESKEY_DIR_EXECUTABLE/sapcontrol" > + then > + DIR_EXECUTABLE="$OCF_RESKEY_DIR_EXECUTABLE" > + SAPSTARTSRV="$OCF_RESKEY_DIR_EXECUTABLE/sapstartsrv" > + SAPCONTROL="$OCF_RESKEY_DIR_EXECUTABLE/sapcontrol" > + fi > fi > > + [ -z "$DIR_EXECUTABLE" ] && abnormal_end "Cannot find sapstartsrv and > sapcontrol executable, please set DIR_EXECUTABLE parameter!" > + > if [ -z "$OCF_RESKEY_DIR_PROFILE" ] > then > DIR_PROFILE="/usr/sap/$SID/SYS/profile" > @@ -329,15 +355,10 @@ > then > DIR_PROFILE="/usr/sap/$SID/SYS/profile" > else > - ocf_log warn "Expected /usr/sap/$SID/SYS/profile/ to be a directory, > please set DIR_PROFILE parameter!" > - exit $OCF_NOT_RUNNING > + abnormal_end "Expected /usr/sap/$SID/SYS/profile/ to be a directory, > please set DIR_PROFILE parameter!" > fi > > - if [ ! -r $SAPSTARTPROFILE ] > - then > - ocf_log warn "Expected $SAPSTARTPROFILE to be the instance START > profile, please set START_PROFILE parameter!" > - exit $OCF_NOT_RUNNING > - fi > + [ ! -r $SAPSTARTPROFILE ] && abnormal_end "Expected $SAPSTARTPROFILE to > be the instance START profile, please set START_PROFILE parameter!" > > pkill -9 -f "sapstartsrv.*$runninginst" > $SAPSTARTSRV pf=$SAPSTARTPROFILE -D -u $sidadm > @@ -357,7 +378,8 @@ > chkrc=$OCF_SUCCESS > else > ocf_log error "sapstartsrv for instance $SID-$InstanceName could not > be started!" > - chkrc=$OCF_NOT_RUNNING > + chkrc=$OCF_ERR_GENERIC > + ocf_is_probe && chkrc=$OCF_NOT_RUNNING > fi > fi > > @@ -415,9 +437,12 @@ > loopcount=$(($loopcount + 1)) > > check_sapstartsrv > - output=`$SAPCONTROL -nr $InstanceNr -function Start` > rc=$? > - ocf_log info "Starting SAP Instance $SID-$InstanceName: $output" > + if [ $rc -eq $OCF_SUCCESS ]; then > + output=`$SAPCONTROL -nr $InstanceNr -function Start` > + rc=$? > + ocf_log info "Starting SAP Instance $SID-$InstanceName: $output" > + fi > > if [ $rc -ne 0 ] > then > @@ -491,8 +516,13 @@ > sapuserexit PRE_STOP_USEREXIT "$OCF_RESKEY_PRE_STOP_USEREXIT" > > check_sapstartsrv > + rc=$? > + if [ $rc -eq $OCF_SUCCESS ]; then > + output=`$SAPCONTROL -nr $InstanceNr -function Stop` > + rc=$? > + ocf_log info "Stopping SAP Instance $SID-$InstanceName: $output" > + fi > > - output=`$SAPCONTROL -nr $InstanceNr -function Stop` > if [ $? -eq 0 ] > then > output=`$SAPCONTROL -nr $InstanceNr -function WaitforStopped 3600 1` > @@ -558,17 +588,34 @@ > > if [ $count -eq 0 -a $rc -eq $OCF_SUCCESS ] > then > - if [ "$MONLOG" != "NOLOG" ] > + if ocf_is_probe > then > - ocf_log err "The SAP instance does not run any services which this > RA could monitor!" > + rc=$OCF_NOT_RUNNING > + else > + [ "$MONLOG" != "NOLOG" ] && ocf_log err "The SAP instance does not > run any services which this RA could monitor!" > + rc=$OCF_ERR_GENERIC > fi > - rc=$OCF_ERR_ARGS > fi > fi > > return $rc > } > > + > +# > +# sapinstance_status: Lightweight check of SAP instance only with OS tools > +# > +sapinstance_status() { > + [ ! -f "/usr/sap/$SID/$InstanceName/work/kill.sap" ] && return > $OCF_NOT_RUNNING > + pids=`grep '^kill -[0-9]' /usr/sap/$SID/$InstanceName/work/kill.sap | awk > '{print $3}'` > + for pid in $pids > + do > + [ `pgrep -f -U $sidadm $InstanceName | grep -c $pid` -gt 0 ] && return > $OCF_SUCCESS > + done > + return $OCF_NOT_RUNNING > +} > + > + > # > # sapinstance_validate: Check the symantic of the input parameters > #
Applied. > _______________________________________________________ > Linux-HA-Dev: [email protected] > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev > Home Page: http://linux-ha.org/ _______________________________________________________ Linux-HA-Dev: [email protected] http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page: http://linux-ha.org/
