From b7fdf4fe23801de680e0be5aca0596a3c9ea3f8f Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 30 Aug 2011 07:07:31 +0300 Subject: [PATCH] fts: Added lookup_done() API call. Lucene uses it to close the index. This way it Lucene doesn't keep the index files unnecessarily open forever. --- src/plugins/fts-lucene/fts-backend-lucene.c | 10 +++++++++- src/plugins/fts-solr/fts-backend-solr-old.c | 3 ++- src/plugins/fts-solr/fts-backend-solr.c | 3 ++- src/plugins/fts-squat/fts-backend-squat.c | 1 + src/plugins/fts/fts-api-private.h | 1 + src/plugins/fts/fts-api.c | 6 ++++++ src/plugins/fts/fts-api.h | 3 +++ src/plugins/fts/fts-search.c | 1 + 8 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/plugins/fts-lucene/fts-backend-lucene.c b/src/plugins/fts-lucene/fts-backend-lucene.c index 4770243767..dea0b532a4 100644 --- a/src/plugins/fts-lucene/fts-backend-lucene.c +++ b/src/plugins/fts-lucene/fts-backend-lucene.c @@ -533,6 +533,13 @@ fts_backend_lucene_lookup_multi(struct fts_backend *_backend, 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, @@ -554,6 +561,7 @@ struct fts_backend fts_backend_lucene = { 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 } }; diff --git a/src/plugins/fts-solr/fts-backend-solr-old.c b/src/plugins/fts-solr/fts-backend-solr-old.c index fc173b15d9..33ece23c76 100644 --- a/src/plugins/fts-solr/fts-backend-solr-old.c +++ b/src/plugins/fts-solr/fts-backend-solr-old.c @@ -814,6 +814,7 @@ struct fts_backend fts_backend_solr_old = { fts_backend_solr_optimize, fts_backend_default_can_lookup, fts_backend_solr_lookup, - fts_backend_solr_lookup_multi + fts_backend_solr_lookup_multi, + NULL } }; diff --git a/src/plugins/fts-solr/fts-backend-solr.c b/src/plugins/fts-solr/fts-backend-solr.c index bda41f5fdf..5008116d45 100644 --- a/src/plugins/fts-solr/fts-backend-solr.c +++ b/src/plugins/fts-solr/fts-backend-solr.c @@ -759,6 +759,7 @@ struct fts_backend fts_backend_solr = { fts_backend_solr_optimize, fts_backend_default_can_lookup, fts_backend_solr_lookup, - fts_backend_solr_lookup_multi + fts_backend_solr_lookup_multi, + NULL } }; diff --git a/src/plugins/fts-squat/fts-backend-squat.c b/src/plugins/fts-squat/fts-backend-squat.c index b321f24153..b66a80c9c9 100644 --- a/src/plugins/fts-squat/fts-backend-squat.c +++ b/src/plugins/fts-squat/fts-backend-squat.c @@ -474,6 +474,7 @@ struct fts_backend fts_backend_squat = { fts_backend_squat_optimize, fts_backend_default_can_lookup, fts_backend_squat_lookup, + NULL, NULL } }; diff --git a/src/plugins/fts/fts-api-private.h b/src/plugins/fts/fts-api-private.h index 21c4f68b20..3479d7715e 100644 --- a/src/plugins/fts/fts-api-private.h +++ b/src/plugins/fts/fts-api-private.h @@ -47,6 +47,7 @@ struct fts_backend_vfuncs { 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 { diff --git a/src/plugins/fts/fts-api.c b/src/plugins/fts/fts-api.c index 24149eff0a..32a85e18ee 100644 --- a/src/plugins/fts/fts-api.c +++ b/src/plugins/fts/fts-api.c @@ -320,6 +320,12 @@ int fts_backend_lookup_multi(struct fts_backend *backend, 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", diff --git a/src/plugins/fts/fts-api.h b/src/plugins/fts/fts-api.h index 19bce13cc0..4b4bcbd61c 100644 --- a/src/plugins/fts/fts-api.h +++ b/src/plugins/fts/fts-api.h @@ -136,5 +136,8 @@ int fts_backend_lookup_multi(struct fts_backend *backend, 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 diff --git a/src/plugins/fts/fts-search.c b/src/plugins/fts/fts-search.c index d14af657c9..04b015d3a1 100644 --- a/src/plugins/fts/fts-search.c +++ b/src/plugins/fts/fts-search.c @@ -353,4 +353,5 @@ void fts_search_lookup(struct fts_search_context *fctx) } fts_search_deserialize(fctx->args->args, fctx->orig_matches); + fts_backend_lookup_done(fctx->backend); } -- 2.47.3