about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorYt <raphael@megzari.com>2024-05-30 21:31:59 +0000
committerGitHub <noreply@github.com>2024-05-30 21:31:59 +0000
commit0509bb87793ad3b0fde46546d89b09e049f478c2 (patch)
tree50e25cb8a2821cd6e82a498e69a3b7da654a3269 /nixos
parent3b964ec0da493742895d2e6cf4c8751292800663 (diff)
parent0174aa1c564e30eeaab2f0f5e418f060c9009192 (diff)
Merge pull request #315908 from pacien/nixos-stalwart-default-rocksdb
nixos/stalwart-mail: rocksdb as default storage
Diffstat (limited to 'nixos')
-rw-r--r--nixos/doc/manual/release-notes/rl-2411.section.md4
-rw-r--r--nixos/modules/services/mail/stalwart-mail.nix23
2 files changed, 21 insertions, 6 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2411.section.md b/nixos/doc/manual/release-notes/rl-2411.section.md
index e50ec83fa05ea..07f7dc9142936 100644
--- a/nixos/doc/manual/release-notes/rl-2411.section.md
+++ b/nixos/doc/manual/release-notes/rl-2411.section.md
@@ -23,6 +23,10 @@
   before changing the package to `pkgs.stalwart-mail` in
   [`services.stalwart-mail.package`](#opt-services.stalwart-mail.package).
 
+- The `stalwart-mail` module now uses RocksDB as the default storage backend
+  for `stateVersion` ≥ 24.11. (It was previously using SQLite for structured
+  data and the filesystem for blobs).
+
 ## Other Notable Changes {#sec-release-24.11-notable-changes}
 
 <!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
diff --git a/nixos/modules/services/mail/stalwart-mail.nix b/nixos/modules/services/mail/stalwart-mail.nix
index 6b0d73be8a557..477660e454b8e 100644
--- a/nixos/modules/services/mail/stalwart-mail.nix
+++ b/nixos/modules/services/mail/stalwart-mail.nix
@@ -7,6 +7,7 @@ let
   configFormat = pkgs.formats.toml { };
   configFile = configFormat.generate "stalwart-mail.toml" cfg.settings;
   dataDir = "/var/lib/stalwart-mail";
+  useLegacyStorage = versionOlder config.system.stateVersion "24.11";
 
 in {
   options.services.stalwart-mail = {
@@ -38,14 +39,22 @@ in {
       };
       queue.path = mkDefault "${dataDir}/queue";
       report.path = mkDefault "${dataDir}/reports";
-      store.db.type = mkDefault "sqlite";
-      store.db.path = mkDefault "${dataDir}/data/index.sqlite3";
-      store.blob.type = mkDefault "fs";
-      store.blob.path = mkDefault "${dataDir}/data/blobs";
+      store = if useLegacyStorage then {
+        # structured data in SQLite, blobs on filesystem
+        db.type = mkDefault "sqlite";
+        db.path = mkDefault "${dataDir}/data/index.sqlite3";
+        fs.type = mkDefault "fs";
+        fs.path = mkDefault "${dataDir}/data/blobs";
+      } else {
+        # everything in RocksDB
+        db.type = mkDefault "rocksdb";
+        db.path = mkDefault "${dataDir}/db";
+        db.compression = mkDefault "lz4";
+      };
       storage.data = mkDefault "db";
       storage.fts = mkDefault "db";
       storage.lookup = mkDefault "db";
-      storage.blob = mkDefault "blob";
+      storage.blob = mkDefault (if useLegacyStorage then "fs" else "db");
       directory.internal.type = mkDefault "internal";
       directory.internal.store = mkDefault "db";
       storage.directory = mkDefault "internal";
@@ -71,8 +80,10 @@ in {
       wantedBy = [ "multi-user.target" ];
       after = [ "local-fs.target" "network.target" ];
 
-      preStart = ''
+      preStart = if useLegacyStorage then ''
         mkdir -p ${dataDir}/{queue,reports,data/blobs}
+      '' else ''
+        mkdir -p ${dataDir}/{queue,reports,db}
       '';
 
       serviceConfig = {