From c251273ee708e28abf5b318dbc20752df191fca9 Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Fri, 4 Oct 2024 16:04:58 +0000 Subject: [PATCH] (zilch nix daemon): track daemon version --- core/src/nix/daemon.sld | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/core/src/nix/daemon.sld b/core/src/nix/daemon.sld index bc65fa9..aca14f7 100644 --- a/core/src/nix/daemon.sld +++ b/core/src/nix/daemon.sld @@ -9,6 +9,7 @@ (export make-daemon-link daemon-link? daemon-link-in-port daemon-link-out-port + daemon-link-daemon-version daemon-write-u64 daemon-read-u64 daemon-write-bytevector daemon-read-bytevector @@ -28,14 +29,16 @@ (use-substitutes daemon-link-settings-use-substitutes set-daemon-link-settings-use-substitutes!)) (define-record-type - (internal-make-daemon-link in-port out-port settings) + (internal-make-daemon-link in-port out-port protocol-minor daemon-version settings) daemon-link? (in-port daemon-link-in-port) (out-port daemon-link-out-port) + (protocol-minor daemon-link-protocol-minor set-daemon-link-protocol-minor!) + (daemon-version daemon-link-daemon-version set-daemon-link-daemon-version!) (settings daemon-link-settings)) (define (make-daemon-link in-port out-port) - (internal-make-daemon-link in-port out-port (make-daemon-link-settings 3 32 #t))) + (internal-make-daemon-link in-port out-port #f #f (make-daemon-link-settings 3 32 #t))) ;; Equivalent to port-{read,write}-{u64,bytevector,string} but on the instead. (define (daemon-write-u64 link val) (port-write-u64 val (daemon-link-out-port link))) @@ -132,6 +135,21 @@ (if (> trace-count 0) (read-trace traces 0 trace-count)) `(error ,type ,level ,msg ,traces)))) + ; Pre-daemon-version protocol versions. + (define protocol-versions + '((#x15 . "Nix 2.3") + (#x16 . "Nix 2.4pre") + (#x17 . "Nix 2.4pre") + (#x18 . "Nix 2.4pre") + (#x19 . "Nix 2.4pre") + (#x1a . "Nix 2.4pre") + (#x1b . "Nix 2.4pre") + (#x1c . "Nix 2.4pre") + (#x1d . "Nix 2.4pre") + (#x1e . "Nix 2.4pre") + (#x1f . "Nix 2.4pre") + (#x1f . "Nix 2.4pre") + (#x20 . "Nix 2.4-2.6"))) ;; Send a Nix worker protocol handshake. (define (daemon-wop-handshake link) (daemon-write-u64 link #x6e697863) @@ -140,12 +158,19 @@ (define protocol-version (daemon-read-u64 link)) (define protocol-major (bitwise-and (arithmetic-shift protocol-version -8) #xFF)) (define protocol-minor (bitwise-and protocol-version #xFF)) + (set-daemon-link-protocol-minor! link protocol-minor) (unless (= worker-magic #x6478696f) (error "handshake: received wrong WORKER_MAGIC_2" worker-magic)) (unless (= protocol-major 1) (error "handshake: invalid major version protocol" protocol-major)) - (daemon-write-u64 link #x115) + (daemon-write-u64 link #x121) (daemon-write-u64 link 0) ; cpu affinity (daemon-write-u64 link 0) (daemon-flush link) + (define daemon-version (string-append (if (assoc protocol-minor protocol-versions) (cdr (assoc protocol-minor protocol-versions)) "pre-2.3") " (protocol 1." (number->string protocol-minor) ")")) + (when (>= protocol-minor #x21) + (set! daemon-version (daemon-read-string link))) + (when (< protocol-minor #x20) + (error (string-append "Nix daemon version " daemon-version " is too old!"))) + (set-daemon-link-daemon-version! link daemon-version) (daemon-read-log-events link) (daemon-wop-set-options link))