changeset 8387:fbd90ad20593 HEAD

fts: If we haven't indexed all messages, search the rest using non-indexed search. Typically this happens with header searches which don't force an index update.
author Timo Sirainen <tss@iki.fi>
date Wed, 05 Nov 2008 14:37:35 +0200
parents 7b21f9546aa7
children 4a608f96609b
files src/plugins/fts/fts-storage.c src/plugins/fts/fts-storage.h
diffstat 2 files changed, 17 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/fts/fts-storage.c	Wed Nov 05 14:23:22 2008 +0200
+++ b/src/plugins/fts/fts-storage.c	Wed Nov 05 14:37:35 2008 +0200
@@ -183,10 +183,12 @@
 		return -1;
 
 	mailbox_get_seq_range(t->box, last_uid+1, (uint32_t)-1, &seq1, &seq2);
+	fctx->first_nonindexed_seq = seq1;
 	if (seq1 == 0) {
 		/* no new messages */
 		return 0;
 	}
+
 	if (fctx->best_arg->type == SEARCH_HEADER ||
 	    fctx->best_arg->type == SEARCH_HEADER_COMPRESS_LWSP) {
 		/* we're not updating the index just for header lookups */
@@ -202,6 +204,7 @@
 		last_uid = last_uid_locked;
 		mailbox_get_seq_range(t->box, last_uid+1, (uint32_t)-1,
 				      &seq1, &seq2);
+		fctx->first_nonindexed_seq = seq1;
 		if (seq1 == 0) {
 			/* no new messages */
 			(void)fts_backend_build_deinit(&build);
@@ -389,9 +392,12 @@
 		}
 
 		/* finished / error */
-		fts_build_deinit(&fctx->build_ctx);
-		if (ret > 0)
+		if (fts_build_deinit(&fctx->build_ctx) < 0)
+			ret = -1;
+		if (ret > 0) {
+			fctx->first_nonindexed_seq = 0;
 			fts_search_lookup(fctx);
+		}
 	}
 
 	/* if we're here, the indexes are either built or they're not used */
@@ -449,8 +455,13 @@
 		/* use whichever is lower of definite/maybe */
 		if (fctx->definite_idx == def_count) {
 			if (fctx->maybe_idx == maybe_count) {
-				/* we're finished */
-				return 0;
+				/* look for the non-indexed mails */
+				if (fctx->first_nonindexed_seq == 0)
+					return 0;
+				fctx->seqs_set = FALSE;
+				ctx->seq = fctx->first_nonindexed_seq - 1;
+				return fbox->module_ctx.super.
+					search_next_update_seq(ctx);
 			}
 			use_maybe = TRUE;
 		} else if (fctx->maybe_idx == maybe_count) {
@@ -505,7 +516,7 @@
 
 	if (fctx->build_ctx != NULL) {
 		/* the search was cancelled */
-		fts_build_deinit(&fctx->build_ctx);
+		(void)fts_build_deinit(&fctx->build_ctx);
 	}
 
 	if (array_is_created(&fctx->definite_seqs))
--- a/src/plugins/fts/fts-storage.h	Wed Nov 05 14:23:22 2008 +0200
+++ b/src/plugins/fts/fts-storage.h	Wed Nov 05 14:37:35 2008 +0200
@@ -22,6 +22,7 @@
 	ARRAY_TYPE(seq_range) definite_seqs, maybe_seqs;
 	ARRAY_TYPE(fts_score_map) score_map;
 	unsigned int definite_idx, maybe_idx;
+	uint32_t first_nonindexed_seq;
 
 	struct fts_backend *build_backend;
 	struct fts_storage_build_context *build_ctx;