On 14. Dec 2023, at 16.21, Alex <a...@merlinux.eu> wrote:
> 
> Hello all,
> 
> I have been investigating the reason for high
> end-to-end email delivery delay
> (>1 second to send a message to echo bot and receive a reply back)
> on a Postfix+Dovecot email server setup
> used to run the tests for Delta Chat core [1].
> It appeared that most of the time was spent
> between the submission SMTP service accepting the mail for delivery
> and receiving an IDLE wakeup on the other side.
> 
> Looking into the Dovecot source code,
> I found that all notifications from the storage
> to callbacks set up by IDLE are delayed by
> a debounce constant NOTIFY_DELAY_MSECS [2].
> It appears to have been added in 2009 [3],
> but even before that Dovecot was only delivering
> notifications when a second-resolution timer
> is changed by at least 1, so IDLE notifications
> probably were delayed by half a second on average
> even before that.
> 
> Commit message says
> "If the notification is done immediately,
> IDLE may not notice the change because it's not finished yet."
> This sounds like a workaround for some internal Dovecot bug.
...
> I wonder if this debounce delay was added as a workaround
> for an internal Dovecot bug or a client bug
> and is not necessary anymore.
> It does not seem to be useful for well-behaving clients because
> if necessary the client may debounce notifications on its side
> and postpone interrupting IDLE with "DONE".

I can't really think of any situation where this would be necessary anymore. 
Not sure why it was necessary back in 2009 - maybe Maildir didn't have quite as 
many locks back then. Anyway now even if a change is partial at the time the 
mailbox-watch triggers, it runs full mailbox syncing which will lock the 
mailbox, so it waits for any previous changes to finish being written.

> I would actually like to disable this delay completely on our server setup 
> [6],
> as for chat it is common to receive multiple
> messages in a short period of time,
> e.g. when sending a message to a group and receiving multiple read receipts
> from currently active users.

We could of course make this a setting, but maybe it's not necessary. Would 
this behavior also work for you? :

 * If the current IDLE hasn't notified anything yet, send the notification 
immediately without waiting
 * Otherwise, send it max once per 0.5 seconds.

So if you're using the same connection to always break out of IDLE after a 
notification, there would be no dalays.
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to