changeset 19631:97f82dbd71e7

imapc: Prefetching shouldn't send FETCH requests for headers that are already cached.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 25 Jan 2016 10:26:17 +0200
parents 82cf8a00c369
children 727307a98574
files src/lib-storage/index/imapc/imapc-mail-fetch.c src/lib-storage/index/imapc/imapc-mail.c src/lib-storage/index/imapc/imapc-mail.h
diffstat 3 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c	Sun Jan 24 22:12:30 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c	Mon Jan 25 10:26:17 2016 +0200
@@ -331,7 +331,9 @@
 	imapc_mail_update_access_parts(&mail->imail);
 
 	fields = imapc_mail_get_wanted_fetch_fields(mail);
-	if (fields != 0 || data->wanted_headers != NULL) T_BEGIN {
+	if (fields != 0 ||
+	    (data->wanted_headers != NULL &&
+	     !imapc_mail_has_headers_in_cache(&mail->imail, data->wanted_headers))) T_BEGIN {
 		if (imapc_mail_send_fetch(_mail, fields,
 					  data->wanted_headers == NULL ? NULL :
 					  data->wanted_headers->name) > 0)
--- a/src/lib-storage/index/imapc/imapc-mail.c	Sun Jan 24 22:12:30 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-mail.c	Mon Jan 25 10:26:17 2016 +0200
@@ -299,9 +299,8 @@
 				      stream_r);
 }
 
-static bool
-imapc_mail_has_headers_in_cache(struct index_mail *mail,
-				struct mailbox_header_lookup_ctx *headers)
+bool imapc_mail_has_headers_in_cache(struct index_mail *mail,
+				     struct mailbox_header_lookup_ctx *headers)
 {
 	struct mail *_mail = &mail->mail.mail;
 	unsigned int i;
--- a/src/lib-storage/index/imapc/imapc-mail.h	Sun Jan 24 22:12:30 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-mail.h	Mon Jan 25 10:26:17 2016 +0200
@@ -34,6 +34,8 @@
 bool imapc_mail_prefetch(struct mail *mail);
 void imapc_mail_fetch_flush(struct imapc_mailbox *mbox);
 void imapc_mail_init_stream(struct imapc_mail *mail);
+bool imapc_mail_has_headers_in_cache(struct index_mail *mail,
+				     struct mailbox_header_lookup_ctx *headers);
 
 void imapc_mail_fetch_update(struct imapc_mail *mail,
 			     const struct imapc_untagged_reply *reply,