# HG changeset patch # User Timo Sirainen # Date 1277242030 -3600 # Node ID 7ad62742116d7793cb90f262bb65f0aa33127bf6 # Parent 6fca3a8622f829409cd436c8d6ece7e863b0ebe3 mdbox: Removed broken optimization from storage rebuild, possibly causing broken results. diff -r 6fca3a8622f8 -r 7ad62742116d src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c --- a/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c Tue Jun 22 21:38:18 2010 +0100 +++ b/src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c Tue Jun 22 22:27:10 2010 +0100 @@ -45,7 +45,6 @@ ARRAY_DEFINE(msgs, struct mdbox_rebuild_msg *); uint32_t rebuild_count; - uint32_t prev_file_id; uint32_t highest_seen_map_uid; struct mailbox_list *default_list; @@ -54,8 +53,6 @@ struct mail_index_transaction *trans; struct rebuild_msg_mailbox prev_msg; - - unsigned int msgs_unsorted:1; }; static unsigned int guid_hash(const void *p) @@ -143,7 +140,7 @@ } static int rebuild_file_mails(struct mdbox_storage_rebuild_context *ctx, - struct dbox_file *file) + struct dbox_file *file, uint32_t file_id) { const char *guid; struct mdbox_rebuild_msg *rec; @@ -193,7 +190,7 @@ } rec = p_new(ctx->pool, struct mdbox_rebuild_msg, 1); - rec->file_id = ctx->prev_file_id; + rec->file_id = file_id; rec->offset = offset; rec->size = file->input->v_offset - offset; mail_generate_guid_128_hash(guid, rec->guid_128); @@ -241,15 +238,9 @@ return 0; } - /* small optimization: typically files are returned sorted. in that - case we don't need to sort them ourself. */ - if (file_id < ctx->prev_file_id) - ctx->msgs_unsorted = TRUE; - ctx->prev_file_id = file_id; - file = mdbox_file_init(ctx->storage, file_id); if ((ret = dbox_file_open(file, &deleted)) > 0 && !deleted) - ret = rebuild_file_mails(ctx, file); + ret = rebuild_file_mails(ctx, file, file_id); if (ret == 0) i_error("mdbox rebuild: Failed to fix file %s", path); dbox_file_unref(&file); @@ -293,8 +284,7 @@ uint32_t seq; unsigned int count; - if (ctx->msgs_unsorted) - array_sort(&ctx->msgs, mdbox_rebuild_msg_offset_cmp); + array_sort(&ctx->msgs, mdbox_rebuild_msg_offset_cmp); msgs = array_get_modifiable(&ctx->msgs, &count); hdr = mail_index_get_header(ctx->sync_view);