]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Moved mailbox vsize calculation code to its own file.
authorTimo Sirainen <tss@iki.fi>
Sat, 11 Jul 2015 09:00:38 +0000 (12:00 +0300)
committerTimo Sirainen <tss@iki.fi>
Sat, 11 Jul 2015 09:00:38 +0000 (12:00 +0300)
No functional differences.

src/lib-storage/index/Makefile.am
src/lib-storage/index/index-mailbox-size.c [new file with mode: 0644]
src/lib-storage/index/index-status.c
src/lib-storage/index/index-storage.h

index 4d673ea3f50e96b49a17a4b33a4aebab5ec75d40..92597653b4004d6f000902075d8032e09a3b5c89 100644 (file)
@@ -20,6 +20,7 @@ libstorage_index_la_SOURCES = \
        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 --git a/src/lib-storage/index/index-mailbox-size.c b/src/lib-storage/index/index-mailbox-size.c
new file mode 100644 (file)
index 0000000..226c053
--- /dev/null
@@ -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;
+}
index aa8e98599ddab691499eb70b9956b2e315e89bdf..80d606c0cf2a972363b828e05a0dda06681e1c96 100644 (file)
@@ -261,116 +261,6 @@ static void get_metadata_precache_fields(struct mailbox *box,
        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 @@ int index_mailbox_get_metadata(struct mailbox *box,
        }
 
        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)
index 2e8b1cfe42fd62606cd73b31cb5d7e6a7d71988c..f0501847afc1d4414f3d4a533ecd99f0b0e27ba7 100644 (file)
@@ -117,6 +117,8 @@ void index_storage_get_open_status(struct mailbox *box,
 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,