diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-05-09T15·17+0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-05-09T15·17+0200 |
commit | 69b8f9980f39c14a59365a188b300a34d625a2cd (patch) | |
tree | e818b6d1e2777f344e3ad48e088f9289ef5b221b | |
parent | e93acab85298cf3433d1938828e7772e8faa55dc (diff) |
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.
-rwxr-xr-x | scripts/build-remote.pl.in | 5 | ||||
-rw-r--r-- | src/libstore/build.cc | 4 |
2 files changed, 3 insertions, 6 deletions
diff --git a/scripts/build-remote.pl.in b/scripts/build-remote.pl.in index dddd9e959e27..bdb6f24669aa 100755 --- a/scripts/build-remote.pl.in +++ b/scripts/build-remote.pl.in @@ -46,7 +46,7 @@ sub all { $_ || return 0 for @_; 1 } # Initialisation. my $loadIncreased = 0; -my ($localSystem, $maxSilentTime, $printBuildTrace, $buildTimeout) = @ARGV; +my ($localSystem, $printBuildTrace) = @ARGV; my $currentLoad = $ENV{"NIX_CURRENT_LOAD"}; my $conf = $ENV{"NIX_REMOTE_SYSTEMS"}; @@ -258,8 +258,7 @@ close UPLOADLOCK; # Perform the build. 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"; # We let the remote side kill its process group when the connection is diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 3f595e34fef8..e1aa0681cf6f 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -695,9 +695,7 @@ HookInstance::HookInstance() throw SysError("dupping builder's stdout/stderr"); 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.buildTimeout).str().c_str(), NULL); throw SysError(format("executing `%1%'") % buildHook); @@ -1646,7 +1644,7 @@ HookReply DerivationGoal::tryBuildHook() set<int> fds; fds.insert(hook->fromHook.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) printMsg(lvlError, format("@ build-started %1% %2% %3% %4%") |