# ============================================================================
# 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
# ----------------------------------------------------------------------------
<#
.Synopsis
Creates a filtered edge checkpoint from a master offline database
.Description
Create filtered checkpoint
.Parameter SDPInstance
The specified instance to process
.Parameter EdgeServer
The specified id of edge server (from 'p4 servers')
.Parameter CkpFile
The specified checkpoint file to produce
.Example
create-filtered-edge-checkpoint.ps1 1 Edge p4_1.ckp.1234.gz
#>
[CmdletBinding()]
param ([string]$SDPInstance = $(throw "SDPInstance parameter is required."),
[string]$EdgeServer = $(throw "EdgeServer parameter is required."))
Set-StrictMode -Version 2.0
# Source the SDP Functions shared between scripts
$SDPFunctionsPath = Split-Path -parent $MyInvocation.MyCommand.Path | Join-Path -childpath "SDP-Functions.ps1"
. $SDPFunctionsPath
$global:ScriptName = "create-filtered-edge-checkpoint.ps1"
$global:ScriptTask = "Create Filtered edge checkpoint from master"
$global:LogFileName = "create-filtered-edge-checkpoint.log"
Parse-SDPConfigFile $MyInvocation.MyCommand.Path
Create-LogFile
$OrigPath = convert-path .
Set-Location -Path $global:LOGS_DIR
try {
$checkpoint_prefix = -join($global:CHECKPOINTS_DIR, "\", $global:SDP_INSTANCE_P4SERVICE_NAME, ".ckp.")
$checkpoint_path = -join($checkpoint_prefix, "[0-9]*.gz")
$files = @(Get-ChildItem -Path $checkpoint_path | Sort-Object -Property LastWriteTime -Descending)
if (!$files -or $files.count -eq 0) {
$journal = Get-JournalCounter $global:OFFLINE_DB_DIR
} else {
$journal = $files[0].Name | select-string '\.ckp\.([0-9]*)\.gz' | % {$_.Matches} | % {$_.Groups[1].Value}
}
$CkpFile = -join($checkpoint_prefix, "filtered-edge.", $journal, ".gz")
remove-files $CkpFile 0
# With -K we filter out the various Edge-specific tables which will be replaced with
# current live versions.
$EXCLUDED_TABLES = "db.have,db.working,db.resolve,db.locks,db.revsh,db.workingx,db.resolvex"
log "Checkpointing from master offline_db skipping tables not used on the edge - with filtering."
$cmd = "$global:P4DEXE -r $global:OFFLINE_DB_DIR -K $EXCLUDED_TABLES -P $EdgeServer -jd -z $CkpFile"
run-cmd-with-check $cmd "ERROR - attempting to create filtered checkpoint"
Log "End ${global:SDP_INSTANCE_P4SERVICE_NAME} ${global:ScriptTask}"
Write-Output "`r`n${global:ScriptTask} completed successfully - see ${global:logfile}"
Log "Please copy $CkpFile to remote server and restore using recover-edge.ps1"
}
Catch
{
write-error $error[0].ScriptStackTrace
LogException $_.Exception
Write-Output "`r`nFAILED - ${global:ScriptTask} - see ${global:logfile}"
}
Set-Location -Path $OrigPath
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #7 | 26659 | Robert Cowham |
Removing out-of-date files and ancient utilities. Updating SDP Guide for Windows with includes to various .ps1 scripts Add new sync-replica.ps1 and call it from sync_replica.bat |
||
| #6 | 26120 | Robert Cowham |
Fix daily_checkpoint for edge/standby servers Make edge tables to include/exclude version specific Move password files to config dir |
||
| #5 | 22759 | Robert Cowham | Improve documentation within scripts. | ||
| #4 | 22727 | Robert Cowham | Rotate md5 where necessary | ||
| #3 | 22726 | Robert Cowham | Fix quoting issues | ||
| #2 | 22724 | Robert Cowham | Fix problem with multiple files. | ||
| #1 | 22722 | Robert Cowham | Basic creation of filtered edge checkpoint file |