From: Timo Sirainen Date: Tue, 21 Nov 2017 12:13:40 +0000 (+0100) Subject: lib-index: Add mail_index.event X-Git-Tag: 2.3.0.rc1~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=82d158d37db5cfb4e26affe4bc2f2a235901d1b9;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Add mail_index.event --- diff --git a/src/doveadm/doveadm-dump-index.c b/src/doveadm/doveadm-dump-index.c index 4a1833aa93..d42f9f5851 100644 --- a/src/doveadm/doveadm-dump-index.c +++ b/src/doveadm/doveadm-dump-index.c @@ -727,15 +727,15 @@ static struct mail_index *path_open_index(const char *path) if (stat(path, &st) == 0 && S_ISDIR(st.st_mode)) { if (dir_has_index(path, "dovecot.index")) - return mail_index_alloc(path, "dovecot.index"); + return mail_index_alloc(NULL, path, "dovecot.index"); else if (dir_has_index(path, "dovecot.map.index")) - return mail_index_alloc(path, "dovecot.map.index"); + return mail_index_alloc(NULL, path, "dovecot.map.index"); else return NULL; } else if ((p = strrchr(path, '/')) != NULL) - return mail_index_alloc(t_strdup_until(path, p), p + 1); + return mail_index_alloc(NULL, t_strdup_until(path, p), p + 1); else - return mail_index_alloc(".", path); + return mail_index_alloc(NULL, ".", path); } static void cmd_dump_index(int argc ATTR_UNUSED, char *argv[]) diff --git a/src/lib-index/mail-index-alloc-cache.c b/src/lib-index/mail-index-alloc-cache.c index 3b75801ac7..c97e8a95fc 100644 --- a/src/lib-index/mail-index-alloc-cache.c +++ b/src/lib-index/mail-index-alloc-cache.c @@ -134,7 +134,7 @@ mail_index_alloc_cache_find(const char *mailbox_path, const char *index_dir, } struct mail_index * -mail_index_alloc_cache_get(const char *mailbox_path, +mail_index_alloc_cache_get(struct event *parent_event, const char *mailbox_path, const char *index_dir, const char *prefix) { struct mail_index_alloc_cache_list *match; @@ -158,7 +158,8 @@ mail_index_alloc_cache_get(const char *mailbox_path, match = mail_index_alloc_cache_find(mailbox_path, index_dir, &st); if (match == NULL) { - struct mail_index *index = mail_index_alloc(index_dir, prefix); + struct mail_index *index = + mail_index_alloc(parent_event, index_dir, prefix); match = mail_index_alloc_cache_add(index, mailbox_path, &st); } else { match->refcount++; diff --git a/src/lib-index/mail-index-alloc-cache.h b/src/lib-index/mail-index-alloc-cache.h index 888b3096f8..eadfc30f03 100644 --- a/src/lib-index/mail-index-alloc-cache.h +++ b/src/lib-index/mail-index-alloc-cache.h @@ -3,7 +3,7 @@ /* If using in-memory indexes, give index_dir=NULL. */ struct mail_index * ATTR_NULL(1, 2) -mail_index_alloc_cache_get(const char *mailbox_path, +mail_index_alloc_cache_get(struct event *parent_event, const char *mailbox_path, const char *index_dir, const char *prefix); void mail_index_alloc_cache_unref(struct mail_index **index); diff --git a/src/lib-index/mail-index-private.h b/src/lib-index/mail-index-private.h index 63ed2a8e35..b1a94a82c5 100644 --- a/src/lib-index/mail-index-private.h +++ b/src/lib-index/mail-index-private.h @@ -155,6 +155,7 @@ union mail_index_module_context { struct mail_index { char *dir, *prefix; char *cache_dir; + struct event *event; struct mail_cache *cache; struct mail_transaction_log *log; @@ -235,6 +236,7 @@ struct mail_index { }; extern struct mail_index_module_register mail_index_module_register; +extern struct event_category event_category_index; /* Add/replace sync handler for specified extra record. */ void mail_index_register_expunge_handler(struct mail_index *index, diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 468f7087f1..55821f4d97 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -27,6 +27,10 @@ struct mail_index_module_register mail_index_module_register = { 0 }; +struct event_category event_category_index = { + .name = "index", +}; + static void mail_index_close_nonopened(struct mail_index *index); static const struct mail_index_optimization_settings default_optimization_set = { @@ -50,7 +54,8 @@ static const struct mail_index_optimization_settings default_optimization_set = }, }; -struct mail_index *mail_index_alloc(const char *dir, const char *prefix) +struct mail_index *mail_index_alloc(struct event *parent_event, + const char *dir, const char *prefix) { struct mail_index *index; @@ -58,6 +63,8 @@ struct mail_index *mail_index_alloc(const char *dir, const char *prefix) index->dir = i_strdup(dir); index->prefix = i_strdup(prefix); index->fd = -1; + index->event = event_create(parent_event); + event_add_category(index->event, &event_category_index); index->extension_pool = pool_alloconly_create(MEMPOOL_GROWING"index extension", 1024); @@ -101,6 +108,7 @@ void mail_index_free(struct mail_index **_index) array_free(&index->keywords); array_free(&index->module_contexts); + event_unref(&index->event); i_free(index->cache_dir); i_free(index->ext_hdr_init_data); i_free(index->gid_origin); diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index e8348b0197..6ced7e7ced 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -288,7 +288,8 @@ struct mail_index_transaction; struct mail_index_sync_ctx; struct mail_index_view_sync_ctx; -struct mail_index *mail_index_alloc(const char *dir, const char *prefix); +struct mail_index *mail_index_alloc(struct event *parent_event, + const char *dir, const char *prefix); void mail_index_free(struct mail_index **index); /* Change .cache file's directory. */ diff --git a/src/lib-index/test-mail-index-modseq.c b/src/lib-index/test-mail-index-modseq.c index 5c1f7d2e13..a140c3778f 100644 --- a/src/lib-index/test-mail-index-modseq.c +++ b/src/lib-index/test-mail-index-modseq.c @@ -38,7 +38,7 @@ static void test_mail_index_modseq_get_next_log_offset(void) ioloop_time = 1; test_begin("mail_transaction_log_file_get_modseq_next_offset()"); - index = mail_index_alloc(TESTDIR_NAME, "test.dovecot.index"); + index = mail_index_alloc(NULL, TESTDIR_NAME, "test.dovecot.index"); test_assert(mail_index_open_or_create(index, MAIL_INDEX_OPEN_FLAG_CREATE) == 0); view = mail_index_view_open(index); mail_index_modseq_enable(index); diff --git a/src/lib-index/test-mail-transaction-log-file.c b/src/lib-index/test-mail-transaction-log-file.c index 89d4f19c87..a215129b6a 100644 --- a/src/lib-index/test-mail-transaction-log-file.c +++ b/src/lib-index/test-mail-transaction-log-file.c @@ -243,7 +243,7 @@ static void test_mail_transaction_update_modseq(void) static struct mail_index *test_mail_index_open(void) { - struct mail_index *index = mail_index_alloc(NULL, "test.dovecot.index"); + struct mail_index *index = mail_index_alloc(NULL, NULL, "test.dovecot.index"); test_assert(mail_index_open_or_create(index, MAIL_INDEX_OPEN_FLAG_CREATE) == 0); struct mail_index_view *view = mail_index_view_open(index); diff --git a/src/lib-storage/index/dbox-multi/mdbox-map.c b/src/lib-storage/index/dbox-multi/mdbox-map.c index 34b92740b2..ee6b293875 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-map.c +++ b/src/lib-storage/index/dbox-multi/mdbox-map.c @@ -59,7 +59,8 @@ mdbox_map_init(struct mdbox_storage *storage, struct mailbox_list *root_list) map->path = i_strconcat(root, "/"MDBOX_GLOBAL_DIR_NAME, NULL); map->index_path = i_strconcat(index_root, "/"MDBOX_GLOBAL_DIR_NAME, NULL); - map->index = mail_index_alloc(map->index_path, + map->index = mail_index_alloc(storage->storage.storage.user->event, + map->index_path, MDBOX_GLOBAL_INDEX_PREFIX); mail_index_set_fsync_mode(map->index, MAP_STORAGE(map)->set->parsed_fsync_mode, 0); diff --git a/src/lib-storage/index/index-rebuild.c b/src/lib-storage/index/index-rebuild.c index ef234eab20..da5ffa428a 100644 --- a/src/lib-storage/index/index-rebuild.c +++ b/src/lib-storage/index/index-rebuild.c @@ -214,7 +214,8 @@ index_index_rebuild_init(struct mailbox *box, struct mail_index_view *view, /* if backup index file exists, try to use it */ index_dir = mailbox_get_index_path(box); backup_path = t_strconcat(box->index_prefix, ".backup", NULL); - ctx->backup_index = mail_index_alloc(index_dir, backup_path); + ctx->backup_index = mail_index_alloc(box->storage->user->event, + index_dir, backup_path); #ifndef MMAP_CONFLICTS_WRITE if (box->storage->set->mmap_disable) diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index 89cd54dae2..b4b3c83419 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -161,7 +161,8 @@ index_mailbox_alloc_index(struct mailbox *box, struct mail_index **index_r) mailbox_get_path_to(box, MAILBOX_LIST_PATH_TYPE_INDEX, &index_dir) <= 0) index_dir = NULL; - *index_r = mail_index_alloc_cache_get(mailbox_path, index_dir, + *index_r = mail_index_alloc_cache_get(box->storage->user->event, + mailbox_path, index_dir, box->index_prefix); return 0; } diff --git a/src/lib-storage/list/mailbox-list-index.c b/src/lib-storage/list/mailbox-list-index.c index 4d9314ea61..9b8f4f2c1b 100644 --- a/src/lib-storage/list/mailbox-list-index.c +++ b/src/lib-storage/list/mailbox-list-index.c @@ -908,7 +908,8 @@ static void mailbox_list_index_init_finish(struct mailbox_list *list) i_assert(list->set.list_index_fname != NULL); ilist->path = dir == NULL ? "(in-memory mailbox list index)" : p_strdup_printf(list->pool, "%s/%s", dir, list->set.list_index_fname); - ilist->index = mail_index_alloc(dir, list->set.list_index_fname); + ilist->index = mail_index_alloc(list->ns->user->event, + dir, list->set.list_index_fname); ilist->rebuild_on_missing_inbox = (list->ns->flags & NAMESPACE_FLAG_INBOX_ANY) != 0; diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 2530bb0142..dd399f6aaf 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -1384,8 +1384,8 @@ static int mailbox_alloc_index_pvt(struct mailbox *box) if (mailbox_create_missing_dir(box, MAILBOX_LIST_PATH_TYPE_INDEX_PRIVATE) < 0) return -1; - box->index_pvt = mail_index_alloc_cache_get(NULL, index_dir, - t_strconcat(box->index_prefix, ".pvt", NULL)); + box->index_pvt = mail_index_alloc_cache_get(box->storage->user->event, + NULL, index_dir, t_strconcat(box->index_prefix, ".pvt", NULL)); mail_index_set_fsync_mode(box->index_pvt, box->storage->set->parsed_fsync_mode, 0); mail_index_set_lock_method(box->index_pvt, diff --git a/src/lib-storage/test-mail-search-args-simplify.c b/src/lib-storage/test-mail-search-args-simplify.c index 1b6a3e033d..81e05690d5 100644 --- a/src/lib-storage/test-mail-search-args-simplify.c +++ b/src/lib-storage/test-mail-search-args-simplify.c @@ -276,7 +276,7 @@ static void test_mail_search_args_simplify(void) unsigned int i; test_begin("mail search args simplify"); - box.index = mail_index_alloc(NULL, "dovecot.index."); + box.index = mail_index_alloc(NULL, NULL, "dovecot.index."); for (i = 0; i < N_ELEMENTS(tests); i++) { args = test_build_search_args(tests[i].input); /* delay simplification until after init. that way we can test