dovecot-2.1: fts-solr: doveadm fts rescan now resets the last-in...

dovecot at dovecot.org dovecot at dovecot.org
Wed Apr 18 19:56:48 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/d145ea6f7061
changeset: 14424:d145ea6f7061
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Apr 18 19:56:29 2012 +0300
description:
fts-solr: doveadm fts rescan now resets the last-indexed-uid fields to allow reindexing.

diffstat:

 src/plugins/fts-solr/fts-backend-solr.c |  30 +++++++++++++++++++++++++++++-
 1 files changed, 29 insertions(+), 1 deletions(-)

diffs (47 lines):

diff -r 51b40cffb628 -r d145ea6f7061 src/plugins/fts-solr/fts-backend-solr.c
--- a/src/plugins/fts-solr/fts-backend-solr.c	Wed Apr 18 19:29:22 2012 +0300
+++ b/src/plugins/fts-solr/fts-backend-solr.c	Wed Apr 18 19:56:29 2012 +0300
@@ -545,6 +545,34 @@
 	return 0;
 }
 
+static int fts_backend_solr_rescan(struct fts_backend *backend)
+{
+	struct mailbox_list_iterate_context *iter;
+	const struct mailbox_info *info;
+	struct mailbox *box;
+	int ret = 0;
+
+	/* FIXME: proper rescan needed. for now we'll just reset the
+	   last-uids */
+	iter = mailbox_list_iter_init(backend->ns->list, "*",
+				      MAILBOX_LIST_ITER_NO_AUTO_BOXES);
+	while ((info = mailbox_list_iter_next(iter)) != NULL) {
+		if ((info->flags &
+		     (MAILBOX_NONEXISTENT | MAILBOX_NOSELECT)) != 0)
+			continue;
+
+		box = mailbox_alloc(info->ns->list, info->name, 0);
+		if (mailbox_open(box) == 0) {
+			if (fts_index_set_last_uid(box, 0) < 0)
+				ret = -1;
+		}
+		mailbox_free(&box);
+	}
+	if (mailbox_list_iter_deinit(&iter) < 0)
+		ret = -1;
+	return ret;
+}
+
 static int fts_backend_solr_optimize(struct fts_backend *backend ATTR_UNUSED)
 {
 	return 0;
@@ -850,7 +878,7 @@
 		fts_backend_solr_update_unset_build_key,
 		fts_backend_solr_update_build_more,
 		fts_backend_solr_refresh,
-		NULL,
+		fts_backend_solr_rescan,
 		fts_backend_solr_optimize,
 		fts_backend_default_can_lookup,
 		fts_backend_solr_lookup,


More information about the dovecot-cvs mailing list