dsync replication quota2 issue

George Kontostanos gkontos.mail at gmail.com
Wed Oct 12 19:56:31 UTC 2016


On Tue, Oct 11, 2016 at 2:31 PM, George Kontostanos <gkontos.mail at gmail.com>
wrote:

> Hello list,
>
> We are testing a configuration with 2 mail servers using dsync replication
> (dovecot 2.2.25 ). Everything works fine except the quota2 which is
> calculated wrong only on one server. Quota2 resides on  different databases
> since each server needs to update it.
>
> The problem: The local server always updates quota2 twice on each message
> it receives. This happens only on one server. Updates run fine on the
> second.
>
> SQL Debug:
>
>  Query UPDATE quota2 SET bytes=bytes+2108,messages=messages+1 WHERE
> username = 'user at domain.org'
>  Query UPDATE quota2 SET bytes=bytes+2108,messages=messages+1 WHERE
> username = 'user at domain.org'
>
> The result  on the server that runs fine
>
> mysql> select * from quota2;
> +----------------------------+---------+----------+
> | username                   | bytes   | messages |
> +----------------------------+---------+----------+
> |
> | user at domain.org | 2917126 |       17 |
>
> The result on  the server that has the problem:
>
> mysql> select * from quota2;
> +----------------------------+---------+----------+
> | username                   | bytes   | messages |
> +----------------------------+---------+----------+
> |
> | user at domain.org | 2920317 |       19 |
>
> dovecot -n is the same on both:
>
> root at mx2:/var/log # dovecot -n
> # 2.2.25 (7be1766): /usr/local/etc/dovecot/dovecot.conf
> # Pigeonhole version 0.4.15 (97b3da0)
> # OS: FreeBSD 10.3-RELEASE amd64  ufs
> auth_mechanisms = plain login
> auth_verbose = yes
> default_client_limit = 2560
> default_process_limit = 512
> dict {
>   acl = mysql:/usr/local/etc/dovecot/dovecot-dict-shares-sql.conf.ext
>   quota = mysql:/usr/local/etc/dovecot/dovecot-dict-quota-sql.conf.ext
> }
> doveadm_password =  # hidden, use -P to show it
> doveadm_port = 12345
> log_path = /var/log/dovecot.log
> mail_debug = yes
> mail_home = /usr/local/vhosts/mail/%d/%n
> mail_location = maildir:/usr/local/vhosts/mail/%d/%n:LAYOUT=fs
> mail_max_userip_connections = 70
> mail_plugins = quota acl notify replication
> mail_privileged_group = vmail
> mail_shared_explicit_inbox = yes
> managesieve_notify_capability = mailto
> managesieve_sieve_capability = fileinto reject envelope encoded-character
> vacation subaddress comparator-i;ascii-numeric relational regex imap4flags
> copy include variables body enotify environment mailbox date index ihave
> duplicate mime foreverypart extracttext
> mbox_write_locks = fcntl
> namespace {
>   inbox = no
>   list = children
>   location = maildir:/usr/local/vhosts/mail/%%d/%%n:LAYOUT=fs:INDEX=/
> usr/local/vhosts/indexes/%d/%n/shared/%%u:INDEXPVT=/usr/
> local/vhosts/indexes/%d/%n/shared/%%u
>   prefix = shared/%%d/%%n/
>   separator = /
>   subscriptions = no
>   type = shared
> }
> namespace inbox {
>   inbox = yes
>   list = yes
>   location =
>   mailbox Drafts {
>     auto = subscribe
>     special_use = \Drafts
>   }
>   mailbox Junk {
>     auto = subscribe
>     special_use = \Junk
>   }
>   mailbox Sent {
>     auto = subscribe
>     special_use = \Sent
>   }
>   mailbox Trash {
>     auto = subscribe
>     special_use = \Trash
>   }
>   prefix =
>   separator = /
>   type = private
> }
> passdb {
>   args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
>   driver = sql
> }
> plugin {
>   acl = vfile
>   acl_shared_dict = proxy::acl
>   mail_replica = tcp:beta.sophimail.com:12345
>   quota = dict:User quota::proxy::quota
>   quota_rule2 = Trash:storage=+100M
>   sieve = /usr/local/vhosts/mail/%d/%n/.dovecot.sieve
>   sieve_before = /usr/local/vhosts/sieve/before.d/
>   sieve_dir = /usr/local/vhosts/mail/%d/%n
>   sieve_global_dir = /usr/local/vhosts/sieve/%d
>   sieve_global_path = /usr/local/vhosts/sieve/%d/default.sieve
> }
> protocols = imap lmtp sieve sieve
> service aggregator {
>   fifo_listener replication-notify-fifo {
>     mode = 0666
>     user = vmail
>   }
>   unix_listener replication-notify {
>     mode = 0666
>     user = vmail
>   }
> }
> service auth-worker {
>   user = vmail
> }
> service auth {
>   unix_listener /var/spool/postfix/private/auth {
>     group = postfix
>     mode = 0666
>     user = postfix
>   }
>   unix_listener auth-userdb {
>     mode = 0600
>     user = vmail
>   }
>   user = dovecot
> }
> service config {
>   unix_listener config {
>     user = vmail
>   }
> }
> service dict {
>   unix_listener dict {
>     mode = 0600
>     user = vmail
>   }
> }
> service doveadm {
>   inet_listener {
>     port = 12345
>   }
>   user = vmail
> }
> service imap-login {
>   inet_listener imap {
>     port = 143
>   }
> }
> service lmtp {
>   unix_listener /var/spool/postfix/private/dovecot-lmtp {
>     group = postfix
>     mode = 0600
>     user = postfix
>   }
> }
> service managesieve-login {
>   inet_listener sieve {
>     port = 4190
>   }
>   process_min_avail = 0
>   service_count = 1
>   vsz_limit = 64 M
> }
> service replicator {
>   unix_listener replicator-doveadm {
>     mode = 0666
>   }
> }
> ssl_cert = </usr/local/etc/postfix/keys/domain.com.crt
> ssl_key = </usr/local/etc/postfix/keys/domain.com.key
> userdb {
>   args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
>   driver = sql
> }
> protocol lmtp {
>   mail_plugins = quota acl notify replication sieve notify replication
> }
> protocol imap {
>   imap_client_workarounds = tb-extra-mailbox-sep
>   mail_plugins = quota acl notify replication imap_quota imap_acl notify
> replication
> }
> protocol lda {
>   mail_plugins = quota acl notify replication sieve acl
>   postmaster_address = root
> }
> local 192.168.3.6 {
>   protocol imap {
>     ssl_cert = </usr/local/etc/postfix/keys/domain.com.crt
>     ssl_key = </usr/local/etc/postfix/keys/domain.com.key
>   }
> }
>
> dovecot-dict-quota-sql.conf.ext:
>
> connect = host=127.0.0.1 dbname=quota user=mailadmin 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
> }
>
> Sorry for the lengthy email, any help is very much appreciated.
>
>
> --
> George Kontostanos
> ---
>


Hi, is there anything else I should need to post from my config?

Apologies for insisting here but I have not found any solution yet.

Thanks


More information about the dovecot mailing list