[Dovecot] Bug: maidirsize double counting moved messages

Bill Boebel bill at webmail.us
Thu May 18 18:34:11 EEST 2006


On Thu, May 18, 2006 9:49, Bill Boebel said:
> This size doubling is happening for any IMAP APPEND operation as well.  It
> has been a pretty annoying bug, because we have to keep manually deleting
> maildirsize files to fix mailboxes so that they don't bounce mail due to
> the quota miscalculation.  Timo, is this something you could take a look
> at?
>

The problem appears to be that quota_default_try_alloc_bytes() is getting
called twice during APPEND.  Once from quota_save_init() when it is trying
to guess if there is enough room to save the new message, and then again
while actually performing the save in quota_save_finish():

  quota_save_init()
    quota_try_alloc_bytes()

  quota_save_finish()
    quota_check()
      quota_try_alloc()
        quota_default_try_alloc_bytes()

I added a quick hack to use the existing bool parameter "too_large" as a
flag to tell quota_default_try_alloc_bytes() whether or not to allocate
bytes or just check if there is room to allocate bytes.  I'm sure it is
trivial to clean this up and pass this flag as a new parameter, but I
didn't want to break any other functions that might be calling this...


src/plugins/quota/quota-storage.c
@185 (quota_save_init)

		/* BB 05/18/2006 - Hack: set "too_large=TRUE" to tell quota_try_alloc_bytes
		   to not actuall allocate the bytes yet.  That will be done later */
		too_large = TRUE;

src/plugins/quota/quota.c
@375 (quota_default_try_alloc_bytes)

	/* BB 05/18/2006 - Hack: use too_large_r=TRUE as a flag to just check if
	   we can allocate bytes, but don't actually allocate it yet since this
	   function is called again later */
	bool alloc_bytes;
	if (*too_large_r == TRUE)
		alloc_bytes = FALSE;
	else
		alloc_bytes = TRUE;

@400 (quota_default_try_alloc_bytes)

	/* BB 05/18/2006 - Hack: skip if we just want to check if we have enough
room */
	if (alloc_bytes) {
		ctx->count_diff++;
		ctx->bytes_diff += size;
	}





More information about the dovecot mailing list