3 # oldname oldcell oldtype oldltype oldpath \
4 # newname newcell newtype newltype newpath
6 require "/moira/bin/afs_utils.pl";
8 die "$0: Incorrect number of arguments\n" if (@ARGV != 10);
10 ($oldname, $oldcell, $oldtype, $oldltype, $oldpath,
11 $newname, $newcell, $newtype, $newltype, $newpath) =
14 # Modify the paths, as only the read-write paths are used.
15 $oldpath =~ s:^/afs/([^.]):/afs/.\1:; # use read-write path
16 $newpath =~ s:^/afs/([^.]):/afs/.\1:; # use read-write path
18 die "Cannot change cells\n" if ($oldcell ne $newcell);
19 die "Can only handle AFS and ERR lockers\n"
20 if (($oldtype !~ /^(AFS|ERR)$/) ||
21 ($newtype !~ /^(AFS|ERR)$/));
24 ($c = $newcell) =~ s/\./_/g;
25 $vtype = eval "\$vtypes_$c{$newltype}";
26 die "Cannot handle $newltype volumes\n" unless $vtype;
27 $newvname = $vtype . "." . $newname;
29 if ($oldtype eq "ERR") {
30 # Lookup volume type for old locker
31 ($c = $oldcell) =~ s/\./_/g;
32 $vtype = eval "\$vtypes_$c{$oldltype}";
33 die "Cannot handle $oldltype volumes\n" unless $vtype;
34 $oldvname = $vtype . "." . $oldname;
35 $oldvname =~ s/[^-A-Za-z0-9_.]//g; # strip out illegal characters
37 if (&check("X" . $oldvname) && &check("Xn." . $oldvname)) {
38 print STDERR "Cannot locate deactivated locker $oldname\n";
39 exit(1) if ($newtype eq "AFS");
42 $newvname = "n." . $newvname if ($oldvname =~ /^Xn\./);
46 open(FS, "$fs lsm $oldpath|");
49 die "Unable to locate locker $oldname\n" if ($?);
50 ($oldvname = $_) =~ s/^.* volume '.(.*)'$/\1/;
51 die "Unusual mountpoint encountered: $oldpath\n" if ($oldvname =~ /[ :]/);
52 $newvname = "n." . $newvname if ($oldvname =~ /^n\./);
55 $newvname = "X" . $newvname if ($newtype eq "ERR");
56 $newvname =~ s/[^-A-Za-z0-9_.]//g; # strip out illegal characters
58 &run("$vos rename $oldvname $newvname -cell $newcell")
59 if ($oldvname ne $newvname);
60 &run("$vos remove $oldbackup $oldvname.backup -cell $oldcell")
61 if ($oldbackup && $newvname =~ /^n\./);
63 if ($oldtype eq "AFS") {
64 &run("$fs rmm $oldpath");
65 &release_parent($oldpath)
66 if ($newtype ne "AFS" || $oldpath ne $newpath);
68 if ($newtype eq "AFS") {
69 &run("$fs mkm $newpath $newvname");
70 &release_parent($newpath);
79 system("@cmd >/dev/null");
80 die "@cmd: FAILED\n" if ($?);
90 open (VOS, "$vos listvldb -name $vname -cell $oldcell 2>/dev/null|");
96 @a = split(/\s+/, $vos[$[ + 4]);
97 if (($_ = pop @a) eq "valid") {
100 ($oldbackup=$_) =~ s/^.*server (.*) partition (.*) RW .*$/\1 \2/
112 open(FS, "$fs lv $p|") || &fatal("Can't get information about $p");
117 local(@tmp) = (split(/ /,$_));
118 &run("$vos release $tmp[$#tmp] -cell $newcell");