dovecot-2.2: lib-storage: Moved mailbox vsize calculation code t...

dovecot at dovecot.org dovecot at dovecot.org
Sat Jul 11 09:20:12 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/819649386f93
changeset: 18902:819649386f93
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Jul 11 12:00:38 2015 +0300
description:
lib-storage: Moved mailbox vsize calculation code to its own file.
No functional differences.

diffstat:

 src/lib-storage/index/Makefile.am          |    1 +
 src/lib-storage/index/index-mailbox-size.c |  114 +++++++++++++++++++++++++++++
 src/lib-storage/index/index-status.c       |  112 +----------------------------
 src/lib-storage/index/index-storage.h      |    2 +
 4 files changed, 118 insertions(+), 111 deletions(-)

diffs (270 lines):

diff -r 02088971322e -r 819649386f93 src/lib-storage/index/Makefile.am
--- a/src/lib-storage/index/Makefile.am	Fri Jul 03 13:55:17 2015 +0300
+++ b/src/lib-storage/index/Makefile.am	Sat Jul 11 12:00:38 2015 +0300
@@ -20,6 +20,7 @@
 	index-mail-binary.c \
 	index-mail-headers.c \
 	index-mailbox-check.c \
+	index-mailbox-size.c \
 	index-rebuild.c \
 	index-search.c \
 	index-search-result.c \
diff -r 02088971322e -r 819649386f93 src/lib-storage/index/index-mailbox-size.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-storage/index/index-mailbox-size.c	Sat Jul 11 12:00:38 2015 +0300
@@ -0,0 +1,114 @@
+/* Copyright (c) 2002-2015 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "mail-search-build.h"
+#include "index-storage.h"
+
+static int
+virtual_size_add_new(struct mailbox *box,
+		     struct index_vsize_header *vsize_hdr)
+{
+	struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
+	const struct mail_index_header *hdr;
+	struct mailbox_transaction_context *trans;
+	struct mail_search_context *search_ctx;
+	struct mail_search_args *search_args;
+	struct mail *mail;
+	uint32_t seq1, seq2;
+	uoff_t vsize;
+	int ret = 0;
+
+	hdr = mail_index_get_header(box->view);
+	if (vsize_hdr->highest_uid == 0)
+		seq2 = 0;
+	else if (!mail_index_lookup_seq_range(box->view, 1,
+					      vsize_hdr->highest_uid,
+					      &seq1, &seq2))
+		seq2 = 0;
+
+	if (vsize_hdr->message_count != seq2) {
+		if (vsize_hdr->message_count < seq2) {
+			mail_storage_set_critical(box->storage,
+				"vsize-hdr has invalid message-count (%u < %u)",
+				vsize_hdr->message_count, seq2);
+		} else {
+			/* some messages have been expunged, rescan */
+		}
+		memset(vsize_hdr, 0, sizeof(*vsize_hdr));
+		seq2 = 0;
+	}
+
+	search_args = mail_search_build_init();
+	mail_search_build_add_seqset(search_args, seq2 + 1,
+				     hdr->messages_count);
+
+	trans = mailbox_transaction_begin(box, 0);
+	search_ctx = mailbox_search_init(trans, search_args, NULL,
+					 MAIL_FETCH_VIRTUAL_SIZE, NULL);
+	while (mailbox_search_next(search_ctx, &mail)) {
+		if (mail_get_virtual_size(mail, &vsize) < 0) {
+			if (mail->expunged)
+				continue;
+			ret = -1;
+			break;
+		}
+		vsize_hdr->vsize += vsize;
+		vsize_hdr->highest_uid = mail->uid;
+		vsize_hdr->message_count++;
+	}
+	if (mailbox_search_deinit(&search_ctx) < 0)
+		ret = -1;
+	mail_search_args_unref(&search_args);
+
+	if (ret == 0) {
+		/* success, cache all */
+		vsize_hdr->highest_uid = hdr->next_uid - 1;
+	} else {
+		/* search failed, cache only up to highest seen uid */
+	}
+	mail_index_update_header_ext(trans->itrans, ibox->vsize_hdr_ext_id,
+				     0, vsize_hdr, sizeof(*vsize_hdr));
+	(void)mailbox_transaction_commit(&trans);
+	return ret;
+}
+
+int index_mailbox_get_virtual_size(struct mailbox *box,
+				   struct mailbox_metadata *metadata_r)
+{
+	struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
+	struct index_vsize_header vsize_hdr;
+	struct mailbox_status status;
+	const void *data;
+	size_t size;
+	int ret;
+
+	mailbox_get_open_status(box, STATUS_MESSAGES | STATUS_UIDNEXT, &status);
+	mail_index_get_header_ext(box->view, ibox->vsize_hdr_ext_id,
+				  &data, &size);
+	if (size == sizeof(vsize_hdr))
+		memcpy(&vsize_hdr, data, sizeof(vsize_hdr));
+	else {
+		if (size != 0) {
+			mail_storage_set_critical(box->storage,
+				"vsize-hdr has invalid size: %"PRIuSIZE_T,
+				size);
+		}
+		memset(&vsize_hdr, 0, sizeof(vsize_hdr));
+	}
+
+	if (vsize_hdr.highest_uid + 1 == status.uidnext &&
+	    vsize_hdr.message_count == status.messages) {
+		/* up to date */
+		metadata_r->virtual_size = vsize_hdr.vsize;
+		return 0;
+	}
+	if (vsize_hdr.highest_uid >= status.uidnext) {
+		mail_storage_set_critical(box->storage,
+			"vsize-hdr has invalid highest-uid (%u >= %u)",
+			vsize_hdr.highest_uid, status.uidnext);
+		memset(&vsize_hdr, 0, sizeof(vsize_hdr));
+	}
+	ret = virtual_size_add_new(box, &vsize_hdr);
+	metadata_r->virtual_size = vsize_hdr.vsize;
+	return ret;
+}
diff -r 02088971322e -r 819649386f93 src/lib-storage/index/index-status.c
--- a/src/lib-storage/index/index-status.c	Fri Jul 03 13:55:17 2015 +0300
+++ b/src/lib-storage/index/index-status.c	Sat Jul 11 12:00:38 2015 +0300
@@ -261,116 +261,6 @@
 	metadata_r->precache_fields = cache;
 }
 
