weekly_sync_shared_replica.sh #10

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

# 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
#
# NOTE!!!
# logs must not be a shared volume with this script.
export P4INSTANCE=${P4INSTANCE:-Undefined} 
export P4INSTANCE=${1:-$P4INSTANCE} 
if [[ $P4INSTANCE == 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 $P4INSTANCE
. /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_shared_replica.sh"

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 > /dev/null 2>&1
$P4BIN -p ${SSL_PREFIX}${P4MASTER}:${P4MASTERPORTNUM} login $P4SERVICEUSER > /dev/null 2>&1
/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 > /dev/null 2>&1
$P4BIN -p ${SSL_PREFIX}${P4MASTERPORTNUM} pull -lj >> $LOGFILE

rm -f save/db.* >> $LOGFILE 2>&1
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 shared replica log."
# Change User Description Committed
#13 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.
#12 15609 C. Thomas Tyler Pushing SDP 2015.1.15607 (2015/09/02).
#11 13908 C. Thomas Tyler Pushing SDP 2015.1.13906.
#10 13651 Russell C. Jackson (Rusty) Added line to remove save db.*
#9 12171 Russell C. Jackson (Rusty) Merge in changes to remove the need for p4master_run.
#8 12070 Russell C. Jackson (Rusty) Corrected test on JOURNALNUM.
#7 12069 Russell C. Jackson (Rusty) Redirect logings to dev/null.
#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 11690 Russell C. Jackson (Rusty) Change file format to Unix.
#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 11524 Russell C. Jackson (Rusty) Released updated version of the SDP from Dev.
//guest/perforce_software/sdp/dev/Server/Unix/p4/common/bin/weekly_sync_shared_replica.sh
#3 11523 Russell C. Jackson (Rusty) Modified P4BROKERPORTNUM to just be the port number and added P4BROKERPORT to instance_vars
 to be consistent with P4PORT. Also makes it easier to modify p4review.py to use P4BROKERPORT
 rather than P4PORT for the subject line when needed.
#2 11511 Russell C. Jackson (Rusty) Correct log name.
#1 11509 Russell C. Jackson (Rusty) Added sync_replica.log to backup function log rotations, and added rm on existing
 gzipped logs with the same name in order to keep the script from hanging waiting
 for a response to overwrite.

 Added sync_shared_replica.sh and weekly_sync_shared_replica.sh to support replicas
with shared depotdata storage. No rsync is necessary. The logs volume must not be
a shared volume with these scripts though.