I have dovecot version 2.1.7 and I have quota configured as:
dict { quota_domain = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext } mail_plugins = quota protocol imap { mail_plugins = quota quota imap_quota } plugin { quota = dict:domain:%d:proxy::quota_domain quota_rule = *:storage=1M quota_rule2 = Trash:storage=+100M }
/etc/dovecot/dovecot-dict-sql.conf.ext:
map { pattern = priv/quota/storage table = quota_dict username_field = domain value_field = bytes } map { pattern = priv/quota/messages table = quota_dict username_field = domain value_field = messages } map { pattern = shared/expire/$user/$mailbox table = expires value_field = expire_stamp fields { username = $user mailbox = $mailbox } }
But the problem is that quota table created as:
CREATE TABLE quota_dict
(
domain
varchar(255) NOT NULL,
bytes
bigint(20) NOT NULL DEFAULT '0',
messages
int(5) NOT NULL DEFAULT '0',
PRIMARY KEY (domain
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
counts quota only for last user as defined /etc/dovecot/users or in database table. So if I have in /etc/dovecot/users (the contents is from testing VPS):
test@debian.jd:{plain}radegast:8:8::/srv/mail/debian.jd/::userdb_quota_rule=*:storage=500k bartmann@debian.jd:{plain}radegast:8:8::/srv/mail/debian.jd/::userdb_quota_rule=*:storage=500k
After running doveadm quota recalc -A
I have in my db:
+-----------+--------+----------+ | domain | bytes | messages | +-----------+--------+----------+ | debian.jd | 505758 | 81 | +-----------+--------+----------+
whith is from account bartmann@debian.jd not both accounts at testing VPS domain debian.jd. The same is with quota enforcing - quota if enforced on the latter of the accounts in /etc/dovecot/users on testing machine or database in production machine.
What I do wrong? Thanks Filip Bartmann
Am 12.10.2014 um 19:28 schrieb Filip Bartmann:
I have dovecot version 2.1.7 and I have quota configured as:
dict { quota_domain = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext } mail_plugins = quota protocol imap { mail_plugins = quota quota imap_quota } plugin { quota = dict:domain:%d:proxy::quota_domain quota_rule = *:storage=1M quota_rule2 = Trash:storage=+100M }
/etc/dovecot/dovecot-dict-sql.conf.ext:
map { pattern = priv/quota/storage table = quota_dict username_field = domain value_field = bytes } map { pattern = priv/quota/messages table = quota_dict username_field = domain value_field = messages } map { pattern = shared/expire/$user/$mailbox table = expires value_field = expire_stamp fields { username = $user mailbox = $mailbox } }
But the problem is that quota table created as:
CREATE TABLE
quota_dict
(domain
varchar(255) NOT NULL,bytes
bigint(20) NOT NULL DEFAULT '0',messages
int(5) NOT NULL DEFAULT '0', PRIMARY KEY (domain
) ) ENGINE=InnoDB DEFAULT CHARSET=latin1counts quota only for last user as defined /etc/dovecot/users or in database table. So if I have in /etc/dovecot/users (the contents is from testing VPS):
test@debian.jd:{plain}radegast:8:8::/srv/mail/debian.jd/::userdb_quota_rule=*:storage=500k bartmann@debian.jd:{plain}radegast:8:8::/srv/mail/debian.jd/::userdb_quota_rule=*:storage=500k
After running
doveadm quota recalc -A
I have in my db:+-----------+--------+----------+ | domain | bytes | messages | +-----------+--------+----------+ | debian.jd | 505758 | 81 | +-----------+--------+----------+
whith is from account bartmann@debian.jd not both accounts at testing VPS domain debian.jd. The same is with quota enforcing - quota if enforced on the latter of the accounts in /etc/dovecot/users on testing machine or database in production machine.
What I do wrong? Thanks Filip Bartmann
domain quota may be tricky
never tested but perhaps reread
http://serverstutorial.wordpress.com/2012/12/28/configuring-domain-user-mail...
http://wiki2.dovecot.org/Quota/Configuration
Best Regards MfG Robert Schetterer
-- [*] sys4 AG
http://sys4.de, +49 (89) 30 90 46 64 Franziskanerstraße 15, 81669 München
Sitz der Gesellschaft: München, Amtsgericht München: HRB 199263 Vorstand: Patrick Ben Koetter, Marc Schiffbauer Aufsichtsratsvorsitzender: Florian Kirstein
On 10/12/2014 01:28 PM, Filip Bartmann wrote:
After running
doveadm quota recalc -A
I have in my db:+-----------+--------+----------+ | domain | bytes | messages | +-----------+--------+----------+ | debian.jd | 505758 | 81 | +-----------+--------+----------+
whith is from accountbartmann@debian.jd not both accounts at testing VPS domain debian.jd. The same is with quota enforcing - quota if enforced on the latter of the accounts in /etc/dovecot/users on testing machine or database in production machine.
What I do wrong? As I remember from previous conversations here, this is a limitation of the current design. The comment in example-config/conf.d/90-quota.conf says:
Multiple quota roots are also possible, for example this gives each user
their own 100MB quota and one shared 1GB quota within the domain
It doesn't really support accounting for the *sum* of *multiple storage quotas* within a domain. As a hack: you can just not run quota recalc ;-) or more realistically, separately track user quotas individually (you really should!), and post recalc immediately update the domain by running something like update domain_quota set bytes=(select sum(bytes) from user_quota where username like '%@debian.jd') where domain='debian.jd';
On 13.10.2014 00:08, Gedalya wrote:
On 10/12/2014 01:28 PM, Filip Bartmann wrote:
After running
doveadm quota recalc -A
I have in my db:+-----------+--------+----------+ | domain | bytes | messages | +-----------+--------+----------+ | debian.jd | 505758 | 81 | +-----------+--------+----------+
whith is from accountbartmann@debian.jd not both accounts at testing VPS domain debian.jd. The same is with quota enforcing - quota if enforced on the latter of the accounts in /etc/dovecot/users on testing machine or database in production machine.
What I do wrong? As I remember from previous conversations here, this is a limitation of the current design.
I remember the same thing.
As a hack: you can just not run quota recalc ;-) or more realistically, separately track user quotas individually (you really should!), and post recalc immediately update the domain by running something like update domain_quota set bytes=(select sum(bytes) from user_quota where username like '%@debian.jd') where domain='debian.jd';
This won't accout for changes made during the recalc - although to my knowledge it's still the best solution in this type of configuration.
When I was trying to make both user and domain quotas work properly, the only way I figured out was to track domain quota as group quota in the filesystem. Forcing users/domains to have separate system user and group of course.
On 10/13/2014 04:47 AM, Jiri Bourek wrote:
As a hack: you can just not run quota recalc ;-) or more realistically, separately track user quotas individually (you really should!), and post recalc immediately update the domain by running something like update domain_quota set bytes=(select sum(bytes) from user_quota where username like '%@debian.jd') where domain='debian.jd';
This won't accout for changes made during the recalc - although to my knowledge it's still the best solution in this type of configuration. We're talking about making the domain quota equal to the sum of the user quotas, using a single SQL statement. After execution of this statement, the domain quota will be correct, assuming that the user quotas are correct. If recalc doesn't account for changes done during the recalc, then that's a bug.
On 13.10.2014 11:11, Gedalya wrote:
On 10/13/2014 04:47 AM, Jiri Bourek wrote:
As a hack: you can just not run quota recalc ;-) or more realistically, separately track user quotas individually (you really should!), and post recalc immediately update the domain by running something like update domain_quota set bytes=(select sum(bytes) from user_quota where username like '%@debian.jd') where domain='debian.jd';
This won't accout for changes made during the recalc - although to my knowledge it's still the best solution in this type of configuration. We're talking about making the domain quota equal to the sum of the user quotas, using a single SQL statement. After execution of this statement, the domain quota will be correct, assuming that the user quotas are correct. If recalc doesn't account for changes done during the recalc, then that's a bug.
Well if I understand OP's configuration correctly, his Dovecot is not using per-user quotas, which means that when recalc finishes for a mailbox, nothing is updating information about that mailbox. I don't think that's a bug in recalc, just defficiency in OP's setup.
Although after reading your post again I now understood you suggested to add per-user quotas into his Dovecot's config too. My bad, that could work.
participants (4)
-
Filip Bartmann
-
Gedalya
-
Jiri Bourek
-
Robert Schetterer