From 8776322310b57a11c52cfb1822f35cf18b095525 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 11 Mar 2014 00:39:27 +0200 Subject: [PATCH] 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. --- src/lib-storage/index/dbox-multi/mdbox-purge.c | 9 +++++++-- src/lib-storage/index/dbox-multi/mdbox-settings.c | 2 ++ src/lib-storage/index/dbox-multi/mdbox-settings.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) 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; }; -- 2.47.3