diff --git a/src/libstore/worker-protocol.hh b/src/libstore/worker-protocol.hh index 9daeb46ad..996e1d253 100644 --- a/src/libstore/worker-protocol.hh +++ b/src/libstore/worker-protocol.hh @@ -6,7 +6,7 @@ namespace nix { #define WORKER_MAGIC_1 0x6e697863 #define WORKER_MAGIC_2 0x6478696f -#define PROTOCOL_VERSION 0x113 +#define PROTOCOL_VERSION 0x114 #define GET_PROTOCOL_MAJOR(x) ((x) & 0xff00) #define GET_PROTOCOL_MINOR(x) ((x) & 0x00ff) diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc index 65c88562c..9f1d619e5 100644 --- a/src/nix-daemon/nix-daemon.cc +++ b/src/nix-daemon/nix-daemon.cc @@ -84,6 +84,10 @@ struct TunnelLogger : public Logger Sync state_; + unsigned int clientVersion; + + TunnelLogger(unsigned int clientVersion) : clientVersion(clientVersion) { } + void enqueueMsg(const std::string & s) { auto state(state_.lock()); @@ -148,6 +152,7 @@ struct TunnelLogger : public Logger void startActivity(ActivityId act, ActivityType type, const std::string & s, const Fields & fields, ActivityId parent) override { + if (GET_PROTOCOL_MINOR(clientVersion) < 20) return; StringSink buf; buf << STDERR_START_ACTIVITY << act << type << s << fields << parent; enqueueMsg(*buf.s); @@ -155,6 +160,7 @@ struct TunnelLogger : public Logger void stopActivity(ActivityId act) override { + if (GET_PROTOCOL_MINOR(clientVersion) < 20) return; StringSink buf; buf << STDERR_STOP_ACTIVITY << act; enqueueMsg(*buf.s); @@ -162,6 +168,7 @@ struct TunnelLogger : public Logger void result(ActivityId act, ResultType type, const Fields & fields) override { + if (GET_PROTOCOL_MINOR(clientVersion) < 20) return; StringSink buf; buf << STDERR_RESULT << act << type << fields; enqueueMsg(*buf.s); @@ -710,17 +717,6 @@ static void processConnection(bool trusted) { MonitorFdHup monitor(from.fd); - auto tunnelLogger = new TunnelLogger(); - auto prevLogger = nix::logger; - logger = tunnelLogger; - - unsigned int opCount = 0; - - Finally finally([&]() { - _isInterrupted = false; - prevLogger->log(lvlDebug, fmt("%d operations", opCount)); - }); - /* Exchange the greeting. */ unsigned int magic = readInt(from); if (magic != WORKER_MAGIC_1) throw Error("protocol mismatch"); @@ -731,6 +727,17 @@ static void processConnection(bool trusted) if (clientVersion < 0x10a) throw Error("the Nix client version is too old"); + auto tunnelLogger = new TunnelLogger(clientVersion); + auto prevLogger = nix::logger; + logger = tunnelLogger; + + unsigned int opCount = 0; + + Finally finally([&]() { + _isInterrupted = false; + prevLogger->log(lvlDebug, fmt("%d operations", opCount)); + }); + if (GET_PROTOCOL_MINOR(clientVersion) >= 14 && readInt(from)) setAffinityTo(readInt(from));