+# $Header$
+
$afsbin="/moira/bin";
$vos="$afsbin/vos";
$pts="$afsbin/pts";
$LOCK_EX=2;
$LOCK_UN=8;
+%vtypes_ATHENA_MIT_EDU =
+ ("ACTIVITY", "activity",
+ "APROJ", "aproj",
+ "AREF", "aref",
+ "CONTRIB", "contrib",
+ "COURSE", "course",
+ "HOMEDIR", "user",
+ "LEASE", "dept",
+ "PROJECT", "project",
+ "REF", "ref",
+ "SW", "sw",
+ "SYSTEM", "system",
+ "UROP", "urop",
+ );
+
# File format:
# cell server partition total used alloc
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"
+ die "Temporary status file: $afs_save exists... aborting\n"
if (-f $afs_save);
open(SRV2, ">$afs_save");
@afs_data = <SRV>;
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);
}