-static int
-virtual_size_add_new(struct mailbox *box,
-		     struct index_vsize_header *vsize_hdr)
-{
-	struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
-	const struct mail_index_header *hdr;
-	struct mailbox_transaction_context *trans;
-	struct mail_search_context *search_ctx;
-	struct mail_search_args *search_args;
-	struct mail *mail;
-	uint32_t seq1, seq2;
-	uoff_t vsize;
-	int ret = 0;
-
-	hdr = mail_index_get_header(box->view);
-	if (vsize_hdr->highest_uid == 0)
-		seq2 = 0;
-	else if (!mail_index_lookup_seq_range(box->view, 1,
-					      vsize_hdr->highest_uid,
-					      &seq1, &seq2))
-		seq2 = 0;
-
-	if (vsize_hdr->message_count != seq2) {
-		if (vsize_hdr->message_count < seq2) {
-			mail_storage_set_critical(box->storage,
-				"vsize-hdr has invalid message-count (%u < %u)",
-				vsize_hdr->message_count, seq2);
-		} else {
-			/* some messages have been expunged, rescan */
-		}
-		memset(vsize_hdr, 0, sizeof(*vsize_hdr));
-		seq2 = 0;
-	}
-
-	search_args = mail_search_build_init();
-	mail_search_build_add_seqset(search_args, seq2 + 1,
-				     hdr->messages_count);
-
-	trans = mailbox_transaction_begin(box, 0);
-	search_ctx = mailbox_search_init(trans, search_args, NULL,
-					 MAIL_FETCH_VIRTUAL_SIZE, NULL);
-	while (mailbox_search_next(search_ctx, &mail)) {
-		if (mail_get_virtual_size(mail, &vsize) < 0) {
-			if (mail->expunged)
-				continue;
-			ret = -1;
-			break;
-		}
-		vsize_hdr->vsize += vsize;
-		vsize_hdr->highest_uid = mail->uid;
-		vsize_hdr->message_count++;
-	}
-	if (mailbox_search_deinit(&search_ctx) < 0)
-		ret = -1;
-	mail_search_args_unref(&search_args);
-
-	if (ret == 0) {
-		/* success, cache all */
-		vsize_hdr->highest_uid = hdr->next_uid - 1;
-	} else {
-		/* search failed, cache only up to highest seen uid */
-	}
-	mail_index_update_header_ext(trans->itrans, ibox->vsize_hdr_ext_id,
-				     0, vsize_hdr, sizeof(*vsize_hdr));
-	(void)mailbox_transaction_commit(&trans);
-	return ret;
-}
-
-static int
-get_metadata_virtual_size(struct mailbox *box,
-			  struct mailbox_metadata *metadata_r)
-{
-	struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
-	struct index_vsize_header vsize_hdr;
-	struct mailbox_status status;
-	const void *data;
-	size_t size;
-	int ret;
-
-	mailbox_get_open_status(box, STATUS_MESSAGES | STATUS_UIDNEXT, &status);
-	mail_index_get_header_ext(box->view, ibox->vsize_hdr_ext_id,
-				  &data, &size);
-	if (size == sizeof(vsize_hdr))
-		memcpy(&vsize_hdr, data, sizeof(vsize_hdr));
-	else {
-		if (size != 0) {
-			mail_storage_set_critical(box->storage,
-				"vsize-hdr has invalid size: %"PRIuSIZE_T,
-				size);
-		}
-		memset(&vsize_hdr, 0, sizeof(vsize_hdr));
-	}
-
-	if (vsize_hdr.highest_uid + 1 == status.uidnext &&
-	    vsize_hdr.message_count == status.messages) {
-		/* up to date */
-		metadata_r->virtual_size = vsize_hdr.vsize;
-		return 0;
-	}
-	if (vsize_hdr.highest_uid >= status.uidnext) {
-		mail_storage_set_critical(box->storage,
-			"vsize-hdr has invalid highest-uid (%u >= %u)",
-			vsize_hdr.highest_uid, status.uidnext);
-		memset(&vsize_hdr, 0, sizeof(vsize_hdr));
-	}
-	ret = virtual_size_add_new(box, &vsize_hdr);
-	metadata_r->virtual_size = vsize_hdr.vsize;
-	return ret;
-}
-
 int index_mailbox_get_metadata(struct mailbox *box,
 			       enum mailbox_metadata_items items,
 			       struct mailbox_metadata *metadata_r)
@@ -396,7 +286,7 @@
 	}
 
 	if ((items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0) {
-		if (get_metadata_virtual_size(box, metadata_r) < 0)
+		if (index_mailbox_get_virtual_size(box, metadata_r) < 0)
 			return -1;
 	}
 	if ((items & MAILBOX_METADATA_CACHE_FIELDS) != 0)
diff -r 02088971322e -r 819649386f93 src/lib-storage/index/index-storage.h
--- a/src/lib-storage/index/index-storage.h	Fri Jul 03 13:55:17 2015 +0300
+++ b/src/lib-storage/index/index-storage.h	Sat Jul 11 12:00:38 2015 +0300
@@ -117,6 +117,8 @@
 int index_mailbox_get_metadata(struct mailbox *box,
 			       enum mailbox_metadata_items items,
 			       struct mailbox_metadata *metadata_r);
+int index_mailbox_get_virtual_size(struct mailbox *box,
+				   struct mailbox_metadata *metadata_r);
 
 int index_storage_attribute_set(struct mailbox_transaction_context *t,
 				enum mail_attribute_type type, const char *key,


More information about the dovecot-cvs mailing list