doveadm-fts-lucene.c revision bcb4e51a409d94ae670de96afb8483a4f7855294
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2011-2018 Dovecot authors, see the included COPYING file */
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include "lib.h"
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include "doveadm-dump.h"
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include "doveadm-fts.h"
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include "lucene-wrapper.h"
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen#include <stdio.h>
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include <sys/stat.h>
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainenconst char *doveadm_fts_lucene_plugin_version = DOVECOT_ABI_VERSION;
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainenvoid doveadm_fts_lucene_plugin_init(struct module *module);
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainenvoid doveadm_fts_lucene_plugin_deinit(void);
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen
c0bb6a113c3e5f6af18fbd1b53caa134d20481b8Timo Sirainenstatic void cmd_dump_fts_lucene(int argc ATTR_UNUSED, char *argv[])
e9d0f2284f3a82b9852e52787866cba6b9adbcb6Timo Sirainen{
e9d0f2284f3a82b9852e52787866cba6b9adbcb6Timo Sirainen struct lucene_index *index;
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen struct lucene_index_iter *iter;
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen guid_128_t prev_guid;
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen const struct lucene_index_record *rec;
c0bb6a113c3e5f6af18fbd1b53caa134d20481b8Timo Sirainen bool first = TRUE;
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen i_zero(&prev_guid);
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen index = lucene_index_init(argv[1], NULL, NULL);
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen iter = lucene_index_iter_init(index);
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen while ((rec = lucene_index_iter_next(iter)) != NULL) {
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen if (memcmp(prev_guid, rec->mailbox_guid,
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen sizeof(prev_guid)) != 0) {
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen if (first)
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen first = FALSE;
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen else
1d80017c29866f808c279ba784f70d74dc69b7efTimo Sirainen printf("\n");
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen memcpy(prev_guid, rec->mailbox_guid, sizeof(prev_guid));
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen printf("%s: ", guid_128_to_string(prev_guid));
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen }
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen printf("%u", rec->uid);
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen if (rec->part_num != 0)
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen printf("[%u]", rec->part_num);
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen printf("\n");
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen }
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen printf("\n");
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen if (lucene_index_iter_deinit(&iter) < 0)
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen i_error("Lucene index iteration failed");
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen lucene_index_deinit(index);
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen}
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainen
9ebd0c59de5f8240c0dbc58773fe5679391199dbTimo Sirainenstatic bool test_dump_fts_lucene(const char *path)
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen{
b3f03a6a9232d4e5a8682eff8d37bbcf41c487ecTimo Sirainen struct stat st;
799291e076f181e56599c93b06282156ab695fd6Timo Sirainen
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen path = t_strconcat(path, "/segments.gen", NULL);
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen return stat(path, &st) == 0;
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen}
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen
c11f60090a484c64ece84aba369366620f85c337Timo Sirainenstatic const struct doveadm_cmd_dump doveadm_cmd_dump_fts_lucene = {
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen "fts-lucene",
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen test_dump_fts_lucene,
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen cmd_dump_fts_lucene
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen};
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen
c11f60090a484c64ece84aba369366620f85c337Timo Sirainenvoid doveadm_fts_lucene_plugin_init(struct module *module ATTR_UNUSED)
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen{
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen doveadm_dump_register(&doveadm_cmd_dump_fts_lucene);
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen}
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen
c11f60090a484c64ece84aba369366620f85c337Timo Sirainenvoid doveadm_fts_lucene_plugin_deinit(void)
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen{
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen}
c11f60090a484c64ece84aba369366620f85c337Timo Sirainen