]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Split fts_enforced setting
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 21 Mar 2024 20:37:12 +0000 (22:37 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:58 +0000 (10:39 +0200)
 * fts_enforced=no -> fts_search_add_missing=body-search-only,
   fts_search_read_fallback=yes
 * fts_enforced=yes -> fts_search_add_missing=yes,
   fts_search_read_fallback=no
 * fts_enforced=body -> fts_search_add_missing=body-search-only,
   fts_search_read_fallback=no

The default settings still keep the old fts_enforced=no default behavior.

src/plugins/fts/fts-settings.c
src/plugins/fts/fts-settings.h
src/plugins/fts/fts-storage.c

index e7e878fa58ac10b0cc02fd3942fa8fa23350471e..a148ea919f9c8a8a53c6f0c93e587f6736903099 100644 (file)
@@ -19,7 +19,8 @@ static const struct setting_define fts_setting_defines[] = {
        { .type = SET_FILTER_NAME, .key = FTS_FILTER_DECODER_TIKA },
        DEF(STR,     decoder_tika_url),
        DEF(STR,     driver),
-       DEF(ENUM,    enforced),
+       DEF(ENUM,    search_add_missing),
+       DEF(BOOL,    search_read_fallback),
        DEF(BOOLLIST,header_excludes),
        DEF(BOOLLIST,header_includes),
        DEF(TIME,    index_timeout),
@@ -29,9 +30,7 @@ static const struct setting_define fts_setting_defines[] = {
 
 /* <settings checks> */
 
-#define FTS_ENFORCE_KEYWORD_NO     "no"
-#define FTS_ENFORCE_KEYWORD_YES    "yes"
-#define FTS_ENFORCE_KEYWORD_BODY   "body"
+#define FTS_SEARCH_ADD_MISSING_BODY_SEARCH_ONLY "body-search-only"
 
 #define FTS_DECODER_KEYWORD_NONE   ""
 #define FTS_DECODER_KEYWORD_TIKA   "tika"
@@ -50,9 +49,9 @@ static const struct fts_settings fts_default_settings = {
        .decoder_script_socket_path = "",
        .decoder_tika_url = "",
        .driver = "",
-       .enforced = FTS_ENFORCE_KEYWORD_NO
-                ":"FTS_ENFORCE_KEYWORD_YES
-                ":"FTS_ENFORCE_KEYWORD_BODY,
+       .search_add_missing = FTS_SEARCH_ADD_MISSING_BODY_SEARCH_ONLY":yes",
+       .search_read_fallback = TRUE,
+
        .index_timeout = 0,
        .message_max_size = SET_SIZE_UNLIMITED,
 };
@@ -107,17 +106,6 @@ static enum fts_decoder fts_settings_parse_decoder(const char *key)
        return fts_settings_parse_enum(table, key);
 }
 
-static enum fts_enforced fts_settings_parse_enforced(const char *key)
-{
-       static struct fts_settings_enum_table table[] = {
-               { FTS_ENFORCE_KEYWORD_NO,   FTS_ENFORCED_NO },
-               { FTS_ENFORCE_KEYWORD_YES,  FTS_ENFORCED_YES },
-               { FTS_ENFORCE_KEYWORD_BODY, FTS_ENFORCED_BODY },
-               { NULL, 0 }
-       };
-       return fts_settings_parse_enum(table, key);
-}
-
 static bool fts_settings_check_decoder(struct fts_settings *set,
                                       const char **error_r)
 {
@@ -153,7 +141,9 @@ static bool fts_settings_check(void *_set, pool_t pool ATTR_UNUSED,
                               const char **error_r)
 {
        struct fts_settings *set = _set;
-       set->parsed_enforced = fts_settings_parse_enforced(set->enforced);
+       set->parsed_search_add_missing_body_only =
+               strcmp(set->search_add_missing,
+                      FTS_SEARCH_ADD_MISSING_BODY_SEARCH_ONLY) == 0;
        set->parsed_decoder_driver = fts_settings_parse_decoder(set->decoder_driver);
        return fts_settings_check_decoder(set, error_r);
 }
index 96ceb5d2901e18dccf9ea0d1bbc0dce12df6d4c7..ebd0509eee8a6e6bec7af69d1583d97e590ebf53 100644 (file)
@@ -6,11 +6,6 @@
 #define FTS_FILTER             "fts"
 #define FTS_FILTER_DECODER_TIKA        "fts_decoder_tika"
 
-enum fts_enforced {
-       FTS_ENFORCED_NO,
-       FTS_ENFORCED_YES,
-       FTS_ENFORCED_BODY,
-};
 enum fts_decoder {
        FTS_DECODER_NO,
        FTS_DECODER_TIKA,
@@ -26,14 +21,15 @@ struct fts_settings {
        const char *decoder_script_socket_path;
        const char *decoder_tika_url;
        const char *driver;
-       const char *enforced;
+       const char *search_add_missing;
+       bool search_read_fallback;
        unsigned int autoindex_max_recent_msgs;
        unsigned int index_timeout;
        uoff_t message_max_size;
        bool autoindex;
 
-       enum fts_enforced parsed_enforced;
        enum fts_decoder parsed_decoder_driver;
+       bool parsed_search_add_missing_body_only;
 };
 
 extern const struct setting_parser_info fts_setting_parser_info;
index bc0134eba19cebb290726c2a7a909bf8910d4ee2..147755fcd1ff3eea04b10426549fdb844d21b11a 100644 (file)
@@ -206,7 +206,7 @@ fts_mailbox_search_init(struct mailbox_transaction_context *t,
        ft->scores = fctx->scores;
        ft->scores->refcount++;
 
-       if (fbox->set->parsed_enforced == FTS_ENFORCED_YES ||
+       if (!fbox->set->parsed_search_add_missing_body_only ||
            fts_want_build_args(args->args))
                fts_try_build_init(ctx, fctx);
        else
@@ -264,7 +264,7 @@ fts_mailbox_search_next_nonblock(struct mail_search_context *ctx,
                }
        }
        if (fctx != NULL && !fctx->fts_lookup_success &&
-           fbox->set->parsed_enforced != FTS_ENFORCED_NO)
+           !fbox->set->search_read_fallback)
                return FALSE;
 
        return fbox->module_ctx.super.
@@ -424,7 +424,7 @@ static int fts_mailbox_search_deinit(struct mail_search_context *ctx)
                        ret = -1;
                }
                else if (!fctx->fts_lookup_success &&
-                        fbox->set->parsed_enforced != FTS_ENFORCED_NO) {
+                        !fbox->set->search_read_fallback) {
                        /* FTS lookup failed and we didn't want to fallback to
                           opening all the mails and searching manually */
                        mail_storage_set_internal_error(box->storage);