[Dovecot] Quota transaction bug?

David Jonas djonas at vitalwerks.com
Wed Jul 25 00:46:11 EEST 2007


Jasper Bryant-Greene wrote:
> On Tue, Jul 24, 2007 at 02:09:23PM -0700, David Jonas wrote:
>> < SELECT current FROM quota WHERE ...
>>> 513965019
>> < BEGIN
>> < INSERT INTO quota (current, ...
>> < COMMIT
>>> ??  (error_r appears to be (null))
> 
> Unrelated to the original post, but the above would appear to be a bug to me.
> 
> Because the SELECT is done before the transaction starts, the value in the
> INSERT which is based on the SELECT may no longer be consistent with the
> actual value in that table.

I don't think it uses the value. The INSERT statement that comes next
does an UPDATE if the key exists. The value represented as 0 here is the
change in quota value:

INSERT INTO quota (current, path, username) VALUES (0, 'quota/storage',
'user at example.com') ON DUPLICATE KEY UPDATE current = current + 0;

So it's only added to or inserted, never changed then replaced.

> I had a look through the code as I wanted to include a patch to move the SELECT
> into the transaction with this email, but I'm not familiar enough with the
> Dovecot codebase to find the code that performs the above SQL. If anyone can
> point me in the right direction I'd be happy to submit a patch.
> 
> Jasper


More information about the dovecot mailing list