From: Timo Sirainen Date: Mon, 10 Mar 2014 22:39:27 +0000 (+0200) Subject: mdbox: Added mdbox_purge_preserve_alt setting to keep the file within alt storage... X-Git-Tag: 2.2.13.rc1~210 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8776322310b57a11c52cfb1822f35cf18b095525;p=thirdparty%2Fdovecot%2Fcore.git mdbox: Added mdbox_purge_preserve_alt setting to keep the file within alt storage during purge. Perhaps it would be better for this setting to be the default in v2.3 and maybe be removed entirely? Not a good idea to change during v2.2.x anyway, so for now this is a setting. --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-purge.c b/src/lib-storage/index/dbox-multi/mdbox-purge.c index 7c02b3f247..cee06d92ba 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-purge.c +++ b/src/lib-storage/index/dbox-multi/mdbox-purge.c @@ -165,11 +165,16 @@ mdbox_metadata_get_extrefs(struct dbox_file *file, pool_t ext_refs_pool, } static bool -mdbox_purge_want_altpath(struct mdbox_purge_context *ctx, uint32_t map_uid) +mdbox_purge_want_altpath(struct mdbox_purge_context *ctx, + struct dbox_file *file, uint32_t map_uid) { enum mdbox_msg_action action; void *value; + if (dbox_file_is_in_alt(file) && + ctx->storage->set->mdbox_purge_preserve_alt) + return TRUE; + if (!ctx->have_altmoves) return FALSE; @@ -193,7 +198,7 @@ mdbox_purge_save_msg(struct mdbox_purge_context *ctx, struct dbox_file *file, if (ctx->append_ctx == NULL) ctx->append_ctx = mdbox_map_append_begin(ctx->atomic); - append_flags = !mdbox_purge_want_altpath(ctx, msg->map_uid) ? 0 : + append_flags = !mdbox_purge_want_altpath(ctx, file, msg->map_uid) ? 0 : DBOX_MAP_APPEND_FLAG_ALT; msg_size = file->msg_header_size + file->cur_physical_size; if (mdbox_map_append_next(ctx->append_ctx, file->cur_physical_size, diff --git a/src/lib-storage/index/dbox-multi/mdbox-settings.c b/src/lib-storage/index/dbox-multi/mdbox-settings.c index ffafcca70e..947018a2f4 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-settings.c +++ b/src/lib-storage/index/dbox-multi/mdbox-settings.c @@ -13,6 +13,7 @@ static const struct setting_define mdbox_setting_defines[] = { DEF(SET_BOOL, mdbox_preallocate_space), + DEF(SET_BOOL, mdbox_purge_preserve_alt), DEF(SET_SIZE, mdbox_rotate_size), DEF(SET_TIME, mdbox_rotate_interval), @@ -21,6 +22,7 @@ static const struct setting_define mdbox_setting_defines[] = { static const struct mdbox_settings mdbox_default_settings = { .mdbox_preallocate_space = FALSE, + .mdbox_purge_preserve_alt = FALSE, .mdbox_rotate_size = 2*1024*1024, .mdbox_rotate_interval = 0 }; diff --git a/src/lib-storage/index/dbox-multi/mdbox-settings.h b/src/lib-storage/index/dbox-multi/mdbox-settings.h index 353da69618..80aefa2e28 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-settings.h +++ b/src/lib-storage/index/dbox-multi/mdbox-settings.h @@ -3,6 +3,7 @@ struct mdbox_settings { bool mdbox_preallocate_space; + bool mdbox_purge_preserve_alt; uoff_t mdbox_rotate_size; unsigned int mdbox_rotate_interval; };