(zilch nix daemon): track daemon version
This commit is contained in:
parent
f8977f9f8b
commit
c251273ee7
1 changed files with 28 additions and 3 deletions
|
|
@ -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))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue