#!/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 #------------------------------------------------------------------------------ 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/refresh_P4ROOT_from_offline_db.log" ######### Start of Script ########## check_vars set_vars rotate_last_run_logs log "Start $P4SERVER Refresh P4ROOT from offline_db." check_uid check_dirs check_offline_db_usable if ! "$P4BIN" info -s > /dev/null 2>&1; then die "Error: p4d is not running as expected. Aborting." fi ckp_running "$P4CBIN"/p4login get_journalnum get_offline_journal_num stop_p4d p4d_truncate_journal replay_journals_to_offline_db # On an edge server, we have to replay the active journal as well because the edge # server has been running since the journal was rotated. if [[ "$EDGESERVER" -eq 1 ]]; then replay_active_journal_to_offline_db fi switch_db_files start_p4d log "Removing db files from save directory since we know the journal successfully replayed at this point." # The offline_db directory was the root, so this is where the save directory is now. rm -f "${OFFLINE_DB}"/save/db.* >> "$LOGFILE" 2>&1 recreate_offline_db_files get_offline_journal_num replay_journals_to_offline_db # shellcheck disable=SC2034 ROOTDIR=$OFFLINE_DB dump_checkpoint remove_old_checkpoints_and_journals check_disk_space remove_old_logs log "End $P4SERVER Refresh P4ROOT from offline_db." mail_log_file "$HOSTNAME $P4SERVER Refresh P4ROOT from offline_db log." set_counter ckp_complete
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#7 | 31158 | C. Thomas Tyler |
This is a change to unreleased new behaviour to handle the clients.readonly.dir data as part of the database swap handling. Added a disk space safety check, so the refresh_P4ROOT_from_offline_db will safely abort early if there's not enough disk space to safely complete the rsync of the readonly.clients.dir folder to the offline_db prior to the database swap orchestrated by refresh_P4ROOT_from_offline_db.sh. Renamed the copy function for improved clarity, and added a new rsync_with_preflight function to improve modularity. #review-31159 |
||
#6 | 31152 | C. Thomas Tyler |
Added feature to preserve client.readonly.dir during a database swap. Refined tmp file cleanup logic to search only for tmp files owned by the defined OSUSER. #review-31153 @robert_cowham |
||
#5 | 30684 | C. Thomas Tyler |
This replaces the prior change in @30682. Added undoc '-K' option to preserve original P4ROOT database files for analysis after the swap. This is specifically for the scenario where the P4ROOT databases have some kind of corruption to be analyed, but all checkpoints and journals are known to be healthy, and also the offline_db is known to be in a good state. @review @d_benedict |
||
#4 | 30682 | C. Thomas Tyler |
Added undoc '-rebuild_offline_db' option to rebuild offline_db from checkpoints and journal rather than doing a dump of the former P4ROOT directory. This is specifically for the scenario where the P4ROOT databases have some kind of corruption, but all checkpoints and journals are known to be healthy, and also the offline_db is known to be in a good state. #review-30683 @d_benedict |
||
#3 | 30210 | C. Thomas Tyler |
Adjusted set_counter() so the checkpoint counter is set consistently on any p4d server (commit, edge, standby, filtered forwarding replica, etc.). Also enhanced auditability of counter setting. #review-30211 |
||
#2 | 26468 | C. Thomas Tyler |
Adjusted refresh_P4ROOT_from_offline_db.sh to work on maser/edge/replicas. Added logic in functions like p4d_truncate_journal() to make them safe to call on any host, master, replica, or edge. When called on any host other than the master, appropriate behavior is expected. Approving to deliver patch. |
||
#1 | 26400 | C. Thomas Tyler |
Added refresh_P4ROOT_from_offline_db.sh. Updated backup_functions.sh to support functionality for db refresh. Upgrade start_p4d() and stop_p4d() to use systemd if available, else use the underlying SysV init scripts. Updated verify_sdp.sh to be called from other scripts (sans its own logging). Added many checks to verify_sdp.sh to support P4ROOT/offline_db swap. Logic in P4ROOT/offline_db swap is more careful about what gets swapped. Added start_p4broker() and stop_p4broker() that behave similarly. More shellcheck compliance. #review-26401 |