Re: [Imap-protocol] QRESYNC and new arrivals which get deleted immediately through VANISHED

Alexey Melnikov <[email protected]>
Newsgroups gmane.mail.imap.general
Message-ID <[email protected]>
On 12/06/2012 15:49, Jan Kundrát wrote:
> Hi Alexey,

Hi Jan,

> On 06/11/12 21:08, Alexey Melnikov wrote:
>>> Shall I remove any messages upon receiving the VANISHED response?
>>> Shall I send a UID SEARCH command to find out what new messages are
>>> really there? That'd complicate my code quite a lot,
>>> unfortunately.
>> In most cases you don't need to do anything. For example if you only
>> cached a part of the mailbox (e.g. N most recent messages), and UIDs
>> listed in VANISHED are below any UID you know about, then you don't
>> really care about removed messages.
>>
>> It might make a difference if you want to display the number of
>> messages in the mailbox or use message numbers for some operations.
>> If you cached the whole mailbox, then you know the whole msgno-to-UID
>> map. If you only cached a part, then maybe doing something like "UID
>> FETCH *" (or a similar SEARCH) would help.
> I always establish full seq ->  UID mapping as the very first thing when
> I open a mailbox. The API through which I make the data about a mailbox
> accessible to the rest of the application really wants to know how many
> messages are there in a mailbox at any time; showing a total number of
> messages in a mailbox is one of the use cases, but not the only one.
> That's why I react to an EXISTS either by:
>
> - doing nothing if the number is the same as my current idea of the
> number of messages,
> - throwing an error if the server tried to decrease the number of
> messages against what I believe shall be there,
> - asking for UIDs of the new arrivals immediately through UID FETCH
> (FLAGS) immediately.
>
> As soon as my idea of the "total number of messages" begins to differ
> from the server's idea, I have trouble. That's an assumption on which
> I've built my client; it allows me to deal with EXPUNGEs properly, etc.
> My client will essentially show just a "loading..." placeholder until
> the UID for a message arrives.
>
> However, now QRESYNC seems to threaten this model because the server
> reports increases in the amount of messages through EXISTS and their
> removals through VANISHED. The issue is that there's a window where
> VANISHED can refer to messages whose UID is unknown to the client and
> that the protocol explicitly allows VANISHED to refer to UIDs which have
> never existed in the mailbox -- at least according to my understanding.
> I'd love to be proved wrong.

My server doesn't reference UIDs which never existed, but I would not be 
surprised if other do. So you can't make this assumption.

> Unless I'm mistaken, the only completely safe way out of that is to
> issue UID SEARCH ALL (or the ESEARCH equivalent) when a VANISHED
> referencing "unknown" UIDs arrives at the time the mailbox has messages
> whose UID I don't know yet.
I thought ignoring data for UIDs you don't know was an Ok idea. But if you really can't do that, that should work. Although I would change that to "UID SEARCH<last-known-UID>:*" instead. As this will generate less traffic (and the server needs to do less work).


> Would you think that this will fly?
>
> Would a proposal for adding "* ARRIVED 64,65,66" to replace EXISTS have
> any real-world chance of getting accepted?
Even if it would be, we can't just add "ARRIVED" to QRESYNC, because it 
is an RFC and I believer there are multiple server implementations 
already. We can reopen the document and define a new IMAP capability, 
but in short to medium term your code would have to handle the current 
situation anyway...

>>> Even more entertaining would be an interaction where the server
>>> occasionally sent a regular EXPUNGED instead of VANISHED (it's
>>> allowed to do so per RFC 5162); that'd lead to an interesting mix
>>> of unknowns about a mailbox' state...
>> I hope no server does that (unless in different sessions, when
>> QRESYNC is enabled in one and not another...).
> Agreed. It's just that now I've implemented the RFC in my client, I'm
> afraid there are ways of getting it out-of-sync through "legal"
> responses; I'd like to mitigate that.


_______________________________________________
Imap-protocol mailing list
[email protected]
http://mailman2.u.washington.edu/mailman/listinfo/imap-protocol
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.