# HG changeset patch # User Timo Sirainen # Date 1265141975 -7200 # Node ID 2917f019b1798bbaffb8271816554bbc1145652a # Parent b0b63deab22a30c47ee4fa84971068a5c92cae56 mdbox: Removed forced automatic purging for now. It was too ineffecient. diff -r b0b63deab22a -r 2917f019b179 src/lib-storage/index/dbox-multi/mdbox-map.c --- a/src/lib-storage/index/dbox-multi/mdbox-map.c Tue Feb 02 19:03:06 2010 +0200 +++ b/src/lib-storage/index/dbox-multi/mdbox-map.c Tue Feb 02 22:19:35 2010 +0200 @@ -335,48 +335,6 @@ pool_unref(&pool); } -bool dbox_map_want_purge(struct dbox_map *map) -{ - const struct mail_index_header *hdr; - const struct dbox_map_mail_index_record *rec; - const uint16_t *ref16_p; - const void *data; - uoff_t ref0_size, total_size; - bool expunged; - uint32_t seq; - - if (map->set->mdbox_purge_min_percentage >= 100) { - /* we never purge anything */ - return FALSE; - } - - ref0_size = total_size = 0; - hdr = mail_index_get_header(map->view); - for (seq = 1; seq <= hdr->messages_count; seq++) { - mail_index_lookup_ext(map->view, seq, map->map_ext_id, - &data, &expunged); - if (data == NULL || expunged) - continue; - rec = data; - - mail_index_lookup_ext(map->view, seq, map->ref_ext_id, - &data, &expunged); - if (data == NULL || expunged) - continue; - ref16_p = data; - - if (*ref16_p == 0) - ref0_size += rec->size; - total_size += rec->size; - } - - if (ref0_size < DBOX_FORCE_PURGE_MIN_BYTES) - return FALSE; - if ((float)ref0_size / (float)total_size < DBOX_FORCE_PURGE_MIN_RATIO) - return FALSE; - return TRUE; -} - const ARRAY_TYPE(seq_range) *dbox_map_get_zero_ref_files(struct dbox_map *map) { const struct mail_index_header *hdr; diff -r b0b63deab22a -r 2917f019b179 src/lib-storage/index/dbox-multi/mdbox-map.h --- a/src/lib-storage/index/dbox-multi/mdbox-map.h Tue Feb 02 19:03:06 2010 +0200 +++ b/src/lib-storage/index/dbox-multi/mdbox-map.h Tue Feb 02 22:19:35 2010 +0200 @@ -55,8 +55,6 @@ const ARRAY_TYPE(uint32_t) *map_uids, int diff); int dbox_map_remove_file_id(struct dbox_map *map, uint32_t file_id); -/* Returns TRUE if there's enough pressure to purge immediately. */ -bool dbox_map_want_purge(struct dbox_map *map); /* Return all files containing messages with zero refcount. */ const ARRAY_TYPE(seq_range) *dbox_map_get_zero_ref_files(struct dbox_map *map); diff -r b0b63deab22a -r 2917f019b179 src/lib-storage/index/dbox-multi/mdbox-sync.c --- a/src/lib-storage/index/dbox-multi/mdbox-sync.c Tue Feb 02 19:03:06 2010 +0200 +++ b/src/lib-storage/index/dbox-multi/mdbox-sync.c Tue Feb 02 22:19:35 2010 +0200 @@ -106,15 +106,6 @@ struct dbox_map_transaction_context *map_trans; int ret; - /* prevent a user from saving + expunging messages all the time and - using lots of disk space. but avoid doing this in situations where - a user simply expunges a lot of mail for the first time. that's why - we do this calculation before sync, not after: the purging is - triggered only after the second expunge. */ - if ((ctx->flags & MDBOX_SYNC_FLAG_NO_PURGE) == 0 && - dbox_map_want_purge(ctx->mbox->storage->map)) - ctx->purge = TRUE; - map_trans = dbox_map_transaction_begin(ctx->mbox->storage->map, FALSE); ret = dbox_map_update_refcounts(map_trans, &ctx->expunged_map_uids, -1); if (ret == 0) { @@ -282,8 +273,6 @@ mail_index_sync_rollback(&ctx->index_sync_ctx); } - if (ctx->purge) - (void)mdbox_sync_purge(&ctx->mbox->storage->storage.storage); i_free(ctx); return ret; } diff -r b0b63deab22a -r 2917f019b179 src/lib-storage/index/dbox-multi/mdbox-sync.h --- a/src/lib-storage/index/dbox-multi/mdbox-sync.h Tue Feb 02 19:03:06 2010 +0200 +++ b/src/lib-storage/index/dbox-multi/mdbox-sync.h Tue Feb 02 22:19:35 2010 +0200 @@ -22,8 +22,6 @@ /* list of expunged map_uids. the same map_uid may be listed more than once in case message has been copied multiple times to mailbox. */ ARRAY_TYPE(uint32_t) expunged_map_uids; - - unsigned int purge:1; }; int mdbox_sync_begin(struct mdbox_mailbox *mbox, enum mdbox_sync_flags flags,