From cdefdac305a74c9917c1ecdc2ee5fe5d60db5605 Mon Sep 17 00:00:00 2001 From: Marco Bettini Date: Mon, 31 Jul 2023 15:55:12 +0000 Subject: [PATCH] indexer: cmd_index_box_precache() - Avoid opening the mailbox when unnecessary --- src/doveadm/doveadm-mail-index.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/doveadm/doveadm-mail-index.c b/src/doveadm/doveadm-mail-index.c index 42446f59d2..dd75e04c96 100644 --- a/src/doveadm/doveadm-mail-index.c +++ b/src/doveadm/doveadm-mail-index.c @@ -41,16 +41,23 @@ static int cmd_index_box_precache(struct doveadm_mail_cmd_context *dctx, unsigned int counter = 0, max; int ret = 0; - if (mailbox_get_metadata(box, MAILBOX_METADATA_PRECACHE_FIELDS, - &metadata) < 0) { - e_error(event, "Mailbox %s: Precache-fields lookup failed: %s", + if (mailbox_get_status(box, STATUS_MESSAGES | STATUS_FTS_LAST_INDEXED_UID, + &status) < 0) { + e_error(event, "Mailbox %s: Status lookup failed: %s", mailbox_get_vname(box), mailbox_get_last_internal_error(box, NULL)); return -1; } - if (mailbox_get_status(box, STATUS_MESSAGES | STATUS_FTS_LAST_INDEXED_UID, - &status) < 0) { - e_error(event, "Mailbox %s: Status lookup failed: %s", + + if (status.fts_last_indexed_uid >= status.uidnext - 1) { + e_info(event, "Mailbox %s: Index is already up to date", + mailbox_get_vname(box)); + return 0; + } + + if (mailbox_get_metadata(box, MAILBOX_METADATA_PRECACHE_FIELDS, + &metadata) < 0) { + e_error(event, "Mailbox %s: Precache-fields lookup failed: %s", mailbox_get_vname(box), mailbox_get_last_internal_error(box, NULL)); return -1; @@ -62,13 +69,6 @@ static int cmd_index_box_precache(struct doveadm_mail_cmd_context *dctx, &unused, &seq); seq++; - if (seq > status.messages) { - if (doveadm_verbose) { - e_info(event, "%s: Cache is already up to date", - mailbox_get_vname(box)); - } - return 0; - } if (doveadm_verbose) { e_info(event, "%s: Caching mails seq=%u..%u", mailbox_get_vname(box), seq, status.messages); -- 2.47.3