summary refs log tree commit diff
path: root/nixos/modules/services/databases/redis.nix
diff options
context:
space:
mode:
authorKevin Cox <kevincox@kevincox.ca>2022-07-04 11:47:31 -0400
committerKevin Cox <kevincox@kevincox.ca>2022-07-05 07:37:38 -0400
commit568d2e77f43efd26b387ae43ddc4c3352920ab10 (patch)
treefe53c0a2714c41d4eaaa7e204d60495b7eaecec5 /nixos/modules/services/databases/redis.nix
parent4d26010c93091d4cb7fca36b8d3ecb33c89a6f23 (diff)
downloadnixpkgs-568d2e77f43efd26b387ae43ddc4c3352920ab10.tar
nixpkgs-568d2e77f43efd26b387ae43ddc4c3352920ab10.tar.gz
nixpkgs-568d2e77f43efd26b387ae43ddc4c3352920ab10.tar.bz2
nixpkgs-568d2e77f43efd26b387ae43ddc4c3352920ab10.tar.lz
nixpkgs-568d2e77f43efd26b387ae43ddc4c3352920ab10.tar.xz
nixpkgs-568d2e77f43efd26b387ae43ddc4c3352920ab10.tar.zst
nixpkgs-568d2e77f43efd26b387ae43ddc4c3352920ab10.zip
nixos.redis: Fix disabling of RDB persistence.
I was under the impression that setting `services.redis.servers.<name>.save = []` would disable RDB persistence as no schedule would mean no persistence. However since the code did not handle this case specially it actually results in no `save` setting being written and the internal Redis default is used.

This patch handles the empty case to disable RDB persistence.

Disabling RDB persistence is useful in a number of scenarios:

1. Using Redis in a pure-cache mode where persistence is not desired.
2. When using the (generally superior) AOF persistence mode this file is never read so there is little point to writing it.
3. When saving is handled manually

For more information see https://redis.io/docs/manual/persistence/

This is a breaking change as the user may have been relying on `[]` using Redis defaults. However I believe that updating the behaviour for the next release is beneficial as IMHO it is less surprising and does what the user would expect. I have added release notes to warn about this change.
Diffstat (limited to 'nixos/modules/services/databases/redis.nix')
-rw-r--r--nixos/modules/services/databases/redis.nix12
1 files changed, 10 insertions, 2 deletions
diff --git a/nixos/modules/services/databases/redis.nix b/nixos/modules/services/databases/redis.nix
index a1bd73c9e37..5532c540197 100644
--- a/nixos/modules/services/databases/redis.nix
+++ b/nixos/modules/services/databases/redis.nix
@@ -166,7 +166,11 @@ in {
             save = mkOption {
               type = with types; listOf (listOf int);
               default = [ [900 1] [300 10] [60 10000] ];
-              description = "The schedule in which data is persisted to disk, represented as a list of lists where the first element represent the amount of seconds and the second the number of changes.";
+              description = mdDoc ''
+                The schedule in which data is persisted to disk, represented as a list of lists where the first element represent the amount of seconds and the second the number of changes.
+
+                If set to the empty list (`[]`) then RDB persistence will be disabled (useful if you are using AOF or don't want any persistence).
+              '';
             };
 
             slaveOf = mkOption {
@@ -268,7 +272,11 @@ in {
               syslog-enabled = config.syslog;
               databases = config.databases;
               maxclients = config.maxclients;
-              save = map (d: "${toString (builtins.elemAt d 0)} ${toString (builtins.elemAt d 1)}") config.save;
+              save = if config.save == []
+                then ''""'' # Disable saving with `save = ""`
+                else map
+                  (d: "${toString (builtins.elemAt d 0)} ${toString (builtins.elemAt d 1)}")
+                  config.save;
               dbfilename = "dump.rdb";
               dir = "/var/lib/${redisName name}";
               appendOnly = config.appendOnly;