dovecot-1.1: Added FTS_SQUAT environment with partial=n and full...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Mar 20 15:34:48 EET 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/477b619b926b
changeset: 7429:477b619b926b
user: Timo Sirainen <tss at iki.fi>
date: Thu Mar 20 15:34:44 2008 +0200
description:
Added FTS_SQUAT environment with partial=n and full=m settings.
diffstat:
4 files changed, 53 insertions(+), 3 deletions(-)
src/plugins/fts-squat/fts-backend-squat.c | 35 +++++++++++++++++++++++++++-
src/plugins/fts-squat/squat-trie-private.h | 2 +
src/plugins/fts-squat/squat-trie.c | 16 +++++++++++-
src/plugins/fts-squat/squat-trie.h | 3 ++
diffs (128 lines):
diff -r d6f1eb00e4d3 -r 477b619b926b src/plugins/fts-squat/fts-backend-squat.c
--- a/src/plugins/fts-squat/fts-backend-squat.c Thu Mar 20 15:09:30 2008 +0200
+++ b/src/plugins/fts-squat/fts-backend-squat.c Thu Mar 20 15:34:44 2008 +0200
@@ -7,6 +7,8 @@
#include "squat-trie.h"
#include "fts-squat-plugin.h"
+#include <stdlib.h>
+
#define SQUAT_FILE_PREFIX "dovecot.index.search"
struct squat_fts_backend {
@@ -19,12 +21,39 @@ struct squat_fts_backend_build_context {
struct squat_trie_build_context *build_ctx;
};
+static void
+fts_backend_squat_set(struct squat_fts_backend *backend, const char *str)
+{
+ const char *const *tmp;
+ int len;
+
+ for (tmp = t_strsplit_spaces(str, " "); *tmp != NULL; tmp++) {
+ if (strncmp(*tmp, "partial=", 8) == 0) {
+ len = atoi(*tmp + 8);
+ if (len <= 0) {
+ i_fatal("fts_squat: Invalid partial len: %s",
+ *tmp + 8);
+ }
+ squat_trie_set_partial_len(backend->trie, len);
+ } else if (strncmp(*tmp, "full=", 5) == 0) {
+ len = atoi(*tmp + 5);
+ if (len <= 0) {
+ i_fatal("fts_squat: Invalid full len: %s",
+ *tmp + 5);
+ }
+ squat_trie_set_full_len(backend->trie, len);
+ } else {
+ i_fatal("fts_squat: Invalid setting: %s", *tmp);
+ }
+ }
+}
+
static struct fts_backend *fts_backend_squat_init(struct mailbox *box)
{
struct squat_fts_backend *backend;
struct mail_storage *storage;
struct mailbox_status status;
- const char *path;
+ const char *path, *env;
enum squat_index_flags flags = 0;
storage = mailbox_get_storage(box);
@@ -50,6 +79,10 @@ static struct fts_backend *fts_backend_s
squat_trie_init(t_strconcat(path, "/"SQUAT_FILE_PREFIX, NULL),
status.uidvalidity, storage->lock_method,
flags);
+
+ env = getenv("FTS_SQUAT");
+ if (env != NULL)
+ fts_backend_squat_set(backend, env);
return &backend->backend;
}
diff -r d6f1eb00e4d3 -r 477b619b926b src/plugins/fts-squat/squat-trie-private.h
--- a/src/plugins/fts-squat/squat-trie-private.h Thu Mar 20 15:09:30 2008 +0200
+++ b/src/plugins/fts-squat/squat-trie-private.h Thu Mar 20 15:34:44 2008 +0200
@@ -133,6 +133,8 @@ struct squat_trie {
size_t mmap_size;
unsigned char default_normalize_map[256];
+ unsigned int default_partial_len;
+ unsigned int default_full_len;
unsigned int corrupted:1;
};
diff -r d6f1eb00e4d3 -r 477b619b926b src/plugins/fts-squat/squat-trie.c
--- a/src/plugins/fts-squat/squat-trie.c Thu Mar 20 15:09:30 2008 +0200
+++ b/src/plugins/fts-squat/squat-trie.c Thu Mar 20 15:34:44 2008 +0200
@@ -145,6 +145,8 @@ squat_trie_init(const char *path, uint32
trie->dotlock_set.nfs_flush = (flags & SQUAT_INDEX_FLAG_NFS_FLUSH) != 0;
trie->dotlock_set.timeout = SQUAT_TRIE_LOCK_TIMEOUT;
trie->dotlock_set.stale_timeout = SQUAT_TRIE_DOTLOCK_STALE_TIMEOUT;
+ trie->default_partial_len = DEFAULT_PARTIAL_LEN;
+ trie->default_full_len = DEFAULT_FULL_LEN;
return trie;
}
@@ -190,14 +192,24 @@ void squat_trie_deinit(struct squat_trie
i_free(trie);
}
+void squat_trie_set_partial_len(struct squat_trie *trie, unsigned int len)
+{
+ trie->default_partial_len = len;
+}
+
+void squat_trie_set_full_len(struct squat_trie *trie, unsigned int len)
+{
+ trie->default_full_len = len;
+}
+
static void squat_trie_header_init(struct squat_trie *trie)
{
memset(&trie->hdr, 0, sizeof(trie->hdr));
trie->hdr.version = SQUAT_TRIE_VERSION;
trie->hdr.indexid = time(NULL);
trie->hdr.uidvalidity = trie->uidvalidity;
- trie->hdr.partial_len = DEFAULT_PARTIAL_LEN;
- trie->hdr.full_len = DEFAULT_FULL_LEN;
+ trie->hdr.partial_len = trie->default_partial_len;
+ trie->hdr.full_len = trie->default_full_len;
i_assert(sizeof(trie->hdr.normalize_map) ==
sizeof(trie->default_normalize_map));
diff -r d6f1eb00e4d3 -r 477b619b926b src/plugins/fts-squat/squat-trie.h
--- a/src/plugins/fts-squat/squat-trie.h Thu Mar 20 15:09:30 2008 +0200
+++ b/src/plugins/fts-squat/squat-trie.h Thu Mar 20 15:34:44 2008 +0200
@@ -23,6 +23,9 @@ squat_trie_init(const char *path, uint32
enum squat_index_flags flags);
void squat_trie_deinit(struct squat_trie **trie);
+void squat_trie_set_partial_len(struct squat_trie *trie, unsigned int len);
+void squat_trie_set_full_len(struct squat_trie *trie, unsigned int len);
+
void squat_trie_refresh(struct squat_trie *trie);
int squat_trie_build_init(struct squat_trie *trie, uint32_t *last_uid_r,
More information about the dovecot-cvs
mailing list