1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-06 21:41:48 +02:00

Add an option to limit the log output of builders

This is mostly useful for Hydra to deal with builders that get stuck
in an infinite loop writing data to stdout/stderr.
This commit is contained in:
Eelco Dolstra 2013-09-02 11:58:18 +02:00
parent afc6c1bad6
commit efe4289464
4 changed files with 34 additions and 0 deletions

View file

@ -813,6 +813,9 @@ private:
BZFILE * bzLogFile;
AutoCloseFD fdLogFile;
/* Number of bytes received from the builder's stdout/stderr. */
unsigned long logSize;
/* Pipe for the builder's standard output/error. */
Pipe builderOut;
@ -2403,6 +2406,8 @@ string drvsLogDir = "drvs";
Path DerivationGoal::openLogFile()
{
logSize = 0;
if (!settings.keepLog) return "";
string baseName = baseNameOf(drvPath);
@ -2478,6 +2483,14 @@ void DerivationGoal::handleChildOutput(int fd, const string & data)
if ((hook && fd == hook->builderOut.readSide) ||
(!hook && fd == builderOut.readSide))
{
logSize += data.size();
if (settings.maxLogSize && logSize > settings.maxLogSize) {
printMsg(lvlError,
format("%1% killed after writing more than %2% bytes of log output")
% getName() % settings.maxLogSize);
cancel(true); // not really a timeout, but close enough
return;
}
if (verbosity >= settings.buildVerbosity)
writeToStderr(data);
if (bzLogFile) {