In version 2.0.16, flock() was being used for file locking. However, in 2.2.1, I am wondering if this is still the case. I looked in the configure output of 2.0.16 and it detects the flock() function call, but in the output of 2.2.1, it doesn't even look like it checks for flock(). Has the default changed or the behavior for locking changed between those versions? The docs seem to indicate that flock() is still the default, if it is detected.
We noticed the change in behavior when we went from flat file format in 2.0.16 to skiplist format in 2.2.1 for the mailboxes.db file. We were playing around with renaming a user account with a lot of files and see that it takes more than twice as long to rename the user account (from one partition to another partition, same account name) using the skiplist database. Trussing the process, we see that it does about the same time period for the actual traversing of the user directory trees, copying files from one partition to another, deleting the old files off, etc etc. However, after the imap server finishes with all the file/directory related stuff for that user rename, it then procedes to work on the mailboxes.db file. It goes into this nearly endless loop where most of the time is spent doing the following:
stat("/var/imap/mailboxes.db", 0x000000011FFF9C88) = 0 fcntl(7, F_SETLKW, 0x000000011FFF9D98) = 0 fcntl(7, F_SETLKW, 0x000000011FFF9C40) = 0
(7 is the file descriptor associated with mailboxes.db currently opened for read/write operations)
The user had 6 directories (5 folders directly under the INBOX folder) and 704 files total (686 messages and 18 cyrus header/index/cache files). Looking through the truss output, there were 1486 open operations that involved the user account itself, generally, one for the file in the old partition, and one for the file in the new partition. There were 39 mkdir operations (6 of which actually succeeded... the other 33 were on directories that already existed). That all seems reasonable.
The problem is when it gets to mailboxes.db with the above 3 lines, in which case it does those 3 calls consecutively 16,521 times!!! I have no idea what it is doing, and that is what I will be figuring out tomorrow. I don't know if this is related to the flock() (or the lack of flock() being called) or not.
If anyone has any ideas, I would appreciate it.
Scott -- +-----------------------------------------------------------------------+ Scott W. Adkins http://www.cns.ohiou.edu/~sadkins/ UNIX Systems Engineer mailto:[EMAIL PROTECTED] ICQ 7626282 Work (740)593-9478 Fax (740)593-1944 +-----------------------------------------------------------------------+ PGP Public Key available at http://www.cns.ohiou.edu/~sadkins/pgp/
pgp00000.pgp
Description: PGP signature