From ca227840578c136f5e1bdbf3ac6ae5ee4737603c Mon Sep 17 00:00:00 2001 From: probe Date: Wed, 2 Nov 1994 13:44:24 +0000 Subject: [PATCH] 1. Remove the backup volume before the volume name changes (if n.) 2. Do all parent volume releases at successful end, and check for dups. 3. Added code to back out all transactions, if there is a failure. --- incremental/afs_rename.pl | 45 +++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/incremental/afs_rename.pl b/incremental/afs_rename.pl index 026cdfc6..bac85bda 100644 --- a/incremental/afs_rename.pl +++ b/incremental/afs_rename.pl @@ -55,33 +55,54 @@ if ($oldtype eq "ERR") { $newvname = "X" . $newvname if ($newtype eq "ERR"); $newvname =~ s/[^-A-Za-z0-9_.]//g; # strip out illegal characters -&run("$vos rename $oldvname $newvname -cell $newcell") - if ($oldvname ne $newvname); -&run("$vos remove $oldbackup $oldvname.backup -cell $oldcell") - if ($oldbackup && $newvname =~ /^n\./); +if ($oldbackup && $newvname =~ /^n\./) { + system("$vos remove $oldbackup $oldvname.backup -cell $oldcell"); +} +if ($oldvname ne $newvname) { + &run("$vos rename $oldvname $newvname -cell $newcell"); + push(@clean, "$vos rename $newvname $oldvname -cell $newcell"); +} if ($oldtype eq "AFS") { &run("$fs rmm $oldpath"); + push(@clean, "$fs mkm $oldpath $oldvname"); &release_parent($oldpath) if ($newtype ne "AFS" || $oldpath ne $newpath); } if ($newtype eq "AFS") { &run("$fs mkm $newpath $newvname"); + push(@clean, "$fs rmm $newpath"); &release_parent($newpath); } +&do_releases; exit; sub run { local(@cmd) = @_; + system("@cmd >/dev/null"); - die "@cmd: FAILED\n" if ($?); + &fatal("@cmd: FAILED") if ($?); return 0; } +sub fatal +{ + local($cmd); + $_ = join(' ',@_); + s/\n$//; + + while (@clean) { + $cmd = shift(@clean); + warn "$newname: Cleanup failed: $cmd\n" if (system("$cmd")); + } + die "$newname: $_\n"; +} + + sub check { local($vname) = @_; @@ -115,5 +136,17 @@ sub release_parent return if ($?); local(@tmp) = (split(/ /,$_)); - &run("$vos release $tmp[$#tmp] -cell $newcell"); + push(@vrelease, "$tmp[$#tmp] -cell $newcell"); +} + + +sub do_releases +{ + local($lastv) = ""; + local(@volumes) = sort @vrelease; + while (@volumes) { + $_ = shift(@volumes); + next if ($_ eq $lastv); + system("$vos release $_"); + } } -- 2.45.2