* When using build hooks, for any nix-store -r build operation, it is
necessary that at least one build hook doesn't return "postpone",
  otherwise nix-store will barf ("waiting for a build slot, yet there
  are no running children").  So inform the build hook when this is
  the case, so that it can start a build even when that would exceed
  the maximum load on a machine.
			
			
This commit is contained in:
		
							parent
							
								
									5dfba0b4db
								
							
						
					
					
						commit
						909fbb9de1
					
				
					 2 changed files with 18 additions and 7 deletions
				
			
		|  | @ -23,10 +23,8 @@ use English '-no_match_vars'; | |||
| 
 | ||||
| my $loadIncreased = 0; | ||||
| 
 | ||||
| my $amWilling = shift @ARGV; | ||||
| my $localSystem = shift @ARGV; | ||||
| my $neededSystem = shift @ARGV; | ||||
| my $drvPath = shift @ARGV; | ||||
| my ($amWilling, $localSystem, $neededSystem, $drvPath, $mustRun) = @ARGV; | ||||
| $mustRun = 0 unless defined $mustRun; | ||||
| 
 | ||||
| sub sendReply { | ||||
|     my $reply = shift; | ||||
|  | @ -91,13 +89,15 @@ LOOP: foreach my $cur (@machines) { | |||
|         # We have a machine of the right type.  Try to get a lock on | ||||
|         # one of the machine's lock files. | ||||
|         my $slot = 0; | ||||
|         while ($slot < $cur->{maxJobs}) { | ||||
|         while ($slot < $cur->{maxJobs} || $mustRun) { | ||||
|             my $slotLock = "$currentLoad/" . $cur->{systemType} . "-" . $cur->{hostName} . "-$slot"; | ||||
|             open SLOTLOCK, ">>$slotLock" or die; | ||||
|             if (flock(SLOTLOCK, LOCK_EX | LOCK_NB)) { | ||||
|                 print STDERR "warning: exceeding maximum load on " . $cur->{systemType} . "\n" | ||||
|                     if $slot >= $cur->{maxJobs}; | ||||
|                 $machine = $cur; | ||||
|                 last LOOP; | ||||
|             }                 | ||||
|             } | ||||
|             close SLOTLOCK; | ||||
|             $slot++; | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue