daemon: Add '--timeout' and '--max-silent-time'.
* nix/nix-daemon/guix-daemon.cc (GUIX_OPT_TIMEOUT) (GUIX_OPT_MAX_SILENT_TIME): New macros. * nix/nix-daemon/guix-daemon.cc (options): Add '--timeout' and '--max-silent-time'. (parse_opt): Honor them. * tests/guix-daemon.sh: Add test. * doc/guix.texi (Invoking guix-daemon): Document the options. (Common Build Options): Properly describe default timeout/max-silent-time value. Add cross-ref to "Invoking guix-daemon".
This commit is contained in:
parent
20214f7115
commit
2ca9f51ec8
|
@ -1146,6 +1146,24 @@ Allow at most @var{n} build jobs in parallel. The default value is
|
||||||
locally; instead, the daemon will offload builds (@pxref{Daemon Offload
|
locally; instead, the daemon will offload builds (@pxref{Daemon Offload
|
||||||
Setup}), or simply fail.
|
Setup}), or simply fail.
|
||||||
|
|
||||||
|
@item --max-silent-time=@var{seconds}
|
||||||
|
When the build or substitution process remains silent for more than
|
||||||
|
@var{seconds}, terminate it and report a build failure.
|
||||||
|
|
||||||
|
The default value is @code{0}, which disables the timeout.
|
||||||
|
|
||||||
|
The value specified here can be overridden by clients (@pxref{Common
|
||||||
|
Build Options, @code{--max-silent-time}}).
|
||||||
|
|
||||||
|
@item --timeout=@var{seconds}
|
||||||
|
Likewise, when the build or substitution process lasts for more than
|
||||||
|
@var{seconds}, terminate it and report a build failure.
|
||||||
|
|
||||||
|
The default value is @code{0}, which disables the timeout.
|
||||||
|
|
||||||
|
The value specified here can be overridden by clients (@pxref{Common
|
||||||
|
Build Options, @code{--timeout}}).
|
||||||
|
|
||||||
@item --rounds=@var{N}
|
@item --rounds=@var{N}
|
||||||
Build each derivation @var{n} times in a row, and raise an error if
|
Build each derivation @var{n} times in a row, and raise an error if
|
||||||
consecutive build results are not bit-for-bit identical. Note that this
|
consecutive build results are not bit-for-bit identical. Note that this
|
||||||
|
@ -4940,12 +4958,15 @@ instead of offloading builds to remote machines.
|
||||||
When the build or substitution process remains silent for more than
|
When the build or substitution process remains silent for more than
|
||||||
@var{seconds}, terminate it and report a build failure.
|
@var{seconds}, terminate it and report a build failure.
|
||||||
|
|
||||||
|
By default, the daemon's setting is honored (@pxref{Invoking
|
||||||
|
guix-daemon, @code{--max-silent-time}}).
|
||||||
|
|
||||||
@item --timeout=@var{seconds}
|
@item --timeout=@var{seconds}
|
||||||
Likewise, when the build or substitution process lasts for more than
|
Likewise, when the build or substitution process lasts for more than
|
||||||
@var{seconds}, terminate it and report a build failure.
|
@var{seconds}, terminate it and report a build failure.
|
||||||
|
|
||||||
By default there is no timeout. This behavior can be restored with
|
By default, the daemon's setting is honored (@pxref{Invoking
|
||||||
@code{--timeout=0}.
|
guix-daemon, @code{--timeout}}).
|
||||||
|
|
||||||
@item --verbosity=@var{level}
|
@item --verbosity=@var{level}
|
||||||
Use the given verbosity level. @var{level} must be an integer between 0
|
Use the given verbosity level. @var{level} must be an integer between 0
|
||||||
|
|
|
@ -81,6 +81,8 @@ builds derivations on behalf of its clients.");
|
||||||
#define GUIX_OPT_GC_KEEP_OUTPUTS 15
|
#define GUIX_OPT_GC_KEEP_OUTPUTS 15
|
||||||
#define GUIX_OPT_GC_KEEP_DERIVATIONS 16
|
#define GUIX_OPT_GC_KEEP_DERIVATIONS 16
|
||||||
#define GUIX_OPT_BUILD_ROUNDS 17
|
#define GUIX_OPT_BUILD_ROUNDS 17
|
||||||
|
#define GUIX_OPT_TIMEOUT 18
|
||||||
|
#define GUIX_OPT_MAX_SILENT_TIME 19
|
||||||
|
|
||||||
static const struct argp_option options[] =
|
static const struct argp_option options[] =
|
||||||
{
|
{
|
||||||
|
@ -91,6 +93,10 @@ static const struct argp_option options[] =
|
||||||
},
|
},
|
||||||
{ "max-jobs", 'M', n_("N"), 0,
|
{ "max-jobs", 'M', n_("N"), 0,
|
||||||
n_("allow at most N build jobs") },
|
n_("allow at most N build jobs") },
|
||||||
|
{ "timeout", GUIX_OPT_TIMEOUT, n_("SECONDS"), 0,
|
||||||
|
n_("mark builds as failed after SECONDS of activity") },
|
||||||
|
{ "max-silent-time", GUIX_OPT_MAX_SILENT_TIME, n_("SECONDS"), 0,
|
||||||
|
n_("mark builds as failed after SECONDS of silence") },
|
||||||
{ "disable-chroot", GUIX_OPT_DISABLE_CHROOT, 0, 0,
|
{ "disable-chroot", GUIX_OPT_DISABLE_CHROOT, 0, 0,
|
||||||
n_("disable chroot builds") },
|
n_("disable chroot builds") },
|
||||||
{ "chroot-directory", GUIX_OPT_CHROOT_DIR, n_("DIR"), 0,
|
{ "chroot-directory", GUIX_OPT_CHROOT_DIR, n_("DIR"), 0,
|
||||||
|
@ -245,6 +251,12 @@ parse_opt (int key, char *arg, struct argp_state *state)
|
||||||
case 'M':
|
case 'M':
|
||||||
settings.set ("build-max-jobs", arg);
|
settings.set ("build-max-jobs", arg);
|
||||||
break;
|
break;
|
||||||
|
case GUIX_OPT_TIMEOUT:
|
||||||
|
settings.set ("build-timeout", arg);
|
||||||
|
break;
|
||||||
|
case GUIX_OPT_MAX_SILENT_TIME:
|
||||||
|
settings.set ("build-max-silent-time", arg);
|
||||||
|
break;
|
||||||
case GUIX_OPT_SYSTEM:
|
case GUIX_OPT_SYSTEM:
|
||||||
settings.thisSystem = arg;
|
settings.thisSystem = arg;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -145,3 +145,39 @@ guile -c '
|
||||||
(exit
|
(exit
|
||||||
(= 42 (pk (call-with-input-file (derivation->output-path drv)
|
(= 42 (pk (call-with-input-file (derivation->output-path drv)
|
||||||
read)))))))'
|
read)))))))'
|
||||||
|
|
||||||
|
|
||||||
|
kill "$daemon_pid"
|
||||||
|
|
||||||
|
# Make sure the daemon's default 'timeout' and 'max-silent-time' settings are
|
||||||
|
# honored.
|
||||||
|
|
||||||
|
client_code='
|
||||||
|
(use-modules (guix) (gnu packages) (guix tests) (srfi srfi-34))
|
||||||
|
|
||||||
|
(with-store store
|
||||||
|
(let* ((build (add-text-to-store store "build.sh"
|
||||||
|
"while true ; do : ; done"))
|
||||||
|
(bash (add-to-store store "bash" #t "sha256"
|
||||||
|
(search-bootstrap-binary "bash"
|
||||||
|
(%current-system))))
|
||||||
|
(drv (derivation store "the-thing" bash
|
||||||
|
`("-e" ,build)
|
||||||
|
#:inputs `((,bash) (,build))
|
||||||
|
#:env-vars `(("x" . ,(random-text))))))
|
||||||
|
(exit (guard (c ((nix-protocol-error? c)
|
||||||
|
(->bool
|
||||||
|
(string-contains (pk (nix-protocol-error-message c))
|
||||||
|
"failed"))))
|
||||||
|
(build-derivations store (list drv))
|
||||||
|
#f))))'
|
||||||
|
|
||||||
|
|
||||||
|
for option in --max-silent-time=1 --timeout=1
|
||||||
|
do
|
||||||
|
guix-daemon --listen="$socket" --disable-chroot "$option" &
|
||||||
|
daemon_pid=$!
|
||||||
|
|
||||||
|
GUIX_DAEMON_SOCKET="$socket" guile -c "$client_code"
|
||||||
|
kill "$daemon_pid"
|
||||||
|
done
|
||||||
|
|
Loading…
Reference in New Issue