]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mdbox_rotate_days changed to mdbox_rotate_interval, supporting one second resolution.
authorTimo Sirainen <tss@iki.fi>
Tue, 2 Feb 2010 17:03:06 +0000 (19:03 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 2 Feb 2010 17:03:06 +0000 (19:03 +0200)
--HG--
branch : HEAD

doc/example-config/conf.d/mail.conf
src/lib-storage/index/dbox-multi/mdbox-map.c
src/lib-storage/index/dbox-multi/mdbox-settings.c
src/lib-storage/index/dbox-multi/mdbox-settings.h

index 963369f0385dff8c75be485a047fd6a3969b5ee0..ef35f468d5b364d401ded4a1b097843f0a4a8f2a 100644 (file)
 # 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.
index 800b8bdff72a998514a049c1c39df33c66317254..7110fcc65b86b16906efe05587e93c5029f221c7 100644 (file)
@@ -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;
index e5853f88d9f0935efd60bc99ca15ff86cca85973..e616c445f7e8b2052e51e1cccf8205dc004a28cd 100644 (file)
@@ -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
 };
index ef265340fc2f32a7dcc5caefa3b8e84eb60a0022..f7335103a1e579d016d7e5256cf75f7b56a33034 100644 (file)
@@ -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;
 };