From: Timo Sirainen Date: Tue, 2 Feb 2010 17:03:06 +0000 (+0200) Subject: mdbox_rotate_days changed to mdbox_rotate_interval, supporting one second resolution. X-Git-Tag: 2.0.beta3~168 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9ff39148453aa6db8887ec1cde46bd7489109c09;p=thirdparty%2Fdovecot%2Fcore.git mdbox_rotate_days changed to mdbox_rotate_interval, supporting one second resolution. --HG-- branch : HEAD --- diff --git a/doc/example-config/conf.d/mail.conf b/doc/example-config/conf.d/mail.conf index 963369f038..ef35f468d5 100644 --- a/doc/example-config/conf.d/mail.conf +++ b/doc/example-config/conf.d/mail.conf @@ -310,9 +310,9 @@ # Minimum dbox file size before it's rotated (overrides mdbox_rotate_days) #mdbox_rotate_min_size = 16k -# Maximum dbox file age in days until it's rotated. Day always begins from -# midnight, so 1 = today, 2 = yesterday, etc. 0 = check disabled. -#mdbox_rotate_days = 0 +# Maximum dbox file age until it's rotated. Typically in days. Day begins +# from midnight, so 1d = today, 2d = yesterday, etc. 0 = check disabled. +#mdbox_rotate_interval = 1d # Don't purge a dbox file until this many % of it contains expunged messages. # 0 purges always, 100 purges never. diff --git a/src/lib-storage/index/dbox-multi/mdbox-map.c b/src/lib-storage/index/dbox-multi/mdbox-map.c index 800b8bdff7..7110fcc65b 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-map.c +++ b/src/lib-storage/index/dbox-multi/mdbox-map.c @@ -618,24 +618,35 @@ dbox_map_append_begin(struct dbox_map *map) return ctx; } -static time_t day_begin_stamp(unsigned int days) +static time_t day_begin_stamp(unsigned int interval) { struct tm tm; time_t stamp; + unsigned int unit = 1; - if (days == 0) + if (interval == 0) return 0; - /* get beginning of today */ + /* get the beginning of day/hour/minute depending on how large + the interval is */ tm = *localtime(&ioloop_time); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; + if (interval >= 60) { + tm.tm_sec = 0; + unit = 60; + if (interval >= 3600) { + tm.tm_min = 0; + unit = 3600; + if (interval >= 3600*24) { + tm.tm_hour = 0; + unit = 3600*24; + } + } + } stamp = mktime(&tm); if (stamp == (time_t)-1) i_panic("mktime(today) failed"); - return stamp - (3600*24 * (days-1)); + return stamp - (interval - unit); } static bool @@ -753,7 +764,7 @@ dbox_map_find_appendable_file(struct dbox_map_append_context *ctx, ctx->files_nonappendable_count = count; /* try to find an existing appendable file */ - stamp = day_begin_stamp(map->set->mdbox_rotate_days); + stamp = day_begin_stamp(map->set->mdbox_rotate_interval); hdr = mail_index_get_header(map->view); ctx->orig_next_uid = hdr->next_uid; diff --git a/src/lib-storage/index/dbox-multi/mdbox-settings.c b/src/lib-storage/index/dbox-multi/mdbox-settings.c index e5853f88d9..e616c445f7 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-settings.c +++ b/src/lib-storage/index/dbox-multi/mdbox-settings.c @@ -17,7 +17,7 @@ static bool mdbox_settings_verify(void *_set, pool_t pool ATTR_UNUSED, static const struct setting_define mdbox_setting_defines[] = { DEF(SET_SIZE, mdbox_rotate_size), DEF(SET_SIZE, mdbox_rotate_min_size), - DEF(SET_UINT, mdbox_rotate_days), + DEF(SET_TIME, mdbox_rotate_interval), DEF(SET_UINT, mdbox_max_open_files), DEF(SET_UINT, mdbox_purge_min_percentage), @@ -27,7 +27,7 @@ static const struct setting_define mdbox_setting_defines[] = { static const struct mdbox_settings mdbox_default_settings = { .mdbox_rotate_size = 2*1024*1024, .mdbox_rotate_min_size = 16*1024, - .mdbox_rotate_days = 0, + .mdbox_rotate_interval = 0, .mdbox_max_open_files = 64, .mdbox_purge_min_percentage = 0 }; diff --git a/src/lib-storage/index/dbox-multi/mdbox-settings.h b/src/lib-storage/index/dbox-multi/mdbox-settings.h index ef265340fc..f7335103a1 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-settings.h +++ b/src/lib-storage/index/dbox-multi/mdbox-settings.h @@ -4,7 +4,7 @@ struct mdbox_settings { uoff_t mdbox_rotate_size; uoff_t mdbox_rotate_min_size; - unsigned int mdbox_rotate_days; + unsigned int mdbox_rotate_interval; unsigned int mdbox_max_open_files; unsigned int mdbox_purge_min_percentage; };