#!/bin/bash
#==============================================================================
# Copyright and license info is available in the LICENSE file included with
# the Server Deployment Package (SDP), and also available online:
# https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE
#------------------------------------------------------------------------------

# This script is designed to create a filter checkpoint for an Edge server
#
# Note:
# This is not required unless you are filtering data via the server spec. If you are not
# doing that, then you can reseed the edge using the latest checkpoint of the master.
#
# The script requires the SDP instance, the edge server ID and the checkpoint name as parameters to the script.

# Run example:
#  ./edge_dump.sh 1 sfo_edge /depotdata/p4_1.edgeckp.9188.gz

export SDP_INSTANCE=${SDP_INSTANCE:-Undefined}
export SDP_INSTANCE=${1:-$SDP_INSTANCE}
if [[ $SDP_INSTANCE == Undefined ]]; then
   echo "Instance parameter not supplied."
   echo "You must supply the Perforce instance as a parameter to this script."
   exit 1
fi

. /p4/common/bin/p4_vars $SDP_INSTANCE
. /p4/common/bin/backup_functions.sh
LOGFILE=$LOGS/edge_dump.log

######### Start of Script ##########

check_vars
set_vars

if [[ "$3" == "" ]]; then
   echo You must pass in the edge server ID and the full path and filename of the checkpoint you want to create.
   exit 2
fi

EDGEID=$2
EDGECKP=$3

# With -K we filter out the various Edge-specific tables which will be replaced with 
# current live versions.
if [[ "${P4D_VERSION:-1970.1}" > "2019.0" ]]; then
   EXCLUDED_TABLES=db.have,db.working,db.locks,db.resolve,db.revsh,db.workingx,db.resolvex,db.stash,db.haveg,db.workingg,db.locksg,db.resolveg
else
   EXCLUDED_TABLES=db.have,db.working,db.resolve,db.locks,db.revsh,db.workingx,db.resolvex
fi

log "Create checkpoint from master offline_db skipping tables not used on the edge and using the edge server form for any filtered data."
{ time /p4/${SDP_INSTANCE}/bin/p4d_${SDP_INSTANCE} -r /p4/${SDP_INSTANCE}/offline_db/ -K $EXCLUDED_TABLES -P $EDGEID -jd -z $EDGECKP; } >> $LOGFILE 2>&1 || { die "Edge reseed checkpoint dump failed!"; }

log "Edge reseed checkpoint complete."

# Inform the user about follow up tasks
log "You now need to copy $EDGECKP to the edge server and use /p4/common/bin/recover_edge.sh to reseed the edge server."

cat $LOGFILE

