From 568d2e77f43efd26b387ae43ddc4c3352920ab10 Mon Sep 17 00:00:00 2001 From: Kevin Cox Date: Mon, 4 Jul 2022 11:47:31 -0400 Subject: nixos.redis: Fix disabling of RDB persistence. I was under the impression that setting `services.redis.servers..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. --- nixos/modules/services/databases/redis.nix | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'nixos/modules/services/databases/redis.nix') 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; -- cgit 1.4.1