[Dovecot] dovecot with maildir not using mtime on reindex
Hi.
It seems that dovecot is using the current time, not a maildir file's mtime for INTERNALDATE when a message is re-indexed:
$ cd Index $ rm -rf .INBOX $ cd ../Maildir/cur $ stat * File: `1392914632.P54451Q0M08633.smtpin01,S=2215,W=2249:2,' Size: 960 Blocks: 8 IO Block: 1048576 regular file Device: 36h/54d Inode: 11132959 Links: 1 Access: (0600/-rw-------) Uid: ( 8/ mail) Gid: ( 8/ mail) Access: 2012-01-01 00:00:00.000000000 +0000 Modify: 2012-01-01 00:00:00.000000000 +0000 Change: 2014-02-20 16:46:20.000000000 +0000 Birth: - $ telnet imap01 143 Trying 10.5.45.1... Connected to imap01.dev.firefly.tucows.com. Escape character is '^]'.
- OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready. A LOGIN rplatel@ff-dev.com ******** A OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE QUOTA] Logged in A SELECT INBOX
- FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
- OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
- 1 EXISTS
- 0 RECENT
- OK [UNSEEN 1] First unseen.
- OK [UIDVALIDITY 1265835133] UIDs valid
- OK [UIDNEXT 4548] Predicted next UID A OK [READ-WRITE] Select completed (0.035 secs). A FETCH 1:* FULL
- 1 FETCH (FLAGS () INTERNALDATE "20-Feb-2014 16:59:51 +0000" RFC822.SIZE 2249 ENVELOPE ("Thu, 20 Feb 2014 11:43:50 -0500" "Test message" (("Richard Platel" NIL "rplatel" "tucows.com")) (("Richard Platel" NIL "rplatel" "tucows.com")) (("Richard Platel" NIL "rplatel" "tucows.com")) ((NIL NIL "rplatel" "ff-dev.com")) NIL NIL NIL "BED6EB46-CC88-4BDB-AE8B-98C1CDEAD67C@tucows.com") BODY ("text" "plain" ("charset" "us-ascii") NIL NIL "7bit" 23 4)) A OK Fetch completed. A LOGOUT
- BYE Logging out A OK Logout completed. Connection closed by foreign host. $ date Thu Feb 20 16:59:58 UTC 2014
Stracing the imap process, it seems dovecot does not stat the message file at all. Performing the above with an old dovecot 1 server yields the expected result, the INTERNALDATE of the message is the file's mtime.
$ dovecot -n -c /he/dovecot/conf/dovecot.conf # 2.2.10.3: /he/dovecot/conf/dovecot.conf # OS: Linux 3.4.46-dom0-2.0.0 x86_64 Debian 7.0 debug_log_path = syslog disable_plaintext_auth = no first_valid_uid = 8 info_log_path = syslog lock_method = dotlock log_timestamp = mail_fsync = always mail_gid = mail mail_nfs_index = yes mail_nfs_storage = yes mail_plugins = zlib quota tc_mail_log notify tc_proc mail_temp_dir = /var/run/dovecot_tmp mail_uid = mail maildir_very_dirty_syncs = yes managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave mmap_disable = yes namespace inbox { inbox = yes location = prefix = } passdb { args = host=localhost port=1143 username=%L{user}::%L{service}::%L{rip}::%L{session} driver = imap } plugin { antispam_backend = pipe antispam_debug_target = syslog antispam_pipe_program = /he/dovecot/utils/he_spamtrain.pl antispam_pipe_program_args = --user=%u antispam_pipe_program_notspam_arg = --falsepositive antispam_pipe_program_spam_arg = --missed antispam_pipe_tmpdir = /var/run/dovecot_as_tmp antispam_signature_missing = move antispam_spam = Spam;Inbox.Spam;INBOX.Spam;Junk;INBOX.Junk antispam_trash_pattern_ignorecase = trash mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename flag_change append mail_log_fields = uid box msgid flags hetag memcached_servers = 10.5.47.223,10.5.47.222 zlib_save = gz zlib_save_level = 6 } protocols = imap pop3 service anvil { unix_listener anvil-auth-penalty { mode = 00 } } service imap-login { inet_listener imap { address = 0 } inet_listener imaps { port = 0 } process_limit = 29 process_min_avail = 14 service_count = 0 } service imap-postlogin { executable = script-login -d /he/dovecot/utils/post_login.sh } service imap { executable = imap imap-postlogin process_limit = 1270 vsz_limit = 0 } service pop3-login { inet_listener pop3 { address = 0 } inet_listener pop3s { port = 0 } process_limit = 29 process_min_avail = 14 service_count = 0 } service pop3-postlogin { executable = script-login -d /he/dovecot/utils/post_login.sh } service pop3 { executable = pop3 pop3-postlogin process_limit = 206 vsz_limit = 512 M } ssl = no userdb { args = /he/dovecot/conf/dovecot-tc-dict-auth.conf driver = dict } verbose_proctitle = yes protocol imap { mail_max_userip_connections = 30 mail_plugins = zlib quota tc_mail_log notify tc_proc imap_quota antispam } protocol pop3 { mail_max_userip_connections = 30 pop3_uidl_format = %08Xv%08Xu }
Furthermore: it seems the behaviour is correct (mtime is used for internaldate) if the message is not compressed.
On Feb 20, 2014, at 12:09 PM, Richard Platel rplatel@tucows.com wrote:
Hi.
It seems that dovecot is using the current time, not a maildir file's mtime for INTERNALDATE when a message is re-indexed:
$ cd Index $ rm -rf .INBOX $ cd ../Maildir/cur $ stat * File: `1392914632.P54451Q0M08633.smtpin01,S=2215,W=2249:2,' Size: 960 Blocks: 8 IO Block: 1048576 regular file Device: 36h/54d Inode: 11132959 Links: 1 Access: (0600/-rw-------) Uid: ( 8/ mail) Gid: ( 8/ mail) Access: 2012-01-01 00:00:00.000000000 +0000 Modify: 2012-01-01 00:00:00.000000000 +0000 Change: 2014-02-20 16:46:20.000000000 +0000 Birth: - $ telnet imap01 143 Trying 10.5.45.1... Connected to imap01.dev.firefly.tucows.com. Escape character is '^]'.
- OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready. A LOGIN rplatel@ff-dev.com ******** A OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE QUOTA] Logged in A SELECT INBOX
- FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
- OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
- 1 EXISTS
- 0 RECENT
- OK [UNSEEN 1] First unseen.
- OK [UIDVALIDITY 1265835133] UIDs valid
- OK [UIDNEXT 4548] Predicted next UID A OK [READ-WRITE] Select completed (0.035 secs). A FETCH 1:* FULL
- 1 FETCH (FLAGS () INTERNALDATE "20-Feb-2014 16:59:51 +0000" RFC822.SIZE 2249 ENVELOPE ("Thu, 20 Feb 2014 11:43:50 -0500" "Test message" (("Richard Platel" NIL "rplatel" "tucows.com")) (("Richard Platel" NIL "rplatel" "tucows.com")) (("Richard Platel" NIL "rplatel" "tucows.com")) ((NIL NIL "rplatel" "ff-dev.com")) NIL NIL NIL "BED6EB46-CC88-4BDB-AE8B-98C1CDEAD67C@tucows.com") BODY ("text" "plain" ("charset" "us-ascii") NIL NIL "7bit" 23 4)) A OK Fetch completed. A LOGOUT
- BYE Logging out A OK Logout completed. Connection closed by foreign host. $ date Thu Feb 20 16:59:58 UTC 2014
Stracing the imap process, it seems dovecot does not stat the message file at all. Performing the above with an old dovecot 1 server yields the expected result, the INTERNALDATE of the message is the file's mtime.
$ dovecot -n -c /he/dovecot/conf/dovecot.conf # 2.2.10.3: /he/dovecot/conf/dovecot.conf # OS: Linux 3.4.46-dom0-2.0.0 x86_64 Debian 7.0 debug_log_path = syslog disable_plaintext_auth = no first_valid_uid = 8 info_log_path = syslog lock_method = dotlock log_timestamp = mail_fsync = always mail_gid = mail mail_nfs_index = yes mail_nfs_storage = yes mail_plugins = zlib quota tc_mail_log notify tc_proc mail_temp_dir = /var/run/dovecot_tmp mail_uid = mail maildir_very_dirty_syncs = yes managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave mmap_disable = yes namespace inbox { inbox = yes location = prefix = } passdb { args = host=localhost port=1143 username=%L{user}::%L{service}::%L{rip}::%L{session} driver = imap } plugin { antispam_backend = pipe antispam_debug_target = syslog antispam_pipe_program = /he/dovecot/utils/he_spamtrain.pl antispam_pipe_program_args = --user=%u antispam_pipe_program_notspam_arg = --falsepositive antispam_pipe_program_spam_arg = --missed antispam_pipe_tmpdir = /var/run/dovecot_as_tmp antispam_signature_missing = move antispam_spam = Spam;Inbox.Spam;INBOX.Spam;Junk;INBOX.Junk antispam_trash_pattern_ignorecase = trash mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename flag_change append mail_log_fields = uid box msgid flags hetag memcached_servers = 10.5.47.223,10.5.47.222 zlib_save = gz zlib_save_level = 6 } protocols = imap pop3 service anvil { unix_listener anvil-auth-penalty { mode = 00 } } service imap-login { inet_listener imap { address = 0 } inet_listener imaps { port = 0 } process_limit = 29 process_min_avail = 14 service_count = 0 } service imap-postlogin { executable = script-login -d /he/dovecot/utils/post_login.sh } service imap { executable = imap imap-postlogin process_limit = 1270 vsz_limit = 0 } service pop3-login { inet_listener pop3 { address = 0 } inet_listener pop3s { port = 0 } process_limit = 29 process_min_avail = 14 service_count = 0 } service pop3-postlogin { executable = script-login -d /he/dovecot/utils/post_login.sh } service pop3 { executable = pop3 pop3-postlogin process_limit = 206 vsz_limit = 512 M } ssl = no userdb { args = /he/dovecot/conf/dovecot-tc-dict-auth.conf driver = dict } verbose_proctitle = yes protocol imap { mail_max_userip_connections = 30 mail_plugins = zlib quota tc_mail_log notify tc_proc imap_quota antispam } protocol pop3 { mail_max_userip_connections = 30 pop3_uidl_format = %08Xv%08Xu }
participants (1)
-
Richard Platel