]> andersk Git - moira.git/commitdiff
If a problem is encountered trying to create a volume on a server, fallback
authorprobe <probe>
Fri, 29 Jan 1993 16:10:04 +0000 (16:10 +0000)
committerprobe <probe>
Fri, 29 Jan 1993 16:10:04 +0000 (16:10 +0000)
to trying the next best server.

incremental/afs_create.pl
incremental/afs_utils.pl

index e5a33f851c740d7b3bbccbf227ffec335471ec51..7a543cef25d08fdd24dfaf358c606d29742fbbab 100644 (file)
@@ -21,13 +21,15 @@ die "Cannot create $type volumes in $cell\n" unless $vtype;
 $vname = $vtype . "." . $locker;
 $vname =~ s/[^-A-Za-z0-9_.]//g;                # strip out illegal characters
 
-# Find free space
-($asrv,$apart) = &afs_find($cell,$type,$quota);
-die "Unable to find space to create $vname in $cell\n" unless ($asrv&&$apart);
-
-# Create volume
-system("$vos create $asrv $apart $vname -cell $cell >/dev/null") &&
-    &fatal("Unable to create $vname in $cell");
+# Find free space/Create volume
+foreach $tries (1..3) {
+    ($asrv,$apart) = &afs_find($cell,$type,$quota,@except);
+    die "Unable to find space to create $vname in $cell\n" unless ($asrv&&$apart);
+    $code = system("$vos create $asrv $apart $vname -cell $cell >/dev/null");
+    push(@except, $asrv);
+    next if ($code);
+}
+&fatal("Unable to create $vname in $cell") if ($code); # Too many create errors
 push(@clean, "$vos remove $asrv $apart $vname -cell $cell >/dev/null");
 
 # Create mountpoint and set quota
index 1c97ecd173a0863e45d64ebe5468d603dffe2691..ba1f8a14e949d39fc91843dcfa51ad75c12e81a8 100644 (file)
@@ -68,16 +68,20 @@ sub afs_unlock
 
 sub afs_find
 {
-    local($cell,$type,$quota) = @_;
-    local($j);
+    local($cell,$type,$quota,@except) = @_;
+    local($j,$k);
     local(@max) = '';
 
     &afs_lock;
     chop(@afs_data);
 
+  sloop:
     for (@afs_data) {
        local ($a, $asrv, $apart, $t, $total, $used, $alloc) = split(/\s+/,$_);
        next if ($a ne $cell || !$total || $type !~ /$t/);
+       for $j (@except) {
+           next sloop if ($j eq $asrv);
+       }
        $alloc = $used if ($alloc < $used);
        $j = 2*$total - $used - $alloc;
        @max = ($asrv,$apart,$j) if (! @max || $j > $max[2]);
This page took 0.107541 seconds and 5 git commands to generate.