Mercurial > dovecot > core-2.2
changeset 13221:bf55c954ba3b
fts: Added "doveadm fts optimize" command.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 11 Aug 2011 18:10:33 +0300 |
parents | 19d8ec0db2e3 |
children | 83699b38229b |
files | src/plugins/fts/Makefile.am src/plugins/fts/doveadm-fts.c src/plugins/fts/fts-storage.c src/plugins/fts/fts-storage.h |
diffstat | 4 files changed, 110 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/fts/Makefile.am Thu Aug 11 18:05:56 2011 +0300 +++ b/src/plugins/fts/Makefile.am Thu Aug 11 18:10:33 2011 +0300 @@ -1,13 +1,16 @@ pkglibexecdir = $(libexecdir)/dovecot +doveadm_moduledir = $(moduledir)/doveadm AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/lib-mail \ -I$(top_srcdir)/src/lib-index \ -I$(top_srcdir)/src/lib-storage \ - -I$(top_srcdir)/src/lib-storage/index + -I$(top_srcdir)/src/lib-storage/index \ + -I$(top_srcdir)/src/doveadm NOPLUGIN_LDFLAGS = +lib20_doveadm_fts_plugin_la_LDFLAGS = -module -avoid-version lib20_fts_plugin_la_LDFLAGS = -module -avoid-version module_LTLIBRARIES = \ @@ -47,3 +50,9 @@ pkglibexec_SCRIPTS = decode2text.sh EXTRA_DIST = $(pkglibexec_SCRIPTS) + +doveadm_module_LTLIBRARIES = \ + lib20_doveadm_fts_plugin.la + +lib20_doveadm_fts_plugin_la_SOURCES = \ + doveadm-fts.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/fts/doveadm-fts.c Thu Aug 11 18:10:33 2011 +0300 @@ -0,0 +1,90 @@ +/* Copyright (c) 2011 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "mail-namespace.h" +#include "fts-storage.h" +#include "doveadm-mail.h" + +struct doveadm_fts_cmd_context { + struct doveadm_mail_cmd_context ctx; + bool get_match_me; +}; + +const char *doveadm_fts_plugin_version = DOVECOT_VERSION; + +void doveadm_fts_plugin_init(struct module *module); +void doveadm_fts_plugin_deinit(void); + +static int +fts_namespace_find(struct mail_user *user, const char *ns_prefix, + struct mail_namespace **ns_r) +{ + struct mail_namespace *ns; + + if (ns_prefix == NULL) + ns = mail_namespace_find_inbox(user->namespaces); + else { + ns = mail_namespace_find_prefix(user->namespaces, ns_prefix); + if (ns == NULL) { + i_error("Namespace prefix not found: %s", ns_prefix); + return -1; + } + } + + if (fts_list_backend(ns->list) == NULL) { + i_error("fts not enabled for user's namespace %s", ns_prefix); + return -1; + } + *ns_r = ns; + return 0; +} + +static void +cmd_fts_optimize_run(struct doveadm_mail_cmd_context *ctx, + struct mail_user *user) +{ + const char *ns_prefix = ctx->args[0]; + struct mail_namespace *ns; + struct fts_backend *backend; + + if (fts_namespace_find(user, ns_prefix, &ns) < 0) + return; + backend = fts_list_backend(ns->list); + if (fts_backend_optimize(backend) < 0) + i_error("fts optimize failed"); +} + +static void +cmd_fts_optimize_init(struct doveadm_mail_cmd_context *ctx ATTR_UNUSED, + const char *const args[]) +{ + if (str_array_length(args) > 1) + doveadm_mail_help_name("fts optimize"); +} + +static struct doveadm_mail_cmd_context * +cmd_fts_optimize_alloc(void) +{ + struct doveadm_mail_cmd_context *ctx; + + ctx = doveadm_mail_cmd_alloc(struct doveadm_mail_cmd_context); + ctx->v.run = cmd_fts_optimize_run; + ctx->v.init = cmd_fts_optimize_init; + return ctx; +} + +static struct doveadm_mail_cmd fts_commands[] = { + { cmd_fts_optimize_alloc, "fts optimize", "[<namespace>]" } +}; + +void doveadm_fts_plugin_init(struct module *module ATTR_UNUSED) +{ + unsigned int i; + + for (i = 0; i < N_ELEMENTS(fts_commands); i++) + doveadm_mail_register_cmd(&fts_commands[i]); +} + +void doveadm_fts_plugin_deinit(void) +{ +}
--- a/src/plugins/fts/fts-storage.c Thu Aug 11 18:05:56 2011 +0300 +++ b/src/plugins/fts/fts-storage.c Thu Aug 11 18:10:33 2011 +0300 @@ -528,3 +528,10 @@ return flist->backend; } + +struct fts_backend *fts_list_backend(struct mailbox_list *list) +{ + struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(list); + + return flist == NULL ? NULL : flist->backend; +}
--- a/src/plugins/fts/fts-storage.h Thu Aug 11 18:05:56 2011 +0300 +++ b/src/plugins/fts/fts-storage.h Thu Aug 11 18:10:33 2011 +0300 @@ -44,8 +44,10 @@ void fts_search_analyze(struct fts_search_context *fctx); /* Perform the actual index lookup and update definite_uids and maybe_uids. */ void fts_search_lookup(struct fts_search_context *fctx); -/* Returns FTS backend for the given mailbox. */ +/* Returns FTS backend for the given mailbox (assumes it has one). */ struct fts_backend *fts_mailbox_backend(struct mailbox *box); +/* Returns FTS backend for the given mailbox list, or NULL if it has none. */ +struct fts_backend *fts_list_backend(struct mailbox_list *list); void fts_mail_allocated(struct mail *mail); void fts_mailbox_allocated(struct mailbox *box);