]> andersk Git - moira.git/blobdiff - incremental/afs_utils.pl
Remove `delete_user_by_uid' since it's never been used in any logs we have,
[moira.git] / incremental / afs_utils.pl
index c1fd793c2fc3da3228bf88cb567952af71a09e01..bdd5a2d2f4753930aa3385a6cba9f93ac05dbdb8 100644 (file)
@@ -1,13 +1,33 @@
+# $Header$
+
+# kludge kludge kludge
+sub __STDC__ {0;}
+require "fcntl.ph";
+
 $afsbin="/moira/bin";
 $vos="$afsbin/vos";
 $pts="$afsbin/pts";
 $fs="$afsbin/fs";
+$zwrite="/usr/athena/bin/zwrite";
 
 $afs_data="/moira/afs/afs_data";
 $afs_save="$afs_data.tmp";
 
-$LOCK_EX=2;
-$LOCK_UN=8;
+%vtypes_ATHENA_MIT_EDU =
+    ("ACTIVITY", "activity",
+     "APROJ", "aproj",
+     "AREF", "aref",
+     "CONTRIB", "contrib",
+     "COURSE", "course",
+     "HOMEDIR", "user",
+     "LEASE", "dept",
+     "ORG", "org",
+     "PROJECT", "project",
+     "REF", "ref",
+     "SW", "sw",
+     "SYSTEM", "system",
+     "UROP", "urop",
+     );
 
 # File format:
 #    cell server partition total used alloc
@@ -23,12 +43,18 @@ $LOCK_UN=8;
 # 8. Close the data file.
 
 
+$flock_t="ssllllllll";
+
 sub afs_lock
 {
     open(SRV,"+<$afs_data") || die "Unable to open $afs_data\n";
     select((select(SRV), $|=1)[$[]);
-    flock(SRV, $LOCK_EX) || die "Unable to lock $afs_data\n";
-    die "Temporary status file: $afs_save exists... abortin\n"
+    $flkarr[0]=&F_WRLCK;
+    $flkarr[1]=$flkarr[2]=$flkarr[3]=$flkarr[4]=$flkarr[5]=$flkarr[6]=0;
+    $flkarr[7]=$flkarr[8]=$flkarr[9]=0;
+    $flk=pack($flock_t,@flkarr);
+    fcntl(SRV, &F_SETLKW, $flk) || die "Unable to lock $afs_data:$!\n";
+    die "Temporary status file: $afs_save exists... aborting\n"
        if (-f $afs_save);
     open(SRV2, ">$afs_save");
     @afs_data = <SRV>;
@@ -49,35 +75,30 @@ sub afs_unlock
 #    max[ (2*free space) - (unused quota) ]
 #    = max(2*total - usage - alloc)
 #
-# Note: This routine does not actually adjust the quota; the caller
-# should use afs_quota_adj();
+# Note: This routine does not actually adjust the quota;
+# the calling routine should use afs_quota_adj();
 
 sub afs_find
 {
-    local($cell,$type,$quota) = @_;
-    local($j);
-    local(@max);
+    local($cell,$type,$quota,@except) = @_;
+    local($j,$k);
+    local(@max) = ("", "", -10000000);
 
     &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]);
     }
 
-#    truncate(SRV, 0);
-#    for (@afs_data) {
-#      ($a, $asrv, $apart, $t, $total, $used, $alloc) = split(/\s+/,$_);
-#      if ($a eq $cell && $asrv eq $max[0] && $apart eq $max[1]) {
-#          $alloc += $quota;
-#          $_ = join(' ',$a,$asrv,$apart,$t, $total,$used,$alloc);
-#      }
-#      print SRV "$_\n";
-#    }
-
     &afs_unlock;
     return(@max);
 }
@@ -87,7 +108,8 @@ sub afs_find
 #
 sub afs_quota_adj
 {
-    local($cell,$asrv,$apart,$adj) = @_;
+    local($cell,$asrv,$apart,$adj,$dusage) = @_;
+    local($found) = 0;
 
     &afs_lock;
     chop(@afs_data);
@@ -95,75 +117,13 @@ sub afs_quota_adj
     for (@afs_data) {
        local ($c, $as, $ap, $t, $total, $used, $alloc) = split(/\s+/,$_);
        if ($c eq $cell && $as eq $asrv && $ap eq $apart) {
+           $dusage = $used unless ($dusage);
            $alloc += $adj;
-           $_ = join(' ',$c,$asrv,$apart,$t,$total,$used,$alloc);
+           $_ = join(' ',$c,$asrv,$apart,$t,$total,$dusage,$alloc);
+           $found = 1;
        }
        print SRV "$_\n";
     }
     &afs_unlock;
-}
-
-
-#
-# Nightly reaper - Recompute all usages/allocations.
-#
-sub afs_nightly
-{
-    local ($key, @vos, %used,%alloc,%total, %a);
-    local ($c,$as,$ap,$total,$used,$alloc);
-
-    &afs_lock;
-    truncate(SRV, 0);
-    for (@afs_data) {
-       $as = $ap = 0;
-       if ($_ !~ /^\#/) {
-           ($c,$as,$ap,$t,$total,$used,$alloc) = split(/\s+/,$_);
-           ($as) = gethostbyname($as);
-           $c =~ tr/a-z/A-Z/;
-           $as =~ tr/a-z/A-Z/;
-           $ap =~ s:^([^/]):/vicep\1:;
-       }
-       if (!$as || !$ap) {
-           print SRV "$_\n"; next;
-       }
-
-       $key = "$c $as $ap";
-       $total{$key} = $used{$key} = $alloc{$key} = 0;
-       $type{$key} = $t;
-
-       open(VOS,"$vos partinfo $as $ap -cell $c -noauth|");
-       chop(@vos = <VOS>);
-       close(VOS);
-       next if ($?);
-       @vos = split(/\s+/,$vos[0]);
-       $total{$key} = pop(@vos);
-       $used{$key} = $total{$key}-$vos[5];
-
-       open(VOS,"$vos listvol $as $ap -cell $c -long -noauth|");
-       @vos = <VOS>;
-       close(VOS);
-       next if ($?);
-
-       while ($_ = shift(@vos)) {
-           next unless /On-line/;
-           local($vn,$id) = split(/\s+/, $_);
-           shift(@vos);
-           local($p,$p,$p) = split(/\s+/, shift(@vos));
-           local($q,$q,$q) = split(/\s+/, shift(@vos));
-           if ($id==$p || !$a{$p}) {
-               $a{$p} = $q;
-           }
-       }
-       for $p (keys %a) { $alloc{$key} += $a{$p}; delete $a{$p}; }
-    }
-
-    for (sort keys %total) {
-       print SRV "$_ $type{$_} $total{$_} $used{$_} $alloc{$_}\n";
-       delete $type{$_};
-       delete $total{$_};
-       delete $used{$_};
-       delete $alloc{$_};
-    }
-
-    &afs_unlock;
+    return($found);
 }
This page took 0.040524 seconds and 4 git commands to generate.