about summary refs log tree commit diff
path: root/distributed/build-remote.pl
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2004-05-13T19·35+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2004-05-13T19·35+0000
commit25db6224544be0df483a661f5e2cc1ed595525ae (patch)
treedd497e6148b88ec797c01d2e1310a663e86281fb /distributed/build-remote.pl
parent3426d19547c889700a00e97fb62966ebd755f88b (diff)
* Load balancing. `build-remote.pl' will only execute up to a
  per-machine maximum number of parallel jobs on a remote machine.

Diffstat (limited to 'distributed/build-remote.pl')
-rwxr-xr-xdistributed/build-remote.pl36
1 files changed, 28 insertions, 8 deletions
diff --git a/distributed/build-remote.pl b/distributed/build-remote.pl
index f1a9b10f4d60..12cb272b95fa 100755
--- a/distributed/build-remote.pl
+++ b/distributed/build-remote.pl
@@ -7,9 +7,16 @@ my $localSystem = shift @ARGV;
 my $neededSystem = shift @ARGV;
 my $storeExpr = shift @ARGV;
 
+sub sendReply {
+    my $reply = shift;
+    open OUT, ">&3" or die;
+    print OUT "$reply\n";
+    close OUT;
+}
+
 # Decline if the local system can do the build.
 if ($amWilling && ($localSystem eq $neededSystem)) {
-    print "decline\n";
+    sendReply "decline";
     exit 0;
 }
 
@@ -45,11 +52,8 @@ while (<LOAD>) {
 }
 close LOAD;
 
-sub sendReply {
-    my $reply = shift;
-    open OUT, ">&3" or die;
-    print OUT "$reply\n";
-    close OUT;
+foreach my $cur (keys %machines) {
+    $curJobs{$cur} = 0 unless defined $curJobs{$cur};
 }
 
 # Find a suitable system.
@@ -58,8 +62,7 @@ my $machine;
 foreach my $cur (keys %machines) {
     if ($neededSystem eq $systemTypes{$cur}) {
         $rightType = 1;
-        if (!defined $curJobs{$cur} or
-            ($curJobs{$cur} < $maxJobs{$cur}))
+        if ($curJobs{$cur} < $maxJobs{$cur})
         {
             $machine = $cur;
             last;
@@ -86,6 +89,19 @@ close IN;
 
 print "BUILDING REMOTE: $storeExpr on $machine\n";
 
+$curJobs{$machine} = $curJobs{$machine} + 1;
+
+sub writeLoad {
+    open LOAD, "> /home/eelco/nix/distributed/current-load" or die;
+    foreach my $cur (keys %machines) {
+        print LOAD "$cur $curJobs{$cur}\n";
+    }
+    close LOAD;
+}
+
+writeLoad
+
+
 my $ssh = "ssh -i $sshKeys{$machine} -x";
 
 my $inputs = `cat inputs`;
@@ -117,3 +133,7 @@ foreach my $output (split '\n', $outputs) {
     system "rsync -a -e '$ssh' $machine:$output /nix/store";
     die "cannot rsync outputs from $machine" if ($? != 0);
 }
+
+$curJobs{$machine} = $curJobs{$machine} - 1;
+
+writeLoad