changeset 14460:d145ea6f7061

fts-solr: doveadm fts rescan now resets the last-indexed-uid fields to allow reindexing.
author Timo Sirainen <tss@iki.fi>
date Wed, 18 Apr 2012 19:56:29 +0300
parents 51b40cffb628
children bda92bf286a0
files src/plugins/fts-solr/fts-backend-solr.c
diffstat 1 files changed, 29 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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,