#!/bin/bash
Version=1.0.7
# Usage: failover_p4d_from_this_host.sh SDP_INSTANCE Style Type BackupHost NO_OP
# This is intended to be called by 'hms', not directly by a human.
# Micro-functions.
function msg () { echo -e "$*"; }
function bail () { msg "\nError: ${1:-Unknown Error}\n"; exit ${2:-1}; }
function usage () { msg "Usage:\n\t$UsageSummary\n"; exit 2; }
function cmd () {
if [[ $NO_OP -eq 0 ]]; then
msg "Running: $*"
$*
return $?
else
msg "NO_OP: Would run: $*"
fi
}
# Do nothing unless usage is correct.
export SDP_INSTANCE=${1:-Unset}
declare Style=${2:-Unset}
declare Type=${3:-Unset}
declare BackupHost=${4:-Unset}
declare NO_OP=${5:-Unset}
declare ThisScript=${0##*/}
declare UsageSummary="$ThisScript SDP_INSTANCE Style Type BackupHost NO_OP"
declare P4DInitScript=/p4/$SDP_INSTANCE/bin/p4d_${SDP_INSTANCE}_init
[[ $# -eq 5 ]] || bail "Bad Usage! Usage:\n\t$UsageSummary\n"
msg "Starting $ThisScript v$Version on ${HOSTNAME%%.*} at $(date)."
msg "Args: I=$SDP_INSTANCE S=$Style T=$Type BH=$BackupHost NO_OP=$NO_OP"
# Load SDP controlled shell environment.
source /p4/common/bin/p4_vars "$SDP_INSTANCE" || \
bail "Failed to load SDP environment for instance $SDP_INSTANCE."
[[ $(id -u -n) == $OSUSER ]] || bail "$0 can only be run by $OSUSER"
[[ $NO_OP -eq 1 ]] && msg "NO_OP: Preview Mode Enabled."
[[ -x $P4DInitScript ]] || bail "$P4DInitScript is not executable."
# For unscheduled failover, we attempt to top the server to prevent
# split brain, and nothing more. The host alias must be also be
# changed externally to this automation.
cmd $P4DInitScript stop
[[ "${SERVERID^^}" == *"MASTER"* || "${SERVERID^^}" == *"_EDGE_"* ]] ||\
bail "Instance $SDP_INSTANCE ServerID ($SERVERID) indicates it not a master or edge server! Aborting further failover processing on host ${HOSTNAME%%.*}."
# For scheduled failover, we go further and preserve the original journal
# file verbatim.
if [[ $Style == Scheduled ]]; then
cmd scp -q -p $P4JOURNAL $BackupHost:$P4JOURNAL.from_old_master ||\
bail "Failed to scp $P4JOURNAL to backup host $BackupHost:$P4JOURNAL.from_old_master."
fi
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #1 | 33516 | C. Thomas Tyler |
Consistency pass: fix absolute URLs, p4ms->hms renames, script/doc typos and bugs - Convert absolute workshop.perforce.com URLs to relative paths in dlp/ReadMe.md - Fix case-mismatch link to HMS_Product_Roadmap.md in README.md - Rename reset_p4ms.sh -> reset_hms.sh and p4broker_p4ms_test -> p4broker_hms_test - Fix .sh-suffix bugs: bin/hms calling global_replica_status.sh (should be no ext), and matching SEE ALSO / doc references for sdp_sync and global_replica_status - Add missing scripts (gtu, hrun, irun, global_replica_status) to gen_script_man_pages.sh - Add stub scripts: nj_help.sh, broker_njob.pl, broker_mkproj.pl, broker_jr.pl - Remove dangling absolute symlinks HostCM/p4 and HostCM/p4d (cruft) - Rename test/b -> test/broker_ctl.sh for clarity - Fix real bugs: broker_imply-u.pl broken regex match, gen_dlp_broker_cfg.sh and gen_nj_broker_cfg.sh copy-pasted Version-file existence check, garbled comment in broker_must_be_owner.pl, unclosed quote in tools/gsr.sh usage(), missing 'h' in HMS_SystemComponents.md broker command example (^ms$ -> ^hms$) - Fix broken sed command and incomplete sentence in HMS_Install_Notes.md and SDP_and_HMS_Update_Process.md - Fix broken markdown table in HMS_Product_Roadmap.md - Fix unclosed parenthesis, missing verb, and FKA Swarm mislabel in HMSDeploymentPlanning.adoc - Standardize //streams/main/... naming in HostCM/ReadMe.md - Numerous typo fixes across README.md, HMS_SystemComponents.md, SDP_and_HMS_Update_Process.md, HMS_TightShipManagement.adoc, HMSDeploymentPlanning.adoc, HostCM/ReadMe.md, and various scripts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |