]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Added lookup_done() API call. Lucene uses it to close the index.
authorTimo Sirainen <tss@iki.fi>
Tue, 30 Aug 2011 04:07:31 +0000 (07:07 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 30 Aug 2011 04:07:31 +0000 (07:07 +0300)
This way it Lucene doesn't keep the index files unnecessarily open forever.

src/plugins/fts-lucene/fts-backend-lucene.c
src/plugins/fts-solr/fts-backend-solr-old.c
src/plugins/fts-solr/fts-backend-solr.c
src/plugins/fts-squat/fts-backend-squat.c
src/plugins/fts/fts-api-private.h
src/plugins/fts/fts-api.c
src/plugins/fts/fts-api.h
src/plugins/fts/fts-search.c

index 4770243767f1c6dd8b8e6b4a430ae11ee5215f14..dea0b532a4e6e600c5adcec33f08d32a8c3d10c3 100644 (file)
@@ -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
        }
 };
index fc173b15d98a6465080e3a244e60b301a9c5cf60..33ece23c761701bbba7fa990d865aea072ab5536 100644 (file)
@@ -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
        }
 };
index bda41f5fdf2d34a3271833df42f83be78f1f5498..5008116d45c7aa6209536c7f9096fc83aced0000 100644 (file)
@@ -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
        }
 };
index b321f24153b1a41005e52bd4c72a2278d19bdef8..b66a80c9c9f0a5d48d4d3522eb2cfddd11048244 100644 (file)
@@ -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
        }
 };
index 21c4f68b2039dcd9876780d8fb5a6885a34ac2cc..3479d7715e7924cd7413e75931d27d8b88ec0ca0 100644 (file)
@@ -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 {
index 24149eff0a8486e4531f246471ca5a2059fc9e56..32a85e18ee8cdbf6f47b46f1ddd6a6a744426f03 100644 (file)
@@ -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",
index 19bce13cc0ca0ca3b6db2a49bae568594b3632c2..4b4bcbd61c2d281580975e78dd6d450e68598ae1 100644 (file)
@@ -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
index d14af657c92ebfa15e4599ea168d3930821aa19c..04b015d3a18d695618a565cd9491a43ddb76bde1 100644 (file)
@@ -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);
 }