Mercurial > dovecot > core-2.2
changeset 21597:47ab3e3483be
lib-storage: Add mail.mail_stream_opened and .mail_metadata_accessed
These allow determining after mail_*() calls how efficiently they were
performed.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 17 Feb 2017 16:20:06 +0200 |
parents | d99ff372361f |
children | e76e742bfbab |
files | src/lib-storage/index/cydir/cydir-mail.c src/lib-storage/index/dbox-multi/mdbox-mail.c src/lib-storage/index/dbox-single/sdbox-mail.c src/lib-storage/index/imapc/imapc-mail-fetch.c src/lib-storage/index/index-mail.c src/lib-storage/index/maildir/maildir-mail.c src/lib-storage/index/mbox/mbox-mail.c src/lib-storage/index/raw/raw-mail.c src/lib-storage/mail-storage.h |
diffstat | 9 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/cydir/cydir-mail.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/cydir/cydir-mail.c Fri Feb 17 16:20:06 2017 +0200 @@ -25,6 +25,7 @@ mail_set_aborted(mail); return -1; } + mail->mail_metadata_accessed = TRUE; mail->transaction->stats.stat_lookup_count++; path = cydir_mail_get_path(mail);
--- a/src/lib-storage/index/dbox-multi/mdbox-mail.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/dbox-multi/mdbox-mail.c Fri Feb 17 16:20:06 2017 +0200 @@ -106,6 +106,7 @@ mail_set_aborted(_mail); return -1; } + _mail->mail_stream_opened = TRUE; do { if (mail->open_file != NULL) {
--- a/src/lib-storage/index/dbox-single/sdbox-mail.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/dbox-single/sdbox-mail.c Fri Feb 17 16:20:06 2017 +0200 @@ -115,6 +115,7 @@ mail_set_aborted(_mail); return -1; } + _mail->mail_stream_opened = TRUE; ret = sdbox_mail_file_set(mail); if (ret < 0)
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c Fri Feb 17 16:20:06 2017 +0200 @@ -215,6 +215,7 @@ if (_mail->lookup_abort != MAIL_LOOKUP_ABORT_NEVER) return -1; + _mail->mail_stream_opened = TRUE; /* drop any fields that we may already be fetching currently */ fields &= ~mail->fetching_fields;
--- a/src/lib-storage/index/index-mail.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/index-mail.c Fri Feb 17 16:20:06 2017 +0200 @@ -1217,6 +1217,7 @@ _mail->box->vname, _mail->uid, mail->mail.get_stream_reason); } + _mail->mail_stream_opened = TRUE; if (!data->initialized_wrapper_stream && _mail->transaction->stats_track) { @@ -1635,6 +1636,8 @@ mail->mail.mail.has_nuls = FALSE; mail->mail.mail.has_no_nuls = FALSE; mail->mail.mail.saving = FALSE; + mail->mail.mail.mail_stream_opened = FALSE; + mail->mail.mail.mail_metadata_accessed = FALSE; } void index_mail_close(struct mail *_mail)
--- a/src/lib-storage/index/maildir/maildir-mail.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/maildir/maildir-mail.c Fri Feb 17 16:20:06 2017 +0200 @@ -112,6 +112,7 @@ mail_set_aborted(mail); return -1; } + mail->mail_metadata_accessed = TRUE; if (imail->data.access_part != 0 && imail->data.stream == NULL) {
--- a/src/lib-storage/index/mbox/mbox-mail.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/mbox/mbox-mail.c Fri Feb 17 16:20:06 2017 +0200 @@ -47,6 +47,7 @@ mail_set_aborted(_mail); return -1; } + _mail->mail_stream_opened = TRUE; if (mbox->mbox_stream != NULL && istream_raw_mbox_is_corrupted(mbox->mbox_stream)) {
--- a/src/lib-storage/index/raw/raw-mail.c Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/index/raw/raw-mail.c Fri Feb 17 16:20:06 2017 +0200 @@ -18,6 +18,7 @@ mail_set_aborted(mail); return -1; } + mail->mail_metadata_accessed = TRUE; mail->transaction->stats.fstat_lookup_count++; if (i_stream_stat(mail->box->input, TRUE, &st) < 0) {
--- a/src/lib-storage/mail-storage.h Fri Feb 17 16:14:39 2017 +0200 +++ b/src/lib-storage/mail-storage.h Fri Feb 17 16:20:06 2017 +0200 @@ -384,6 +384,16 @@ unsigned int has_nuls:1; /* message data is known to contain NULs */ unsigned int has_no_nuls:1; /* -''- known to not contain NULs */ + /* Mail's header/body stream was opened within this request. + If lookup_abort!=MAIL_LOOKUP_ABORT_NEVER, this can't become TRUE. */ + bool mail_stream_opened:1; + /* Mail's fast metadata was accessed within this request, e.g. the mail + file was stat()ed. If mail_stream_opened==TRUE, this value isn't + accurate anymore, because some backends may always set this when + stream is opened and some don't. If lookup_abort is + MAIL_LOOKUP_ABORT_NOT_IN_CACHE, this can't become TRUE. */ + bool mail_metadata_accessed:1; + /* If the lookup is aborted, error is set to MAIL_ERROR_NOTPOSSIBLE */ enum mail_lookup_abort lookup_abort; };