static int fts_sync_deinit(struct mailbox_sync_context *ctx, struct mailbox_sync_status *status_r) { struct mailbox *box = ctx->box; struct fts_mailbox *fbox = FTS_CONTEXT(box); struct fts_mailbox_list *flist = FTS_LIST_CONTEXT(box->list); bool optimize; int ret = 0; optimize = (ctx->flags & (MAILBOX_SYNC_FLAG_FORCE_RESYNC | MAILBOX_SYNC_FLAG_OPTIMIZE)) != 0; if (fbox->module_ctx.super.sync_deinit(ctx, status_r) < 0) return -1; ctx = NULL; if (optimize) { if (fts_backend_optimize(flist->backend) < 0) { mail_storage_set_critical(box->storage, "FTS optimize for mailbox %s failed", box->vname); ret = -1; } } return ret; }
static int 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) { doveadm_mail_failed_error(ctx, MAIL_ERROR_NOTFOUND); return -1; } backend = fts_list_backend(ns->list); if (fts_backend_optimize(backend) < 0) { i_error("fts optimize failed"); doveadm_mail_failed_error(ctx, MAIL_ERROR_TEMP); return -1; } return 0; }