(zilch nix daemon): make options runtime-configurable

This commit is contained in:
puck 2024-10-04 15:17:26 +00:00
parent 589a0bf5cc
commit 2ed428e37d

View file

@ -2,7 +2,7 @@
;; ;;
;; Currently implements protocol 1.21, from around Nix 2.4. ;; Currently implements protocol 1.21, from around Nix 2.4.
(define-library (zilch nix daemon) (define-library (zilch nix daemon)
(import (scheme base) (scheme write) (zilch lib hash) srfi-151 (import (scheme base) (scheme write) (scheme case-lambda) (zilch lib hash) srfi-151
(zilch nix binproto) socket (zilch nix binproto) socket
(chicken format)) (chicken format))
@ -15,17 +15,27 @@
daemon-write-string daemon-read-string daemon-write-string daemon-read-string
*logger* *logger*
daemon-wop-handshake daemon-wop-add-text-to-store daemon-wop-handshake daemon-wop-set-options
daemon-wop-add-to-store-nar daemon-wop-build-paths daemon-wop-add-text-to-store daemon-wop-add-to-store-nar
daemon-wop-query-derivation-output-map) daemon-wop-build-paths daemon-wop-query-derivation-output-map)
(begin (begin
(define-record-type <daemon-link-settings>
(make-daemon-link-settings verbosity max-build-jobs use-substitutes)
daemon-link-settings?
(verbosity daemon-link-settings-verbosity set-daemon-link-settings-verbosity!)
(max-build-jobs daemon-link-settings-max-build-jobs set-daemon-link-settings-max-build-jobs!)
(use-substitutes daemon-link-settings-use-substitutes set-daemon-link-settings-use-substitutes!))
(define-record-type <daemon-link> (define-record-type <daemon-link>
(make-daemon-link in-port out-port) (internal-make-daemon-link in-port out-port 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)
(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)))
;; 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)))
@ -137,25 +147,44 @@
(daemon-write-u64 link 0) (daemon-write-u64 link 0)
(daemon-flush link) (daemon-flush link)
(daemon-read-log-events link) (daemon-read-log-events link)
(daemon-wop-set-options link))
(define daemon-wop-set-options
(case-lambda
((link)
(define settings (daemon-link-settings link))
(daemon-wop-set-options link (daemon-link-settings-verbosity settings) (daemon-link-settings-max-build-jobs settings) (daemon-link-settings-use-substitutes settings)))
((link verbosity)
(define settings (daemon-link-settings link))
(set-daemon-link-settings-verbosity! settings verbosity)
(daemon-wop-set-options link verbosity (daemon-link-settings-max-build-jobs settings) (daemon-link-settings-use-substitutes settings)))
((link verbosity max-build-jobs)
(define settings (daemon-link-settings link))
(set-daemon-link-settings-verbosity! settings verbosity)
(set-daemon-link-settings-max-build-jobs! settings max-build-jobs)
(daemon-wop-set-options link verbosity max-build-jobs (daemon-link-settings-use-substitutes settings)))
((link verbosity max-build-jobs use-substitutes)
(define settings (daemon-link-settings link))
(set-daemon-link-settings-verbosity! settings verbosity)
(set-daemon-link-settings-max-build-jobs! settings max-build-jobs)
(set-daemon-link-settings-use-substitutes! settings use-substitutes)
; Send wopSetOptions too, to adjust verbosity.
(daemon-write-u64 link 19) (daemon-write-u64 link 19)
(daemon-write-u64 link 0) ; keepFailed (daemon-write-u64 link 0) ; keepFailed
(daemon-write-u64 link 0) ; keepGoing (daemon-write-u64 link 0) ; keepGoing
(daemon-write-u64 link 0) ; tryFallback (daemon-write-u64 link 0) ; tryFallback
(daemon-write-u64 link 3) ; verbosity (lvlInfo) (daemon-write-u64 link verbosity) ; verbosity (lvlInfo)
(daemon-write-u64 link 30) ; maxBuildJobs (daemon-write-u64 link max-build-jobs) ; maxBuildJobs
(daemon-write-u64 link 0) ; maxSilentTime (daemon-write-u64 link 0) ; maxSilentTime
(daemon-write-u64 link 0) ; obsolete, useBuildHook (daemon-write-u64 link 0) ; obsolete, useBuildHook
(daemon-write-u64 link 0) ; verboseBuild (unused?) (daemon-write-u64 link 0) ; verboseBuild (unused?)
(daemon-write-u64 link 0) ; obsolete, logType (daemon-write-u64 link 0) ; obsolete, logType
(daemon-write-u64 link 0) ; obsolete, printBuildTrace (daemon-write-u64 link 0) ; obsolete, printBuildTrace
(daemon-write-u64 link 0) ; buildCores (daemon-write-u64 link 0) ; buildCores
(daemon-write-u64 link 0) ; useSubstitutes (daemon-write-u64 link (if use-substitutes 1 0)) ; useSubstitutes
(daemon-write-u64 link 0) ; settings overrides (daemon-write-u64 link 0) ; settings overrides
(daemon-flush link) (daemon-flush link)
(daemon-read-log-events link)) (daemon-read-log-events link))))
;; Request to the daemon that the paths in PATHS have to be built. ;; Request to the daemon that the paths in PATHS have to be built.
;; Each path may either be an output path, or `<drv>!<output name>`. ;; Each path may either be an output path, or `<drv>!<output name>`.