#!/bin/bash
#
# sccl_stop_package stoppt eine Resource im Script-Cluster
#
# Aufruf:
#
# sccl_stop_package [--force|--clear|--tstkill] [--clusterstop] <resource> [<pidsig>]
#
# Die Resource <resource> wird gestopt, nachdem alle Abhaengigkeiten
# gestoppt sind.
#
########################################################################################
#
#echo $0 $*
#
. `dirname $0`/globals.functions
#
if [[ "$1" = "--force" ]]
 then
  FORCE=$1
  shift
else
  FORCE=""
fi
#
if [[ "$1" = "--clear" || "$1" = "--tstkill" ]]
 then
  CLEAR=$1
  shift
fi
#
if [[ "$1" = "--clusterstop" ]]
 then
  CLUSTERSTOP=--clusterstop
  shift
fi
#
if [[ $# -lt 1 ]]
 then
  echo "usage: $0 [--force|--clear|--tstkill] [--clusterstop] <resource> [<pidsig>]"
  exit 1
fi
#
if [[ -f $LOCKDIR/$1$LOCKEXTENSION ]]
 then
  PIDSIG=`fgrep "$PKGPIDSIGHEADER" $LOCKDIR/$1$LOCKEXTENSION | cut -f 2 -d:`
  RES=`fgrep "$PKGRESHEADER" $LOCKDIR/$1$LOCKEXTENSION | cut -f 2- -d:`
else
  if [[ -z "$FORCE" && -z "$CLEAR" ]]
   then
    echo "Das Paket $1 laeuft nicht auf $THISHOSTNAME."
    exit 0
  fi
fi
#
UPIDSIG=${2:-$PIDSIG}
#
if [[ -z "$RES" ]]
 then
  if [[ ! -f $RESOURCES ]]
   then
    exit 1
  fi
  S=`grep '^'$1'[[:blank:]]' $RESOURCES`
  if [[ -z "$S" ]]
   then
    echo "$1 nicht in $RESOURCES gefunden."
    exit 1
  fi
  set $S
else
  set $RES
fi
#
KURZNAME=$1
shift
LANGNAME=$1
shift
if [[ "$1" = "MULTI" ]]
 then
  shift
fi
#
SWITCHDAT=/tmp/scclswdt.$PIDSIG
rm -f $SWITCHDAT
#
if last_lock $KURZNAME $UPIDSIG
 then
  #
  echo "$KURZNAME ($LANGNAME) wird gestoppt."
  #
  #
  ./sccl_stop_res_rev $FORCE $CLEAR $CLUSTERSTOP $KURZNAME "$PIDSIG" $*
  RET=$?
  if [[ $RET = 0 || $RET = $LOCKNOTFOUND ]]
   then
    rm -f $LOCKDIR/$KURZNAME$LOCKEXTENSION
    # Wenn Pakete gestartet werden muessen (!PKG:<name>:SWITCH), dann
    # jetzt
    if [[ -f $SWITCHDAT ]]
     then
      while read pkg
       do
        ./sccl_start $pkg
      done <$SWITCHDAT
      rm -f $SWITCHDAT
    fi
    exit 0
  else
    echo "$KURZNAME ($LANGNAME) konnte nicht gestoppt werden."
    exit 1
  fi
else
  reduce_lockdat $KURZNAME $UPIDSIG
  exit 2
fi
#
