build-remote.pl: Enforce timeouts locally
Don't pass --timeout / --max-silent-time to the remote builder. Instead, let the local Nix process terminate the build if it exceeds a timeout. The remote builder will be killed as a side-effect. This gives better error reporting (since the timeout message from the remote side wasn't properly propagated) and handles non-Nix problems like SSH hangs.
This commit is contained in:
		
							parent
							
								
									e93acab852
								
							
						
					
					
						commit
						69b8f9980f
					
				
					 2 changed files with 3 additions and 6 deletions
				
			
		|  | @ -46,7 +46,7 @@ sub all { $_ || return 0 for @_; 1 } | ||||||
| # Initialisation. | # Initialisation. | ||||||
| my $loadIncreased = 0; | my $loadIncreased = 0; | ||||||
| 
 | 
 | ||||||
| my ($localSystem, $maxSilentTime, $printBuildTrace, $buildTimeout) = @ARGV; | my ($localSystem, $printBuildTrace) = @ARGV; | ||||||
| 
 | 
 | ||||||
| my $currentLoad = $ENV{"NIX_CURRENT_LOAD"}; | my $currentLoad = $ENV{"NIX_CURRENT_LOAD"}; | ||||||
| my $conf = $ENV{"NIX_REMOTE_SYSTEMS"}; | my $conf = $ENV{"NIX_REMOTE_SYSTEMS"}; | ||||||
|  | @ -258,8 +258,7 @@ close UPLOADLOCK; | ||||||
| 
 | 
 | ||||||
| # Perform the build. | # Perform the build. | ||||||
| my $buildFlags = | my $buildFlags = | ||||||
|     "--max-silent-time $maxSilentTime --option build-timeout $buildTimeout" |     " --fallback --add-root $rootsDir/\$PPID.out --quiet" | ||||||
|     . " --fallback --add-root $rootsDir/\$PPID.out --quiet" |  | ||||||
|     . " --option build-keep-log false"; |     . " --option build-keep-log false"; | ||||||
| 
 | 
 | ||||||
| # We let the remote side kill its process group when the connection is | # We let the remote side kill its process group when the connection is | ||||||
|  |  | ||||||
|  | @ -695,9 +695,7 @@ HookInstance::HookInstance() | ||||||
|                 throw SysError("dupping builder's stdout/stderr"); |                 throw SysError("dupping builder's stdout/stderr"); | ||||||
| 
 | 
 | ||||||
|             execl(buildHook.c_str(), buildHook.c_str(), settings.thisSystem.c_str(), |             execl(buildHook.c_str(), buildHook.c_str(), settings.thisSystem.c_str(), | ||||||
|                 (format("%1%") % settings.maxSilentTime).str().c_str(), |  | ||||||
|                 (format("%1%") % settings.printBuildTrace).str().c_str(), |                 (format("%1%") % settings.printBuildTrace).str().c_str(), | ||||||
|                 (format("%1%") % settings.buildTimeout).str().c_str(), |  | ||||||
|                 NULL); |                 NULL); | ||||||
| 
 | 
 | ||||||
|             throw SysError(format("executing `%1%'") % buildHook); |             throw SysError(format("executing `%1%'") % buildHook); | ||||||
|  | @ -1646,7 +1644,7 @@ HookReply DerivationGoal::tryBuildHook() | ||||||
|     set<int> fds; |     set<int> fds; | ||||||
|     fds.insert(hook->fromHook.readSide); |     fds.insert(hook->fromHook.readSide); | ||||||
|     fds.insert(hook->builderOut.readSide); |     fds.insert(hook->builderOut.readSide); | ||||||
|     worker.childStarted(shared_from_this(), hook->pid, fds, false, false); |     worker.childStarted(shared_from_this(), hook->pid, fds, false, true); | ||||||
| 
 | 
 | ||||||
|     if (settings.printBuildTrace) |     if (settings.printBuildTrace) | ||||||
|         printMsg(lvlError, format("@ build-started %1% %2% %3% %4%") |         printMsg(lvlError, format("@ build-started %1% %2% %3% %4%") | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue