]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Log when indexing requires adding more mails to index than requested
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 18 Jun 2017 10:07:14 +0000 (13:07 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Thu, 10 Aug 2017 09:40:44 +0000 (12:40 +0300)
This should mainly happen when FTS indexing is requested for a virtual
mailbox.

src/plugins/fts/fts-storage.c

index aa762c32eb9beef37f4cae08c52dd9de66839079..b7a7541faf084d702dfd215b3c8a6b45391ac772 100644 (file)
@@ -52,6 +52,7 @@ struct fts_transaction_context {
        struct fts_scores *scores;
        uint32_t next_index_seq;
        uint32_t highest_virtual_uid;
+       unsigned int precache_extra_count;
 
        unsigned int precached:1;
        unsigned int mails_saved:1;
@@ -430,7 +431,7 @@ static int fts_mail_get_special(struct mail *_mail, enum mail_fetch_field field,
 static int
 fts_mail_precache_range(struct mailbox_transaction_context *trans,
                        struct fts_backend_update_context *update_ctx,
-                       uint32_t seq1, uint32_t seq2)
+                       uint32_t seq1, uint32_t seq2, unsigned int *extra_count)
 {
        struct mail_search_args *search_args;
        struct mail_search_context *ctx;
@@ -451,6 +452,7 @@ fts_mail_precache_range(struct mailbox_transaction_context *trans,
                        break;
                }
                mail_precache(mail);
+               *extra_count += 1;
        }
        if (mailbox_search_deinit(&ctx) < 0)
                ret = -1;
@@ -495,7 +497,8 @@ static void fts_mail_index(struct mail *_mail)
                if (fts_mail_precache_range(_mail->transaction,
                                            flist->update_ctx,
                                            ft->next_index_seq,
-                                           _mail->seq-1) < 0) {
+                                           _mail->seq-1,
+                                           &ft->precache_extra_count) < 0) {
                        ft->failed = TRUE;
                        return;
                }
@@ -586,6 +589,15 @@ static int fts_transaction_end(struct mailbox_transaction_context *t, const char
        }
        if (ft->scores != NULL)
                fts_scores_unref(&ft->scores);
+       if (ft->precache_extra_count > 0) {
+               if (ret < 0) {
+                       i_error("fts: Failed after indexing %u extra mails internally in %s: %s",
+                              ft->precache_extra_count, t->box->vname, *error_r);
+               } else {
+                       i_info("fts: Indexed %u extra mails internally in %s",
+                              ft->precache_extra_count, t->box->vname);
+               }
+       }
        i_free(ft);
        return ret;
 }