(zilch nix daemon): track daemon version

This commit is contained in:
puck 2024-10-04 16:04:58 +00:00
parent f8977f9f8b
commit c251273ee7

View file

@ -9,6 +9,7 @@
(export (export
<daemon-link> make-daemon-link daemon-link? <daemon-link> make-daemon-link daemon-link?
daemon-link-in-port daemon-link-out-port daemon-link-in-port daemon-link-out-port
daemon-link-daemon-version
daemon-write-u64 daemon-read-u64 daemon-write-u64 daemon-read-u64
daemon-write-bytevector daemon-read-bytevector daemon-write-bytevector daemon-read-bytevector
@ -28,14 +29,16 @@
(use-substitutes daemon-link-settings-use-substitutes set-daemon-link-settings-use-substitutes!)) (use-substitutes daemon-link-settings-use-substitutes set-daemon-link-settings-use-substitutes!))
(define-record-type <daemon-link> (define-record-type <daemon-link>
(internal-make-daemon-link in-port out-port settings) (internal-make-daemon-link in-port out-port protocol-minor daemon-version settings)
daemon-link? daemon-link?
(in-port daemon-link-in-port) (in-port daemon-link-in-port)
(out-port daemon-link-out-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)) (settings daemon-link-settings))
(define (make-daemon-link in-port out-port) (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 <daemon-link> instead. ;; Equivalent to port-{read,write}-{u64,bytevector,string} but on the <daemon-link> instead.
(define (daemon-write-u64 link val) (port-write-u64 val (daemon-link-out-port link))) (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)) (if (> trace-count 0) (read-trace traces 0 trace-count))
`(error ,type ,level ,msg ,traces)))) `(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. ;; Send a Nix worker protocol handshake.
(define (daemon-wop-handshake link) (define (daemon-wop-handshake link)
(daemon-write-u64 link #x6e697863) (daemon-write-u64 link #x6e697863)
@ -140,12 +158,19 @@
(define protocol-version (daemon-read-u64 link)) (define protocol-version (daemon-read-u64 link))
(define protocol-major (bitwise-and (arithmetic-shift protocol-version -8) #xFF)) (define protocol-major (bitwise-and (arithmetic-shift protocol-version -8) #xFF))
(define protocol-minor (bitwise-and protocol-version #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 (= worker-magic #x6478696f) (error "handshake: received wrong WORKER_MAGIC_2" worker-magic))
(unless (= protocol-major 1) (error "handshake: invalid major version protocol" protocol-major)) (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) ; cpu affinity
(daemon-write-u64 link 0) (daemon-write-u64 link 0)
(daemon-flush link) (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-read-log-events link)
(daemon-wop-set-options link)) (daemon-wop-set-options link))