From: Timo Sirainen Date: Thu, 21 Mar 2024 20:37:12 +0000 (+0200) Subject: fts: Split fts_enforced setting X-Git-Tag: 2.4.0~623 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a92575b2b5428586bb2b2c7406a812fc2ddf1603;p=thirdparty%2Fdovecot%2Fcore.git fts: Split fts_enforced setting * 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. --- diff --git a/src/plugins/fts/fts-settings.c b/src/plugins/fts/fts-settings.c index e7e878fa58..a148ea919f 100644 --- a/src/plugins/fts/fts-settings.c +++ b/src/plugins/fts/fts-settings.c @@ -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[] = { /* */ -#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); } diff --git a/src/plugins/fts/fts-settings.h b/src/plugins/fts/fts-settings.h index 96ceb5d290..ebd0509eee 100644 --- a/src/plugins/fts/fts-settings.h +++ b/src/plugins/fts/fts-settings.h @@ -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; diff --git a/src/plugins/fts/fts-storage.c b/src/plugins/fts/fts-storage.c index bc0134eba1..147755fcd1 100644 --- a/src/plugins/fts/fts-storage.c +++ b/src/plugins/fts/fts-storage.c @@ -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);