diff options
author | euxane <euxane.trangirard@pacien.net> | 2024-05-30 16:22:03 +0200 |
---|---|---|
committer | euxane <euxane.trangirard@pacien.net> | 2024-05-30 16:22:03 +0200 |
commit | 0174aa1c564e30eeaab2f0f5e418f060c9009192 (patch) | |
tree | 20a11430510029fc33d36da376703fae048d5246 /nixos/modules/services/mail | |
parent | 0ef99565a9d9184730a6c2e34be12db638a1c335 (diff) |
nixos/stalwart-mail: rocksdb as default storage
This sets RocksDB as the default storage backend for `stateVersion` >= 24.11. For previous `stateVersion`s, the structured data and blobs remain on SQLite and the filesystem respectively. This is closer to the suggested upstream configuration for fully local storage.
Diffstat (limited to 'nixos/modules/services/mail')
-rw-r--r-- | nixos/modules/services/mail/stalwart-mail.nix | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/nixos/modules/services/mail/stalwart-mail.nix b/nixos/modules/services/mail/stalwart-mail.nix index 91ae78d7345e0..effcc569715db 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"; @@ -59,8 +68,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 = { |