Hi,
I presume you figured this out after all this time, but in any case.
Since quota_clone is not cumulative, it always inserts new record with actual quota, to be able to get correct results in postfixadmin one must: DROP TRIGGER mergequota2 ON quota2;
And to prevent ERROR: duplicate key value violates unique constraint "quota2_pkey": CREATE FUNCTION public.clone_quota2() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN UPDATE quota2 SET bytes = NEW.bytes, messages = NEW.messages WHERE username = NEW.username; IF found THEN RETURN NULL; ELSE RETURN NEW; END IF; END; $$;
And then: CREATE TRIGGER clonequota2 BEFORE INSERT ON quota2 FOR EACH ROW EXECUTE PROCEDURE public.clone_quota2() ;
And finally just put: quota_clone_dict = proxy::sqlquota
Hope this helps somebody trying to figure out this too.
I figured out that I can't just drop maintaining quota2 if I want postfixadmin to report the quota status.
I also figured out a way to run a test on my config guesses. I will try to fit it in today, or tomorrow. But any advise to the questions below are welcomed!
On 2/13/19 8:53 PM, Robert Moskowitz via dovecot wrote: all this almost reads like I can drop maintaining the quota2 table?
From https://wiki.dovecot.org/Quota/Count
mailbox_list_index = yes # Avoid spending excessive time waiting for the quota calculation to finish when # mails' vsizes aren't already cached. If this many mails are opened, finish the # quota calculation on background in indexer-worker process. Mail deliveries will # be assumed to succeed, and explicit quota lookups will return internal error. mail_vsize_bg_after_count = 100
seems to belong in 10-mail.conf. That is where those var are shown.
But:
plugin { # 10MB quota limit quota = count:User quota quota_rule = *:storage=10M
# This is required - it uses "virtual sizes" rather than "physical sizes" for quota counting: quota_vsizes = yes }
I am having problems with. Right now for quota I have:
plugin { quota = dict:user::proxy::sqlquota trash = /etc/dovecot/dovecot-trash.conf.ext }
How do I reconcile these two?
Then for clone: https://wiki.dovecot.org/Plugins/QuotaClone
how does:
mail_plugins = $mail_plugins quota quota_clone plugin { quota_clone_dict = redis:host=127.0.0.1:port=6379 }
get replaced with something for mysql?
dovecot-sql.conf.ext:
driver = mysql connect = host=/var/lib/mysql/mysql.sock dbname=postfix user=postfix password=$Postfix_Database_Password default_pass_scheme = $cryptsha-CRYPT # following should all be on one line. password_query = SELECT username as user, password, concat('/home/vmail/', maildir) as userdb_home, concat('maildir:/home/vmail/', maildir) as userdb_mail, 101 as userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1' # following should all be on one line user_query = SELECT concat('/home/vmail/', maildir) as home, concat('maildir:/home/vmail/', maildir) as mail, 101 AS uid, 12 AS gid, CONCAT('*:messages=30000:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
and
dovecot-dict-sql.conf.ext:
connect = host=/var/lib/mysql/mysql.sock dbname=postfix user=postfix password=$Postfix_Database_Password map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages }
thanks