[Imap-protocol] SELECT/EXAMINE clarification of UNSEEN

Timo Sirainen tss at iki.fi
Wed Nov 16 04:38:15 PST 2011

On 16.11.2011, at 8.51, Bron Gondwana wrote:

> On Tue, Nov 15, 2011 at 10:10:32PM -0800, Mark Crispin wrote:

>> On Wed, 16 Nov 2011, Bron Gondwana wrote:

>>> The other problems with strict ascendency is that it requires a global lock

>>> for the duration of any append, over whatever scope you require the

>>> ascendency in. As you expand out from a single mailbox to the scope of an

>>> entire user, you expand the scope of that global lock.


>> Not necessarily. If the GUID is expanded to a uint64 then there's no

>> reason why the GUID assignment can't be simply:

>> <acquire mutex>

>> guid = ++lastguid;

>> <release mutex>

>> You don't care if the GUID space is holey; and with a uint64 you don't

>> even care if you end up losing some.


> No, it's not that easy. You need every view before to not include it,

> and every view afterwards to include it.


>> There are even some systems where ++ is atomic (yes, even if multicore)

>> and you don't need the mutex.


> That's cheap - making sure you never return these out of order is not.


>> The real issue is MULTIAPPEND and its interaction with UIDPLUS.

>> Fortunately, you don't have to assign UIDs as messages are uploaded; you

>> can defer that until the uploads are completed. Since you now know how

>> many messages you are adding, you can claim an entire range of GUIDs via

>> <acquire guid mutex>

>> guid = lastguid += nappends;

>> <release guid mutex>

>> Then assign the already-claimed GUIDs at leisure while checking in the

>> append.


> Only by blocking all reads while this is happening.

Sounds like you're talking about your specific implementation, since I can't really think of why any of the above would be a problem or why there would be any need of blocking. I've actually thought of a way to create zero-lock-waits IMAP-compliant mailbox format on POSIX filesystems that do atomic writes with O_APPEND (practically all apparently), so I'm sure any blockers can be worked around.

More information about the Imap-protocol mailing list