On Tue, Dec 28, 2010 at 02:39:56PM +0100, Alexander Krauth wrote:
> # HG changeset patch
> # User Alexander Krauth <[email protected]>
> # Date 1293543578 -3600
> # Node ID 73e079bc06373c5dc032ac294a344a848f304ccf
> # Parent af62007952a5b32281622e88f3e3faf039aec187
> High: SAPInstance: Make more use of ocf-shellfuncs where possible
>
> diff -r af62007952a5 -r 73e079bc0637 heartbeat/SAPInstance
> --- a/heartbeat/SAPInstance Tue Dec 28 14:36:11 2010 +0100
> +++ b/heartbeat/SAPInstance Tue Dec 28 14:39:38 2010 +0100
> @@ -208,6 +208,27 @@
>
>
> #
> +# 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 && exit sapinstance_status
This won't work. Perhaps you wanted to do sth like this:
ocf_is_probe && {
sapinstance_status
exit
}
> +
> + if [ "$ACTION" = "stop" ]
> + then
> + cleanup_instance
> + exit $OCF_SUCCESS
> + fi
> +
> + ocf_log err $err_msg
> + exit $OCF_ERR_ARGS
This should be:
exit $OCF_ERR_CONFIGURED
> +}
> +
> +#
> # sapinstance_init : Define global variables with default values, if
> optional parameters are not set
> #
> #
> @@ -233,16 +254,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 +352,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!"
Though this one should exit with code $OCF_ERR_INSTALLED.
Perhaps add the code parameter to abnormal_end?
> pkill -9 -f "sapstartsrv.*$runninginst"
> $SAPSTARTSRV pf=$SAPSTARTPROFILE -D -u $sidadm
> @@ -357,7 +375,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_ACTION" = "monitor" ] && chkrc=$OCF_NOT_RUNNING
Better:
ocf_is_probe && chkrc=$OCF_NOT_RUNNING
> fi
> fi
>
> @@ -415,9 +434,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 +513,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 +585,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_ARGS
I think that this should be $OCF_ERR_GENERIC. It is expected at
this point to have the SAP running, but it isn't and we don't
know why. BTW, $OCF_ERR_ARGS should be used only on bad usage
(i.e. wrong number of args on the command line).
> 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
Expect multiple pids? Then the awk part is wrong. Better do:
pids=`grep '^kill -[0-9]' /usr/sap/$SID/$InstanceName/work/kill.sap | cut
-f3- -d' '`
> + 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
> #
Thanks,
Dejan
> _______________________________________________________
> 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/