parallel_ckp.sh #1

  • //
  • guest/
  • perforce_software/
  • sdp/
  • main/
  • Server/
  • Unix/
  • p4/
  • common/
  • bin/
  • parallel_ckp.sh
  • View
  • Commits
  • Open Download .zip Download (6 KB)
#!/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
#------------------------------------------------------------------------------

set -u

#==============================================================================
# Declarations and Environment

export SDP_ENV=/p4/common/bin/p4_vars
export SDP_INSTANCE=${SDP_INSTANCE:-Unset}

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

declare StatusMessage="OK: All files backed up."
declare -i CkpFailed=
declare -i ExitCode=0
declare CkpCmd=
declare Log=Unset
declare Version=1.0.0
declare Threads=1

#==============================================================================
# Local Functions

# Micro-functions, one-liners used to avoid external dependencies.
function msg () { if [[ $Log != Unset ]]; then echo -e "$*" >> $Log; else echo -e "$*"; fi; }
function bail () { msg "\nError: ${1:-Unknown Error}"; exit ${2:-1}; }

#------------------------------------------------------------------------------
# Function: usage (required function)
#
# Input:
# $1 - style, either -h (for short form) or -man (for man-page like format).
# The default is -h.
#
# $2 - error message (optional).  Specify this if usage() is called due to
# user error, in which case the given message displayed first, followed by the
# standard usage message (short or long depending on $1).  If displaying an
# errror, usually $1 should be -h so that the longer usage message doesn't
# obsure the error message.
#
# Sample Usage:
# usage 
# usage -man
# usage -h "Incorrect command line usage."
#
# This last example generates a usage error message followed by the short
# '-h' usage summary.
#------------------------------------------------------------------------------
function usage
{
   declare style=${1:--h}
   declare errorMessage=${2:-Unset}

   if [[ $errorMessage != Unset ]]; then
      echo -e "\n\nUsage Error:\n\n$errorMessage\n\n" >&2
   fi

   echo "USAGE for parallel_ckp.sh v$Version:

parallel_ckp.sh [<instance>] [-recent]

   or

parallel_ckp.sh -h|-man
"
   if [[ $style == -man ]]; then
      echo -e "DESCRIPTION:

	This script runs a parallel offline checkpoint.

OPTIONS:
<instance>
	Specify the SDP instances.  If not specified, the SDP_INSTANCE
	environment variable is used instead.  If the instance is not
	defined by a parameter and SDP_INSTANCE is not defined, parallel_ckp.sh
	exists immediately with an error message.

-P #
	Specify the number of db_files to verify in parallel.

HELP OPTIONS:
 -h	Display short help message
 -man	Display man-style help message

EXAMPLES:
	This script is typically called via cron with only the instance
	paramter and the number of threads as arguments, e.g.:
	parallel_ckp.sh 1 6

LOGGING:
	This script generates no output by default.  All (stdout and stderr) is
	logged to /p4/N/logs/checkpoint.log.

	The exception is usage errors, which result an error being sent to
	stderr followed usage info on stdout, followed by an immediate exit.

EXIT CODES:
	An exit code of 0 indicates no errors were encounted attempting to
	perform verifications, AND that all verifications attempted
	reported no problems.

	A exit status of 1 indicates that verifications could not be
	attempted for some reason.
"
   fi

   exit 1
}

#==============================================================================
# Command Line Processing
declare -i shiftArgs=0

set +u
while [[ $# -gt 0 ]]; do
   case $1 in
      (-h) usage -h;;
      (-man) usage -man;;
      (-P) Threads=$2; shiftArgs=1;;
      (-*) usage -h "Unknown command line option ($1).";;
      (*) export SDP_INSTANCE=$1;;
   esac

   # Shift (modify $#) the appropriate number of times.
   shift; while [[ $shiftArgs -gt 0 ]]; do
      [[ $# -eq 0 ]] && usage -h "Incorrect number of arguments."
      shiftArgs=$shiftArgs-1
      shift
   done
done
set -u

#==============================================================================
# Command Line Verification

[[ $SDP_INSTANCE == Unset ]] && \
   bail "The \$SDP_INSTANCE setting is not defined. It must be defined by doing:\n\n\tsource /p4/common/bin/p4_vars <instance>\n\nor by passing in the instance name as a parameter to this script.\n"

#==============================================================================
# Main Program

source $SDP_ENV $SDP_INSTANCE || bail "Failed to load SDP environment for instance $SDP_INSTANCE."
source $P4CBIN/backup_functions.sh || bail "Failed to load backup_functions.sh."

[[ $Log == Unset ]] && Log=$LOGS/checkpoint.log
# This is needed because everything in backup_functions.sh uses LOGFILE including the mail_log_file function.
LOGFILE=$Log
LOG=$LOGS/checkpoint

check_vars
set_vars
get_journalnum
rotate_last_run_logs
msg "${0##*/} v$Version Starting $P4SERVER checkpoint at $(date +'%a %Y-%m-%d %H:%M:%S %Z')."
msg "If there are errors in this log, contact your local support team."
check_uid
check_dirs
check_offline_db_usable
ckp_running
$P4CBIN/p4login
get_offline_journal_num
truncate_journal
replay_journals_to_offline_db
dump_parallel_ckp
restore_parallel_ckp 
create_tar_ckp
remove_old_checkpoints_and_journals
if [[ -d ${P4HOME}/journals.rep ]]; then
   cd ${P4HOME}/journals.rep
   rm $(ls -t | awk 'NR>1') > /dev/null 2>&1
fi
remove_old_logs
msg "${0##*/} v$Version End $P4SERVER checkpoint at $(date +'%a %Y-%m-%d %H:%M:%S %Z')."
set_counter
ckp_complete

exit $ExitCode
# Change User Description Committed
#2 26470 C. Thomas Tyler Released SDP 2019.3.26468 (2020/04/10).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#1 25380 C. Thomas Tyler Released SDP 2019.1.25374 (2019/03/21).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
//guest/perforce_software/sdp/dev/Server/Unix/p4/common/bin/parallel_ckp.sh
#1 25374 Russell C. Jackson (Rusty) New script for performing a parallel checkpoint.
Run as follows:
     parallel_ckp.sh <instance> -P <threads>

New script to restore a parallel checkpoint file to the offline database
in case a recovery is needed.
Run as follows:   
    parallel_ckp_restore.sh <instance> -f <parallel_ckp_file.tgz> -P <threads>