sync_replica.sh #25

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

# Intended to be run on a replica machine to sync replica from its corresponding master
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 

# shellcheck disable=SC1091
source /p4/common/bin/p4_vars "$SDP_INSTANCE"
# shellcheck disable=SC1091
source /p4/common/bin/backup_functions.sh
LOGFILE="$LOGS/sync_replica.log"

######### Start of Script ##########
check_vars
set_vars
rotate_last_run_logs
log "Starting sync_replica.sh"

if [[ "${P4REPLICA}" == "FALSE" ]]; then
  die "Error: sync_replica.sh can only run on a replica." 
fi

check_uid

"$P4CBIN/p4login" -p "$P4MASTERPORT"
MASTERJOURNALNUM=$("$P4BIN" -u "$P4USER" -p "${P4MASTERPORT}" counter journal)

if [[ "$MASTERJOURNALNUM" == "" ]]; then
   die "Error:  Couldn't get journal number from master.  Aborting."
fi

# We set JOURNALNUM to one less than the master since we are not truncating the
# journal and replay_journals_to_offline_db assumes that truncate_journal has
# been run.

# shellcheck disable=SC2034
JOURNALNUM=$((MASTERJOURNALNUM-1))

TargetServerJournalPrefix=$(get_target_config_value journalPrefix)
if [[ -n "$TargetServerJournalPrefix" ]]; then
   CheckpointsDir="${TargetServerJournalPrefix%/*}"
else
   die "Could not determine journalPrefix of P4TARGET server of ServerID $SERVERID."
fi

# Determine the target host from P4TARGET, which is a P4PORT setting. Extract
# the server host from this value. The value extracted must be suitable with
# passwordless ssh for rsync usage.
TargetHost="$("$P4DBIN" -r "$P4ROOT" -k db.config -jd - | grep "@${SERVERID}@ @P4TARGET@" | cut -d '@' -f 10)"
TargetHost=${TargetHost%:*}
TargetHost=${TargetHost#*:}

# You must set up a public keypair using "ssh-keygen -t rsa" in order for this
# to work. You need to paste your CLIENT ~perforce/.ssh/id_rsa.pub contents
# into the REMOTE ~perforce/ssh/authorized_keys file. 
if [[ "$SHAREDDATA" == "FALSE" ]]; then
   RsyncCmd="rsync -av --delete ${OSUSER}@${TargetHost}:$CheckpointsDir/ $CheckpointsDir"
   log "Executing: $RsyncCmd"
   $RsyncCmd >> "$LOGFILE" 2>&1
   rsync_exit_code=$?

   if [[ "$rsync_exit_code" -ne 0 ]]; then
      die "Error: Failed to pull $CheckpointsDir from host $TargetHost.  The rsync exit code was: $rsync_exit_code.  Aborting."
   fi
else
   log "Skipping rsync of $CheckpointsDir because SHAREDDATA is $SHAREDDATA."
fi

recreate_offline_db_files 1
get_offline_journal_num
replay_journals_to_offline_db 1
"$P4CBIN/p4login"
check_disk_space
remove_old_logs
remove_old_checkpoints_and_journals

log "End $P4SERVER sync replica"
mail_log_file "$HOSTNAME $P4SERVER Daily sync replica log."
# Change User Description Committed
#28 31077 C. Thomas Tyler Released SDP 2024.2.31075 (2024/12/20).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#27 30297 C. Thomas Tyler Released SDP 2023.2.30295 (2024/05/08).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#26 29891 C. Thomas Tyler Released SDP 2023.1.29699 (2023/07/11).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#25 29612 C. Thomas Tyler Released SDP 2023.1.29610 (2023/05/25).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#24 28651 C. Thomas Tyler Released SDP 2021.2.28649 (2022/03/03).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#23 27331 C. Thomas Tyler Released SDP 2020.1.27325 (2021/01/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#22 26161 C. Thomas Tyler Released SDP 2019.3.26159 (2019/11/06).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#21 23331 C. Thomas Tyler Released SDP 2017.4.23329 (2017/12/05).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#20 20974 C. Thomas Tyler Released SDP 2016.2.20972 (2016/11/01).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#19 20767 C. Thomas Tyler Released SDP 2016.2.20755 (2016/09/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#18 20353 C. Thomas Tyler Released SDP 2016.1.20348.
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev',
with selective removal of changes related to work-in-progress
changes.
#17 18619 Russell C. Jackson (Rusty) Updating main with current changes.
#16 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.
#15 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.
#14 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.
#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 12171 Russell C. Jackson (Rusty) Merge in changes to remove the need for p4master_run.
#9 12083 Russell C. Jackson (Rusty) Added login to avoid issues with diskspace command.
#8 12070 Russell C. Jackson (Rusty) Corrected test on JOURNALNUM.
#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.