Mercurial > dovecot > core-2.2
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,