From 1abda8e17311fbfc27b751b90aff4f691f496b0f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 6 Oct 2015 17:33:30 +0200 Subject: [PATCH] nix-store --serve: Implement log size limit --- src/libstore/build.cc | 3 ++- src/libstore/store-api.hh | 3 ++- src/nix-store/nix-store.cc | 4 +++- src/nix-store/serve-protocol.hh | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 70278a878..3adad662d 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -2854,7 +2854,8 @@ void DerivationGoal::handleChildOutput(int fd, const string & data) printMsg(lvlError, format("%1% killed after writing more than %2% bytes of log output") % getName() % settings.maxLogSize); - timedOut(); // not really a timeout, but close enough + killChild(); + done(BuildResult::LogLimitExceeded); return; } if (verbosity >= settings.buildVerbosity) diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh index 235017503..485209d7a 100644 --- a/src/libstore/store-api.hh +++ b/src/libstore/store-api.hh @@ -112,7 +112,8 @@ struct BuildResult CachedFailure, TimedOut, MiscFailure, - DependencyFailed + DependencyFailed, + LogLimitExceeded, } status = MiscFailure; std::string errorMsg; //time_t startTime = 0, stopTime = 0; diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc index d541b7b7d..89518bfb1 100644 --- a/src/nix-store/nix-store.cc +++ b/src/nix-store/nix-store.cc @@ -853,7 +853,7 @@ static void opServe(Strings opFlags, Strings opArgs) if (magic != SERVE_MAGIC_1) throw Error("protocol mismatch"); out << SERVE_MAGIC_2 << SERVE_PROTOCOL_VERSION; out.flush(); - readInt(in); // Client version, unused for now + unsigned int clientVersion = readInt(in); auto getBuildSettings = [&]() { // FIXME: changing options here doesn't work if we're @@ -863,6 +863,8 @@ static void opServe(Strings opFlags, Strings opArgs) settings.useSubstitutes = false; settings.maxSilentTime = readInt(in); settings.buildTimeout = readInt(in); + if (GET_PROTOCOL_MINOR(clientVersion) >= 2) + settings.maxLogSize = readInt(in); }; while (true) { diff --git a/src/nix-store/serve-protocol.hh b/src/nix-store/serve-protocol.hh index f7f151d46..c4e2a3703 100644 --- a/src/nix-store/serve-protocol.hh +++ b/src/nix-store/serve-protocol.hh @@ -5,7 +5,7 @@ namespace nix { #define SERVE_MAGIC_1 0x390c9deb #define SERVE_MAGIC_2 0x5452eecb -#define SERVE_PROTOCOL_VERSION 0x201 +#define SERVE_PROTOCOL_VERSION 0x202 #define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00) #define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff)