#!/bin/bash #------------------------------------------------------------------------------ # Copyright (c) Perforce Software, Inc., 2007-2014. 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. #------------------------------------------------------------------------------ # Intended to be run on a replica machine to sync replica from its corresponding master # Like sync_replica.sh but for use in a regular crontab source /p4/common/bin/backup_functions.sh ######### Start of Script ########## check_vars set_vars LOGFILE=$LOGS/sync_replica.log $P4BIN -u $P4USER -p ${SSL_PREFIX}${P4MASTER}:${P4MASTERPORTNUM} login < /p4/common/bin/adminpass > /dev/null 2>&1 JOURNALNUM=`$P4BIN -u $P4USER -p ${SSL_PREFIX}${P4MASTER}:${P4MASTERPORTNUM} counter journal` if [[ "$JOURNALNUM" = "" ]]; then die "Error: Couldn't get journal number from master. Aborting." fi rotate_last_run_logs log "Starting weekly_sync_replica.sh" # You must set up a public keypair using "ssh-keygen -t rsa" in order for this to work. # You need to paste your CLIENT ~/.ssh/id_rsa.pub contents into the REMOTE ~/ssh/authorized_keys file. rsync -avz --delete ${OSUSER}@${P4MASTER}:$CHECKPOINTS/ $CHECKPOINTS > $LOGFILE 2>&1 rsync_exit_code=$? if [[ $rsync_exit_code -ne 0 ]]; then die "Error: Failed to pull /p4/$P4INSTANCE/checkpoints from host $P4MASTER. The rsync exit code was: $rsync_exit_code. Aborting." fi recreate_weekly_offline_db_files get_offline_journal_num replay_journals_to_offline_db /p4/common/bin/p4master_run $P4INSTANCE /p4/${P4INSTANCE}/bin/p4d_${P4INSTANCE}_init stop >> $LOGFILE 2>&1 # Sleep 10 seconds to give everything a chance to exit. sleep 10 log "Server should be down now." log "Moving offline db into root." cd /p4/${P4INSTANCE}/root rm -f save/db.* >> $LOGFILE 2>&1 mv db.* save >> $LOGFILE 2>&1 mv /p4/${P4INSTANCE}/offline_db/db.* . >> $LOGFILE 2>&1 rm -f state >> $LOGFILE 2>&1 rm -f rdb.lbr >> $LOGFILE 2>&1 rm -f /p4/$P4INSTANCE/logs/journal >> $LOGFILE 2>&1 $P4BIN -p ${SSL_PREFIX}${P4MASTER}:${P4MASTERPORTNUM} login < /p4/common/bin/adminpass $P4BIN -p ${SSL_PREFIX}${P4MASTER}:${P4MASTERPORTNUM} login $P4SERVICEUSER /p4/common/bin/p4master_run $P4INSTANCE /p4/${P4INSTANCE}/bin/p4d_${P4INSTANCE}_init start >> $LOGFILE 2>&1 log "Server should be back up now." $P4BIN -p ${SSL_PREFIX}${P4MASTERPORTNUM} login < /p4/common/bin/adminpass $P4BIN -p ${SSL_PREFIX}${P4MASTERPORTNUM} pull -lj >> $LOGFILE recreate_weekly_offline_db_files get_offline_journal_num replay_journals_to_offline_db check_disk_space remove_old_logs $P4BIN -p ${SSL_PREFIX}${P4MASTERPORTNUM} pull -lj >> $LOGFILE log "End $P4SERVER Checkpoint" mail_log_file "$HOSTNAME $P4SERVER Weekly sync replica log."
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#21 | 19694 | C. Thomas Tyler |
Released SDP/MultiArch/2016.1/19661 (2016/06/08). Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'. |
||
#20 | 18619 | Russell C. Jackson (Rusty) | Updating main with current changes. | ||
#19 | 16263 | Russell C. Jackson (Rusty) | Added shutdown check to init script and used it in weekly_sync_replica. | ||
#18 | 16262 | Russell C. Jackson (Rusty) | Corrected logic and added missing -p | ||
#17 | 16259 | Russell C. Jackson (Rusty) |
Created P4MASTERPORT in instance_vars to simplify logins to the master server in the other scripts. Changed other scripts to use P4MASTERPORT Added clean up of statejcopy and checkpoints.rep directory to weekly_sync_replica so that it properly resets a replica that is using journalcopy. Moved umask to instance_vars since it wasn't being picked up when running things via crontab Removed P4REPLICANAME from instance_vars since it wasn't being used anymore. Added HOSTIP to mkdirs and to the P4PORT setting in instance vars so the server starts on a specific IP address rather than all on the server. This avoids a bug where rpl.forward.login doesn't work when logging in via localhost. |
||
#16 | 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. |
||
#15 | 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. |
||
#14 | 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. |
||
#13 | 15609 | C. Thomas Tyler | Pushing SDP 2015.1.15607 (2015/09/02). | ||
#12 | 13908 | C. Thomas Tyler | Pushing SDP 2015.1.13906. | ||
#11 | 13651 | Russell C. Jackson (Rusty) | Added line to remove save db.* | ||
#10 | 12171 | Russell C. Jackson (Rusty) | Merge in changes to remove the need for p4master_run. | ||
#9 | 12070 | Russell C. Jackson (Rusty) | Corrected test on JOURNALNUM. | ||
#8 | 12069 | Russell C. Jackson (Rusty) | Redirect logings to dev/null. | ||
#7 | 11948 | Russell C. Jackson (Rusty) | Corrected mail subject. | ||
#6 | 11897 | Russell C. Jackson (Rusty) | Moved log rotation to after we get the journal number. | ||
#5 | 11856 | Russell C. Jackson (Rusty) |
Changed sync_replica and weekly_sync_replica to match the shared versions with the the addition of the rsync command. Cleaned up text and used die where appropriate in the shared files. |
||
#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 | 11682 | Russell C. Jackson (Rusty) | Removed the unset of P4NAME since we aren't using P4NAME anymore, and the bug has been fixed. | ||
#2 | 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. |
||
#1 | 10148 | C. Thomas Tyler | Promoted the Perforce Server Deployment Package to The Workshop. |