dovecot-2.2: imapc: Various optimization fixes to fetching messa...
dovecot at dovecot.org
dovecot at dovecot.org
Mon May 4 15:33:17 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/d350a23207c2
changeset: 18512:d350a23207c2
user: Timo Sirainen <tss at iki.fi>
date: Mon May 04 18:31:27 2015 +0300
description:
imapc: Various optimization fixes to fetching messages' virtual size.
diffstat:
src/lib-storage/index/imapc/imapc-mail-fetch.c | 11 ++++++-----
src/lib-storage/index/imapc/imapc-mail.c | 25 ++++++++++++++++++-------
2 files changed, 24 insertions(+), 12 deletions(-)
diffs (96 lines):
diff -r 8f20aa806bcc -r d350a23207c2 src/lib-storage/index/imapc/imapc-mail-fetch.c
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c Mon May 04 18:15:00 2015 +0300
+++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c Mon May 04 18:31:27 2015 +0300
@@ -212,7 +212,7 @@
str_printfa(str, "UID FETCH %u (", _mail->uid);
if ((fields & MAIL_FETCH_RECEIVED_DATE) != 0)
str_append(str, "INTERNALDATE ");
- if ((fields & MAIL_FETCH_PHYSICAL_SIZE) != 0)
+ if ((fields & (MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE)) != 0)
str_append(str, "RFC822.SIZE ");
if ((fields & MAIL_FETCH_GUID) != 0) {
str_append(str, mbox->guid_fetch_field_name);
@@ -296,10 +296,11 @@
if ((data->wanted_fields & MAIL_FETCH_SAVE_DATE) != 0 &&
data->save_date == (time_t)-1 && data->received_date == (time_t)-1)
fields |= MAIL_FETCH_RECEIVED_DATE;
- if ((data->wanted_fields & MAIL_FETCH_PHYSICAL_SIZE) != 0 &&
+ if ((data->wanted_fields & (MAIL_FETCH_PHYSICAL_SIZE |
+ MAIL_FETCH_VIRTUAL_SIZE)) != 0 &&
data->physical_size == (uoff_t)-1 &&
IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_RFC822_SIZE))
- fields |= MAIL_FETCH_PHYSICAL_SIZE;
+ fields |= MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE;
if ((data->wanted_fields & MAIL_FETCH_GUID) != 0 &&
data->guid == NULL && mbox->guid_fetch_field_name != NULL)
fields |= MAIL_FETCH_GUID;
@@ -343,10 +344,10 @@
return FALSE;
fields &= ~MAIL_FETCH_RECEIVED_DATE;
}
- if ((fields & MAIL_FETCH_PHYSICAL_SIZE) != 0) {
+ if ((fields & (MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE)) != 0) {
if (imail->imail.data.physical_size == (uoff_t)-1)
return FALSE;
- fields &= ~MAIL_FETCH_PHYSICAL_SIZE;
+ fields &= ~(MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE);
}
if ((fields & MAIL_FETCH_GUID) != 0) {
if (imail->imail.data.guid == NULL)
diff -r 8f20aa806bcc -r d350a23207c2 src/lib-storage/index/imapc/imapc-mail.c
--- a/src/lib-storage/index/imapc/imapc-mail.c Mon May 04 18:15:00 2015 +0300
+++ b/src/lib-storage/index/imapc/imapc-mail.c Mon May 04 18:31:27 2015 +0300
@@ -125,12 +125,11 @@
uoff_t old_offset;
int ret;
- if (data->physical_size == (uoff_t)-1) {
+ if (data->physical_size == (uoff_t)-1)
(void)index_mail_get_physical_size(_mail, size_r);
- if (data->physical_size != (uoff_t)-1) {
- *size_r = data->physical_size;
- return 0;
- }
+ if (data->physical_size != (uoff_t)-1) {
+ *size_r = data->physical_size;
+ return 0;
}
if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_RFC822_SIZE) &&
@@ -164,6 +163,17 @@
return 0;
}
+static int imapc_mail_get_virtual_size(struct mail *_mail, uoff_t *size_r)
+{
+ struct index_mail *mail = (struct index_mail *)_mail;
+ struct index_mail_data *data = &mail->data;
+
+ if (imapc_mail_get_physical_size(_mail, size_r) < 0)
+ return -1;
+ data->virtual_size = data->physical_size;
+ return 0;
+}
+
static int
imapc_mail_get_header_stream(struct mail *_mail,
struct mailbox_header_lookup_ctx *headers,
@@ -302,7 +312,8 @@
data->save_date = data->received_date;
}
}
- if ((data->wanted_fields & MAIL_FETCH_PHYSICAL_SIZE) != 0) {
+ if ((data->wanted_fields & (MAIL_FETCH_PHYSICAL_SIZE |
+ MAIL_FETCH_VIRTUAL_SIZE)) != 0) {
if (index_mail_get_physical_size(_mail, &size) < 0 &&
!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_RFC822_SIZE))
data->access_part |= READ_HDR | READ_BODY;
@@ -532,7 +543,7 @@
index_mail_get_date,
imapc_mail_get_received_date,
imapc_mail_get_save_date,
- imapc_mail_get_physical_size,
+ imapc_mail_get_virtual_size,
imapc_mail_get_physical_size,
imapc_mail_get_first_header,
imapc_mail_get_headers,
More information about the dovecot-cvs
mailing list