diff options
author | Janne Heß <janne@hess.ooo> | 2022-02-27 17:57:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-27 17:57:57 +0100 |
commit | 5ec0477dfc9ee76d935cc77e78fd4861a97593b9 (patch) | |
tree | f1095fbf8b2b38a6c90af983670193b2d5005533 /nixos | |
parent | 623df06eb2a9a3dffc8649fc1c43e58b689091cb (diff) | |
parent | b550b4b6f8413c086a1ec4235e174cda82538e73 (diff) | |
download | nixlib-5ec0477dfc9ee76d935cc77e78fd4861a97593b9.tar nixlib-5ec0477dfc9ee76d935cc77e78fd4861a97593b9.tar.gz nixlib-5ec0477dfc9ee76d935cc77e78fd4861a97593b9.tar.bz2 nixlib-5ec0477dfc9ee76d935cc77e78fd4861a97593b9.tar.lz nixlib-5ec0477dfc9ee76d935cc77e78fd4861a97593b9.tar.xz nixlib-5ec0477dfc9ee76d935cc77e78fd4861a97593b9.tar.zst nixlib-5ec0477dfc9ee76d935cc77e78fd4861a97593b9.zip |
Merge pull request #161059 from hercules-ci/fix-nix-daemon-socket-availability
nixos/nix-daemon: Ensure continued availability of daemon socket
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/services/misc/nix-daemon.nix | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/nixos/modules/services/misc/nix-daemon.nix b/nixos/modules/services/misc/nix-daemon.nix index ca59ea293783..2b21df91b82f 100644 --- a/nixos/modules/services/misc/nix-daemon.nix +++ b/nixos/modules/services/misc/nix-daemon.nix @@ -730,6 +730,40 @@ in }; restartTriggers = [ nixConf ]; + + # `stopIfChanged = false` changes to switch behavior + # from stop -> update units -> start + # to update units -> restart + # + # The `stopIfChanged` setting therefore controls a trade-off between a + # more predictable lifecycle, which runs the correct "version" of + # the `ExecStop` line, and on the other hand the availability of + # sockets during the switch, as the effectiveness of the stop operation + # depends on the socket being stopped as well. + # + # As `nix-daemon.service` does not make use of `ExecStop`, we prefer + # to keep the socket up and available. This is important for machines + # that run Nix-based services, such as automated build, test, and deploy + # services, that expect the daemon socket to be available at all times. + # + # Notably, the Nix client does not retry on failure to connect to the + # daemon socket, and the in-process RemoteStore instance will disable + # itself. This makes retries infeasible even for services that are + # aware of the issue. Failure to connect can affect not only new client + # processes, but also new RemoteStore instances in existing processes, + # as well as existing RemoteStore instances that have not saturated + # their connection pool. + # + # Also note that `stopIfChanged = true` does not kill existing + # connection handling daemons, as one might wish to happen before a + # breaking Nix upgrade (which is rare). The daemon forks that handle + # the individual connections split off into their own sessions, causing + # them not to be stopped by systemd. + # If a Nix upgrade does require all existing daemon processes to stop, + # nix-daemon must do so on its own accord, and only when the new version + # starts and detects that Nix's persistent state needs an upgrade. + stopIfChanged = false; + }; # Set up the environment variables for running Nix. |