On Sat, 12 May 2007, John Capo wrote:

upload_message_work() returns IMAP_IOERROR when it can't map the message being uploaded due to a race between reading the index and actually doing the upload work.

delayed_expunge greatly reduces the scope for this race condition.

Quietly turning mailbox delete into mailbox rename also helped in 2.1.X as sync_client chdir()s into the working directory. However in 2.3.X mailbox_map_message() constructs a full path for each new message.

Its been a long time now since I've had a sync_client bail out. I'm aware that people running 2.3 have been having a less fun time.

upload_message_work() returns with these items in the stream to the server. [...] The server is expecting the header_size to arrive next but most anything can arrive depending on what client work is left to do.

I agree that breaking off halfway through a command is really bad.

A quick scan through the code suggests that UPLOAD is the only awkward case, simply because it is much more involved than the other commands.

A really ugly hack is to and fake up a message and send that to
keep the stream in sync.  The fake message is deleted from the
replica on the next MAILBOX command.

A fake message is the simplest solution to this specific problem. However, there should really be some similar protection in the two parent routines, upload_message_list() and upload_messages_from().

Sending \r\n and then waiting for the server to moan about an incomplete UPLOAD command should be enough for the two ends to resynchronise correctly in all cases. The server won't commit anything (though any complete messages should get cached on the server sync. queue).

It would make sense to try and factor this out as a common error handling case in sync_client. I'm off for a couple of days, but may have a go at implementing this next week unless someone has a better idea.

--
David Carter                             Email: [EMAIL PROTECTED]
University Computing Service,            Phone: (01223) 334502
New Museums Site, Pembroke Street,       Fax:   (01223) 334679
Cambridge UK. CB2 3QH.

Reply via email to