Move indexDir option to the mailserver scope

This option has been initially in the mailserver.fullTextSearch
scope. However, this option modifies the location of all index files
of dovecot and not only those used by the full text search feature. It
is then more relevant to have this option in the mailserver top level
scope.

Moreover, the default option has been changed to null in order to keep
existing index files where they are: changing the index location means
recreating all index files. The fts documentation however recommend to
change this default location when enabling the fts feature.
This commit is contained in:
Antoine Eiche 2021-03-11 20:53:38 +01:00
parent 66e8baa6f2
commit 93330c5453
4 changed files with 34 additions and 17 deletions

View file

@ -187,17 +187,29 @@ in
default = {}; default = {};
}; };
indexDir = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
Folder to store search indices. If null, indices are stored
along with email, which could not necessarily be desirable,
especially when the fullTextSearch option is enable since
indices it creates are voluminous and do not need to be backed
up.
Be careful when changing this option value since all indices
would be recreated at the new location (and clients would need
to resynchronize).
Note the some variables can be used in the file path. See
https://doc.dovecot.org/configuration_manual/mail_location/#variables
for details.
'';
example = "/var/lib/docecot/indices/%d/%n";
};
fullTextSearch = { fullTextSearch = {
enable = mkEnableOption "Full text search indexing with xapian. This has significant performance and disk space cost."; enable = mkEnableOption "Full text search indexing with xapian. This has significant performance and disk space cost.";
indexDir = mkOption {
type = types.nullOr types.str;
default = "/var/lib/dovecot/fts_xapian";
description = ''
Folder to store search indices. If null, indices are stored along with email, which
is not necessarily desirable as indices are voluminous and do not need to be backed up.
'';
};
autoIndex = mkOption { autoIndex = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;

View file

@ -38,9 +38,17 @@ issues a search query, so latency will be high.
Resource requirements Resource requirements
~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
Indices can take more disk space than the emails themselves. By default, they Indices created by the full text search feature can take more disk
are kept in a different location (``/var/lib/dovecot/fts_xapian``) than emails space than the emails themselves. By default, they are kept in the
so that you can backup emails without indices. emails location. When enabling the full text search feature, it is
recommended to move indices in a different location, such as
(``/var/lib/docecot/indices/%d/%n``) by using the option
``mailserver.indexDir``.
.. warning::
When the value of the ``indexDir`` option is changed, all dovecot
indices needs to be recreated: clients would need to resynchronize.
Indexation itself is rather resouces intensive, in CPU, and for emails with Indexation itself is rather resouces intensive, in CPU, and for emails with
large headers, in memory as well. Initial indexation of existing emails can take large headers, in memory as well. Initial indexation of existing emails can take

View file

@ -31,9 +31,8 @@ let
# maildir in format "/${domain}/${user}" # maildir in format "/${domain}/${user}"
dovecotMaildir = dovecotMaildir =
"maildir:${cfg.mailDirectory}/%d/%n${maildirLayoutAppendix}" "maildir:${cfg.mailDirectory}/%d/%n${maildirLayoutAppendix}"
+ (lib.optionalString + (lib.optionalString (cfg.indexDir != null)
(cfg.fullTextSearch.enable && (cfg.fullTextSearch.indexDir != null)) ":INDEX=${cfg.indexDir}/%d/%n"
":INDEX=${cfg.fullTextSearch.indexDir}/%d/%n"
); );
postfixCfg = config.services.postfix; postfixCfg = config.services.postfix;

View file

@ -59,9 +59,7 @@ in
preStart = let preStart = let
directories = lib.strings.escapeShellArgs ( directories = lib.strings.escapeShellArgs (
[ mailDirectory ] [ mailDirectory ]
++ lib.optional ++ lib.optional (cfg.indexDir != null) cfg.indexDir
(cfg.fullTextSearch.enable && (cfg.fullTextSearch.indexDir != null))
cfg.fullTextSearch.indexDir
); );
in '' in ''
# Create mail directory and set permissions. See # Create mail directory and set permissions. See