#!/bin/sh
# BLURB gpl
#
#                            Coda File System
#                               Release 6
#
#           Copyright (c) 1987-2018 Carnegie Mellon University
#                   Additional copyrights listed below
#
# This  code  is  distributed "AS IS" without warranty of any kind under
# the terms of the GNU General Public Licence Version 2, as shown in the
# file  LICENSE.  The  technical and financial  contributors to Coda are
# listed in the file CREDITS.
#
#                         Additional copyrights
#                            none currently
#
#*/

prefix=/usr
exec_prefix=${prefix}

PATH=$PATH:$prefix/sbin
export PATH

# load the server configuration file
vicedir=/vice
. "$(${exec_prefix}/sbin/codaconfedit server.conf)"

scm=$(cat "$vicedir/db/scm")
if [ "$(cat "$vicedir/hostname")" != "$scm" ]
then
        echo "This must be run from the scm ($scm)"
        exit 1
fi

# Check that the input parameters are correct
if [ $# = 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]
then
	echo "purgevol_rep volumename"
	exit 1
fi

if [ "$1" = "--kill" ]
then
    dryrun=0
    shift
else
    dryrun=1
    echo "Only testing, use 'purgevol_rep --kill $1' to really purge the volume"
fi

# Ask the SCM where the volume is located.
REPVOLNAME=$1
volinfo=$("$exec_prefix/bin/getvolinfo" "$scm" "$REPVOLNAME")
if [ $? -ne 0 ]
then
    echo "Couldn't get volume location information for $REPVOLNAME"
    exit 1
fi

NSERVERS=$(echo $volinfo | sed 's/.* ServerCount \([^ ]*\) .*/\1/')

N=0
while [ $N -ne "$NSERVERS" ]
do
  REP=$(echo $volinfo | sed 's/.* Replica'$N' id 0*\([^,]*\),.*/\1/')
  SRV=$(echo $volinfo | sed 's/.* Server'$N' \([^ ]*\) .*/\1/')

  volumelist=$(volutil -h "$SRV" getvolumelist 2>/dev/null)
  volumes=$(echo "$volumelist" | grep " W$REP " | cut -d' ' -f2 | cut -c2-)

  for volid in $volumes
  do
    volname=$(echo "$volumelist" | grep " I$volid " | cut -d' ' -f1 | cut -c2-)

    if [ $dryrun = 0 ] ; then
      echo "Purging $volname ($volid) from $SRV"
      volutil -h "$SRV" purge "$volid" "$volname" 2>/dev/null
    else
      echo "Would have purged $volname ($volid) from $SRV"
    fi
  done
  HOSTS="$HOSTS $SRV"
  N=$((N + 1))
done

if [ $dryrun = 0 ] ; then
  REPVOLID=$(grep "$REPVOLNAME" "$vicedir/db/VRList" | cut -d ' ' -f2)

  # Delete the entry from the backup list.
  if [ -e "$vicedir/db/dumplist" ] ; then
      awk "\$1 !~ /^$REPVOLID\$/ { print }" "$vicedir/db/dumplist" > "$vicedir/db/dumplist.tmp"
      mv "$vicedir/db/dumplist.tmp" "$vicedir/db/dumplist"
  fi

  # Delete the entry for the volume from the VRList
  awk "\$1 !~ /^$REPVOLNAME$/ { print }" "$vicedir/db/VRList" > "$vicedir/db/VRList.tmp"
  mv "$vicedir/db/VRList.tmp" "$vicedir/db/VRList"

  # Make sure that the vldb and vrdb are updated.
  volutil -h "$SCM" makevrdb "$vicedir/db/VRList"
  bldvldb.sh $HOSTS
else
  echo "Don't forget we were only testing"
  echo "use 'purgevol_rep --kill $1' to really purge the volume"
fi
