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/

Reply via email to