#!/bin/bash #------------------------------------------------------------------------------ # Copyright (c) Perforce Software, Inc., 2007-2015. All rights reserved # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1 Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PERFORCE # SOFTWARE, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. #------------------------------------------------------------------------------ # This script must be called using the p4master_run script in order to properly set # the environment variables for the script to reference. The p4master_run scripts # source /p4/common/bin/p4_vars to set the environment variables that this script # depends on. # # This script requires the offline_db directory to contain a restored copy of the # most recent checkpoint to play the cut off journal into. # # This script is using the following external variables: # # SDP_INSTANCE - The instance of Perforce that is being backed up. Always an # integer value. # # P4HOME - Server's home directory. # P4BIN - Command line client name for the instance being backed up. # P4DBIN - Server executable name for the instance being backed up. # P4ROOT - Server's root directory. p4/root, p4_N/root # P4PORT - TCP/IP port for the server instance being backed up. # P4JOURNAL - Location of the Journal for the server instance being backed up. # # 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 switch_db_files () { log "Switching out db files..." [ -d $SAVEDIR ] || mkdir -p $SAVEDIR rm -f $SAVEDIR/db.* >> $LOGFILE 2>&1 mv $P4ROOT/db.* $SAVEDIR >> $LOGFILE 2>&1 mv $OFFLINE_DB/db.* $P4ROOT >> $LOGFILE 2>&1 || die "Move of offline db file to $P4ROOT failed." } ######### Start of Script ########## check_vars set_vars check_dirs ckp_running /p4/common/bin/p4login get_journalnum rotate_last_run_logs log "Start $P4SERVER Checkpoint" get_offline_journal_num replay_journals_to_offline_db stop_p4d # Sleep 30 seconds to give everything a chance to exit. sleep 5 truncate_journal replay_journal_to_offline_db if [ $EDGESERVER -eq 1 ]; then replay_active_journal_to_offline_db fi switch_db_files start_p4d echo Removing db files from $SAVEDIR since we know the journal successfully replayed at this point. >> $LOGFILE rm -f $SAVEDIR/db.* >> $LOGFILE 2>&1 recreate_weekly_offline_db_files get_offline_journal_num replay_journals_to_offline_db replay_journal_to_offline_db ROOTDIR=$OFFLINE_DB dump_checkpoint remove_old_checkpoints_and_journals if [[ -d ${P4HOME}/checkpoints.rep ]]; then export CHECKPOINTS=${P4HOME}/checkpoints.rep remove_old_checkpoints_and_journals fi check_disk_space remove_old_logs log "End $P4SERVER Checkpoint" mail_log_file "$HOSTNAME $P4SERVER Weekly maintenance log." set_counter ckp_complete
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#17 | 19414 | C. Thomas Tyler | Released SDP/MultiArch/2016.1/19410 (2016/05/17). | ||
#16 | 18619 | Russell C. Jackson (Rusty) | Updating main with current changes. | ||
#15 | 18530 | Russell C. Jackson (Rusty) | Update main from dev. | ||
#14 | 15856 | C. Thomas Tyler |
Replaced the big license comment block with a shortened form referencing the LICENSE file included with the SDP package, and also by the URL for the license file in The Workshop. |
||
#13 | 15777 | C. Thomas Tyler |
No functional changes. Style Policing only on bash scripts only. Normalized indentation and line breaks, removed offending tabs, and general whitespace usage. |
||
#12 | 15691 | Russell C. Jackson (Rusty) |
Changed to always create a checkpoints.rep directory on the logs volume so that moving the pre-rotated journal back to be the live journal will be a move operation when doing a failover. Added a SHAREDDATA setting to p4_vars so that I could check for that in sync_replica and weekly_sync replica. That allowed me to delete weekly_sync_shared_replica and sync_shared_replica. Added cleanup of checkpoints.rep to sync_replica and weekly_sync_replica since that is where the replica journals should always be located now. Removed cleanup of checkpoints.rep from daily and weekly backup scripts since those should not be handling replica file clean up. The SDP is now designed to be used with the journalcopy and p4 pull -L commands rather than the old style replication using just pull. Failover requires that you move the pre-rotated journal that is in the checkpoints.rep directory back to /p4/${SDP_INSTANCE}/logs/journal now along with updating the server.id file. |
||
#11 | 15609 | C. Thomas Tyler | Pushing SDP 2015.1.15607 (2015/09/02). | ||
#10 | 15373 | Russell C. Jackson (Rusty) | Corrected order of ckp_running check. | ||
#9 | 15190 | Russell C. Jackson (Rusty) |
Added a semaphore file to prevent the checkpoint process from running if another one hasn't finished. Added a check to make sure the journal number is numeric. |
||
#8 | 13928 | dsp |
Set lastSDPCounter after a successfull SDP checkpoint p4 admin checkpoint sets lastCheckpointAction, which is useful for monitoring, in particular when checkpoint age should be observed from the outside through p4. However the SDP is using p4d directly to create checkpoints and will not set checkpoints. In order to distinguish human actions from the SDP cronjobs, set a new counter lastSDPCounter in a similar format. |
||
#7 | 13908 | C. Thomas Tyler | Pushing SDP 2015.1.13906. | ||
#6 | 12171 | Russell C. Jackson (Rusty) | Merge in changes to remove the need for p4master_run. | ||
#5 | 11857 | Russell C. Jackson (Rusty) |
Added a setting to control if checkpoints.rep gets created or not, and then a check to see if that directory exists. If it does, we reset CHECKPOINTS and run it a second time in the daily and weekly in order to keep the checkpoints.rep directory cleaned up when using a shared depotdata volume. |
||
#4 | 11707 | Robert Cowham |
Refactored sending of mail to a common function. Make the setting of "MAILFROM" work for Ubuntu (GNU Mailutils) as well as CentOS |
||
#3 | 11570 | Russell C. Jackson (Rusty) |
Brought in changes from Mark Foundry to add -S $MAILFROM to mail commands. Changed sync_replica.sh and weekly_sync_replica.sh to use $LOGFILE for consistency. Added mail command to both files as well. |
||
#2 | 11524 | Russell C. Jackson (Rusty) | Released updated version of the SDP from Dev. | ||
#1 | 10148 | C. Thomas Tyler | Promoted the Perforce Server Deployment Package to The Workshop. |