Mercurial > dovecot > core-2.2
changeset 13250:b7a6573dacca
lib-storage: Moved stats_* from mail to transaction.
With the API changes to search, having them in mail doesn't make sense
anymore, since mailbox_search_next() can return multiple different mails
with different stats.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 16 Aug 2011 17:02:08 +0300 |
parents | 3936152ecc03 |
children | 390f69281fb8 |
files | src/lib-storage/index/cydir/cydir-mail.c src/lib-storage/index/dbox-common/dbox-mail.c src/lib-storage/index/dbox-multi/mdbox-mail.c src/lib-storage/index/dbox-single/sdbox-mail.c src/lib-storage/index/index-mail-headers.c src/lib-storage/index/index-mail.c src/lib-storage/index/index-search.c src/lib-storage/index/istream-mail-stats.c src/lib-storage/index/istream-mail-stats.h src/lib-storage/index/maildir/maildir-mail.c src/lib-storage/index/raw/raw-mail.c src/lib-storage/mail-storage-private.h |
diffstat | 12 files changed, 54 insertions(+), 58 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/cydir/cydir-mail.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/cydir/cydir-mail.c Tue Aug 16 17:02:08 2011 +0300 @@ -20,13 +20,12 @@ static int cydir_mail_stat(struct mail *mail, struct stat *st_r) { - struct mail_private *p = (struct mail_private *)mail; const char *path; if (mail->lookup_abort == MAIL_LOOKUP_ABORT_NOT_IN_CACHE) return mail_set_aborted(mail); - p->stats_stat_lookup_count++; + mail->transaction->stats_stat_lookup_count++; path = cydir_mail_get_path(mail); if (stat(path, st_r) < 0) { if (errno == ENOENT) @@ -100,7 +99,7 @@ int fd; if (mail->data.stream == NULL) { - mail->mail.stats_open_lookup_count++; + _mail->transaction->stats_open_lookup_count++; path = cydir_mail_get_path(_mail); fd = open(path, O_RDONLY); if (fd == -1) {
--- a/src/lib-storage/index/dbox-common/dbox-mail.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/dbox-common/dbox-mail.c Tue Aug 16 17:02:08 2011 +0300 @@ -145,7 +145,7 @@ if (storage->v.mail_open(mail, &offset, &file) < 0) return -1; - mail->imail.mail.stats_fstat_lookup_count++; + _mail->transaction->stats_fstat_lookup_count++; if (dbox_file_stat(file, &st) < 0) { if (errno == ENOENT) mail_set_expunged(_mail);
--- a/src/lib-storage/index/dbox-multi/mdbox-mail.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/dbox-multi/mdbox-mail.c Tue Aug 16 17:02:08 2011 +0300 @@ -126,7 +126,7 @@ } if (!dbox_file_is_open(mail->open_file)) - mail->imail.mail.stats_open_lookup_count++; + _mail->transaction->stats_open_lookup_count++; if (dbox_file_open(mail->open_file, &deleted) <= 0) return -1; if (deleted) {
--- a/src/lib-storage/index/dbox-single/sdbox-mail.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/dbox-single/sdbox-mail.c Tue Aug 16 17:02:08 2011 +0300 @@ -68,7 +68,7 @@ if (!sdbox_mail_file_set(mail)) { if (!dbox_file_is_open(mail->open_file)) - mail->imail.mail.stats_open_lookup_count++; + _mail->transaction->stats_open_lookup_count++; if (dbox_file_open(mail->open_file, &deleted) <= 0) return -1; if (deleted) {
--- a/src/lib-storage/index/index-mail-headers.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/index-mail-headers.c Tue Aug 16 17:02:08 2011 +0300 @@ -625,7 +625,7 @@ *value_r = index_mail_get_parsed_header(mail, field_idx); return 0; } - mail->mail.stats_cache_hit_count++; + _mail->transaction->stats_cache_hit_count++; data = buffer_get_modifiable_data(dest, &len); if (len == 0) { @@ -807,7 +807,7 @@ if (mail_cache_lookup_headers(_mail->transaction->cache_view, dest, _mail->seq, headers->idx, headers->count) > 0) { - mail->mail.stats_cache_hit_count++; + _mail->transaction->stats_cache_hit_count++; if (mail->data.filter_stream != NULL) i_stream_destroy(&mail->data.filter_stream); mail->data.filter_stream =
--- a/src/lib-storage/index/index-mail.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/index-mail.c Tue Aug 16 17:02:08 2011 +0300 @@ -50,7 +50,7 @@ ret = mail_cache_lookup_field(mail->mail.mail.transaction->cache_view, buf, mail->data.seq, field_idx); if (ret > 0) - mail->mail.stats_cache_hit_count++; + mail->mail.mail.transaction->stats_cache_hit_count++; return ret; } @@ -830,12 +830,14 @@ struct message_size *body_size, struct istream **stream_r) { + struct mail *_mail = &mail->mail.mail; struct index_mail_data *data = &mail->data; struct istream *input; int ret; - if (!data->initialized_wrapper_stream && mail->mail.stats_track) { - input = i_stream_create_mail_stats_counter(&mail->mail, + if (!data->initialized_wrapper_stream && + _mail->transaction->stats_track) { + input = i_stream_create_mail_stats_counter(_mail->transaction, data->stream); i_stream_unref(&data->stream); data->stream = input;
--- a/src/lib-storage/index/index-search.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/index-search.c Tue Aug 16 17:02:08 2011 +0300 @@ -1184,41 +1184,36 @@ array_free(&ctx->mail_ctx.results); array_free(&ctx->mail_ctx.module_contexts); - array_foreach_modifiable(&ctx->mails, mailp) { - struct index_mail *imail = (struct index_mail *)*mailp; - - imail->search_mail = FALSE; + array_foreach_modifiable(&ctx->mails, mailp) mail_free(mailp); - } array_free(&ctx->mails); i_free(ctx); return ret; } -static unsigned long long search_mail_get_cost(struct mail_private *mail) +static unsigned long long +search_get_cost(struct mailbox_transaction_context *trans) { - return mail->stats_open_lookup_count * SEARCH_COST_DENTRY + - mail->stats_stat_lookup_count * SEARCH_COST_DENTRY + - mail->stats_fstat_lookup_count * SEARCH_COST_ATTR + - mail->stats_cache_hit_count * SEARCH_COST_CACHE + - mail->stats_files_read_count * SEARCH_COST_FILES_READ + - (mail->stats_files_read_bytes/1024) * SEARCH_COST_KBYTE; + return trans->stats_open_lookup_count * SEARCH_COST_DENTRY + + trans->stats_stat_lookup_count * SEARCH_COST_DENTRY + + trans->stats_fstat_lookup_count * SEARCH_COST_ATTR + + trans->stats_cache_hit_count * SEARCH_COST_CACHE + + trans->stats_files_read_count * SEARCH_COST_FILES_READ + + (trans->stats_files_read_bytes/1024) * SEARCH_COST_KBYTE; } static int search_match_once(struct index_search_context *ctx) { - struct mail_private *mail_private = - (struct mail_private *)ctx->cur_mail; unsigned long long cost1, cost2; int ret; - cost1 = search_mail_get_cost(mail_private); + cost1 = search_get_cost(ctx->cur_mail->transaction); ret = mail_search_args_foreach(ctx->mail_ctx.args->args, search_cached_arg, ctx); if (ret < 0) ret = search_arg_match_text(ctx->mail_ctx.args->args, ctx); - cost2 = search_mail_get_cost(mail_private); + cost2 = search_get_cost(ctx->cur_mail->transaction); ctx->cost += cost2 - cost1; return ret; } @@ -1471,7 +1466,7 @@ ctx->mail_ctx.wanted_headers); imail = (struct index_mail *)mail; imail->search_mail = TRUE; - imail->mail.stats_track = TRUE; + ctx->mail_ctx.transaction->stats_track = TRUE; array_append(&ctx->mails, &mail, 1); return mail;
--- a/src/lib-storage/index/istream-mail-stats.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/istream-mail-stats.c Tue Aug 16 17:02:08 2011 +0300 @@ -8,7 +8,7 @@ struct mail_stats_istream { struct istream_private istream; - struct mail_private *mail; + struct mailbox_transaction_context *trans; unsigned int files_read_increased:1; }; @@ -24,10 +24,10 @@ ret = i_stream_read_copy_from_parent(&stream->istream); if (ret > 0) { - mstream->mail->stats_files_read_bytes += ret; + mstream->trans->stats_files_read_bytes += ret; if (!mstream->files_read_increased) { mstream->files_read_increased = TRUE; - mstream->mail->stats_files_read_count++; + mstream->trans->stats_files_read_count++; } } return ret; @@ -47,13 +47,14 @@ return i_stream_stat(stream->parent, exact); } -struct istream *i_stream_create_mail_stats_counter(struct mail_private *mail, - struct istream *input) +struct istream * +i_stream_create_mail_stats_counter(struct mailbox_transaction_context *trans, + struct istream *input) { struct mail_stats_istream *mstream; mstream = i_new(struct mail_stats_istream, 1); - mstream->mail = mail; + mstream->trans = trans; mstream->istream.max_buffer_size = input->real_stream->max_buffer_size; mstream->istream.parent = input;
--- a/src/lib-storage/index/istream-mail-stats.h Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/istream-mail-stats.h Tue Aug 16 17:02:08 2011 +0300 @@ -1,7 +1,8 @@ #ifndef ISTREAM_MAIL_STATS_H #define ISTREAM_MAIL_STATS_H -struct istream *i_stream_create_mail_stats_counter(struct mail_private *mail, - struct istream *input); +struct istream * +i_stream_create_mail_stats_counter(struct mailbox_transaction_context *trans, + struct istream *input); #endif
--- a/src/lib-storage/index/maildir/maildir-mail.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/maildir/maildir-mail.c Tue Aug 16 17:02:08 2011 +0300 @@ -62,7 +62,6 @@ maildir_open_mail(struct maildir_mailbox *mbox, struct mail *mail, bool *deleted_r) { - struct mail_private *p = (struct mail_private *)mail; struct istream *input; const char *path; struct maildir_open_context ctx; @@ -72,7 +71,7 @@ ctx.fd = -1; ctx.path = NULL; - p->stats_open_lookup_count++; + mail->transaction->stats_open_lookup_count++; if (!mail->saving) { if (maildir_file_do(mbox, mail->uid, do_open, &ctx) < 0) return NULL; @@ -121,13 +120,13 @@ } if (imail->data.stream != NULL) { - imail->mail.stats_fstat_lookup_count++; + mail->transaction->stats_fstat_lookup_count++; stp = i_stream_stat(imail->data.stream, FALSE); if (stp == NULL) return -1; *st = *stp; } else if (!mail->saving) { - imail->mail.stats_stat_lookup_count++; + mail->transaction->stats_stat_lookup_count++; ret = maildir_file_do(mbox, mail->uid, do_stat, st); if (ret <= 0) { if (ret == 0) @@ -135,7 +134,7 @@ return -1; } } else { - imail->mail.stats_stat_lookup_count++; + mail->transaction->stats_stat_lookup_count++; path = maildir_save_file_get_path(mail->transaction, mail->seq); if (stat(path, st) < 0) { mail_storage_set_critical(mail->box->storage,
--- a/src/lib-storage/index/raw/raw-mail.c Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/index/raw/raw-mail.c Tue Aug 16 17:02:08 2011 +0300 @@ -12,13 +12,12 @@ static int raw_mail_stat(struct mail *mail) { struct raw_mailbox *mbox = (struct raw_mailbox *)mail->box; - struct mail_private *p = (struct mail_private *)mail; const struct stat *st; if (mail->lookup_abort == MAIL_LOOKUP_ABORT_NOT_IN_CACHE) return mail_set_aborted(mail); - p->stats_fstat_lookup_count++; + mail->transaction->stats_fstat_lookup_count++; st = i_stream_stat(mail->box->input, TRUE); if (st == NULL) { mail_storage_set_critical(mail->box->storage,
--- a/src/lib-storage/mail-storage-private.h Tue Aug 16 16:59:40 2011 +0300 +++ b/src/lib-storage/mail-storage-private.h Tue Aug 16 17:02:08 2011 +0300 @@ -333,21 +333,6 @@ pool_t pool; ARRAY_DEFINE(module_contexts, union mail_module_context *); - - /* these statistics are never reset by mail-storage API: */ - - unsigned long stats_open_lookup_count; - unsigned long stats_stat_lookup_count; - unsigned long stats_fstat_lookup_count; - /* number of files we've opened and read */ - unsigned long stats_files_read_count; - /* number of bytes we've had to read from files */ - unsigned long long stats_files_read_bytes; - /* number of cache lookup hits */ - unsigned long stats_cache_hit_count; - - /* Set to TRUE to update stats_* fields */ - unsigned int stats_track:1; }; struct mailbox_list_context { @@ -380,6 +365,21 @@ union mailbox_transaction_module_context *); struct mail_save_context *save_ctx; + + /* these statistics are never reset by mail-storage API: */ + + unsigned long stats_open_lookup_count; + unsigned long stats_stat_lookup_count; + unsigned long stats_fstat_lookup_count; + /* number of files we've opened and read */ + unsigned long stats_files_read_count; + /* number of bytes we've had to read from files */ + unsigned long long stats_files_read_bytes; + /* number of cache lookup hits */ + unsigned long stats_cache_hit_count; + + /* Set to TRUE to update stats_* fields */ + unsigned int stats_track:1; }; union mail_search_module_context {