Thanks a lot for the clarifications. I'm now using an extension to store my uint32_t UID and it works properly.
>________________________________ > De : Timo Sirainen <t...@iki.fi> >À : John G <john_...@ymail.com>; Dovecot Mailing List <dovecot@dovecot.org> >Envoyé le : Lundi 14 mai 2012 18h45 >Objet : Re: [Dovecot] [Plugin dev] First-time-only cache lock failure > >On Mon, 2012-05-14 at 17:17 +0100, John G wrote: >> Hi >> >> This is a question related to plugin developement on Dovecot 2.1.4. >> >> I'm currently implementing a dovecot plugin that retrieves mails from a >> corporate server through an internal protocol. >> The plugin is very similar to the pop3c storage (lib-storage/index/pop3c). >> The plugin has to map original server UIDs to IMAP UIDs, using >> MAIL_CACHE_POP3_UIDL cache field the same way pop3c does. >> >> So, I've got a function similar to pop3c_sync_messages(), performing several >> mail_index_append() and mail_cache_add() calls. >> >> The problem is that on the first sync, when the index and cache files don't >> exist yet, there's a failure writing data in cache. >> The call to mail_index_sync_commit()\mail_cache_transaction_commit() fails >> because of mail_cache_transaction_lock(). >> >> The index and cache files are properly created, but the cache doesn't >> contain the MAIL_CACHE_POP3_UIDL values. >> It works properly on the second sync, the MAIL_CACHE_POP3_UIDL field being >> properly saved. >> >> Would you have some ideas on what could be wrong here? > >I'm not entirely sure what the problem is with cache file, but you >shouldn't use cache file anyway for this purpose if you want it to work >reliably. Cache file's contents can disappear in some situations. pop3c >shouldn't do it either, but it doesn't have to be very reliable :) > >If the original server UIDs are of fixed length (or have a reasonable >maximum length), add the UIDs to dovecot.index file itself by >registering an "extension". For example see how mdbox's "mdbox" >extension that creates struct mdbox_mail_index_record for each mail. > >If the original server UIDs are variable length, you can create a >separate mapping file similar to Maildir's dovecot-uidlist. > > > >