]> andersk Git - moira.git/commitdiff
1. Remove the backup volume before the volume name changes (if n.<volume>)
authorprobe <probe>
Wed, 2 Nov 1994 13:44:24 +0000 (13:44 +0000)
committerprobe <probe>
Wed, 2 Nov 1994 13:44:24 +0000 (13:44 +0000)
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

index 026cdfc662eeba27bd0a05c96709f5cd9852b335..bac85bda506a4641e4d8803910d0b7b4f1c20b2f 100644 (file)
@@ -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 $_");
+    }
 }
This page took 0.248827 seconds and 5 git commands to generate.