This way it Lucene doesn't keep the index files unnecessarily open forever.
return ret;
}
+static void fts_backend_lucene_lookup_done(struct fts_backend *_backend)
+{
+ /* the next refresh is going to close the index anyway, so we might as
+ well do it now */
+ fts_backend_lucene_refresh(_backend);
+}
+
struct fts_backend fts_backend_lucene = {
.name = "lucene",
.flags = 0,
fts_backend_lucene_optimize,
fts_backend_default_can_lookup,
fts_backend_lucene_lookup,
- fts_backend_lucene_lookup_multi
+ fts_backend_lucene_lookup_multi,
+ fts_backend_lucene_lookup_done
}
};
fts_backend_solr_optimize,
fts_backend_default_can_lookup,
fts_backend_solr_lookup,
- fts_backend_solr_lookup_multi
+ fts_backend_solr_lookup_multi,
+ NULL
}
};
fts_backend_solr_optimize,
fts_backend_default_can_lookup,
fts_backend_solr_lookup,
- fts_backend_solr_lookup_multi
+ fts_backend_solr_lookup_multi,
+ NULL
}
};
fts_backend_squat_optimize,
fts_backend_default_can_lookup,
fts_backend_squat_lookup,
+ NULL,
NULL
}
};
struct mailbox *const boxes[],
struct mail_search_arg *args, bool and_args,
struct fts_multi_result *result);
+ void (*lookup_done)(struct fts_backend *backend);
};
enum fts_backend_flags {
return backend->v.lookup_multi(backend, boxes, args, and_args, result);
}
+void fts_backend_lookup_done(struct fts_backend *backend)
+{
+ if (backend->v.lookup_done != NULL)
+ backend->v.lookup_done(backend);
+}
+
static uint32_t fts_index_get_ext_id(struct mailbox *box)
{
return mail_index_ext_register(box->index, "fts",
struct mailbox *const boxes[],
struct mail_search_arg *args, bool and_args,
struct fts_multi_result *result);
+/* Called after the lookups are done. The next lookup will be preceded by a
+ refresh. */
+void fts_backend_lookup_done(struct fts_backend *backend);
#endif
}
fts_search_deserialize(fctx->args->args, fctx->orig_matches);
+ fts_backend_lookup_done(fctx->backend);
}