Public/Repair-KadenRepo.ps1
|
function Repair-KadenRepo { <# .SYNOPSIS Continue or restore an interrupted managed-file transaction. .DESCRIPTION Resume applies only the payload version and digest recorded in the journal, then re-runs operator model tuning. Restore returns managed files to their recorded prior bytes, leaves the operator file alone, and records that tuned state was preserved. A different installed module cannot be substituted on resume. .EXAMPLE Repair-KadenRepo -Path . -Action Resume #> [CmdletBinding(SupportsShouldProcess = $true)] param( [Parameter(Mandatory = $true)] [string]$Path, [Parameter(Mandatory = $true)] [ValidateSet('Resume', 'Restore')] [string]$Action ) $childRoot = Resolve-KadenChildRoot -Path $Path if (-not (Test-Path -LiteralPath $childRoot)) { throw "KDN-TXN-PREFLIGHT-FAILED: Child repository path does not exist: $childRoot" } if (-not $PSCmdlet.ShouldProcess("$childRoot ($Action)", 'Repair-KadenRepo')) { return } Clear-KadenExpiredTransaction -ChildRoot $childRoot $open = Get-KadenOpenJournal -ChildRoot $childRoot if (-not $open) { throw 'KDN-TXN-PREFLIGHT-FAILED: No incomplete Kaden transaction is waiting.' } $txnRoot = Join-Path $childRoot (Join-Path '.kaden' 'transactions') $lockPath = Join-Path $txnRoot 'update.lock' $transactionId = if ($open.Journal) { [string]$open.Journal.transactionId } else { 'repair' } Lock-KadenUpdate -LockPath $lockPath -TransactionId $transactionId $operatorModelApply = $null $operatorModelRepair = 'preserved' try { if ($Action -eq 'Resume') { Invoke-KadenRepairResume -ChildRoot $childRoot -OpenJournal $open $operatorModelApply = Invoke-KadenOperatorModelApplySafe -ChildRoot $childRoot $operatorModelRepair = 'rerun' } else { Invoke-KadenRepairRestore -ChildRoot $childRoot -OpenJournal $open $operatorModelRepair = 'preserved' } Set-KadenJournalOperatorModelRepair -JournalPath $open.Path -Disposition $operatorModelRepair } finally { Remove-Item -LiteralPath $lockPath -Force -ErrorAction SilentlyContinue } return [pscustomobject]@{ Succeeded = $true Path = $childRoot Action = $Action OperatorModelRepair = $operatorModelRepair OperatorModelApply = $operatorModelApply } } |