Cyrus replica 2.4 to 3.2.2 issues

Marco falon at ruparpiemonte.it
Thu Jul 23 10:00:40 EDT 2020


Hello, I'm trying to replicate from Cyrus IMAP 2.4.20 to Cyrus IMAP 
3.2.2 using replication.

Because Cyrus 2.4 doesn't support IMAP replication (is this true?), I 
configured the replica with

replica2to3syncserver cmd="/usr/libexec/cyrus-imapd/sync_server" 
proto=tcp4 listen="csync"

in SERVICES of cyrus.conf.

The sync_client in master works in rolling mode, such as

/usr/lib/cyrus-imapd/sync_client -r -n replica2-3

Both master and replica hosts work with delayed deleted and delayed 
expunge fashion.

I experience some problems.
In the below logs tst-msg01 is the master, tst-msg03 is the replica.

== 1 ==
I found "errors" of this kind:

2020-07-21T15:05:16.803765+02:00 tst-msg03 
cyrus/replica2to3syncserver[1238 sync_log(): Failed to lock 
/var/lib/imap/sync/squatter/log for MAILBOX 
example.com!user.demo^gruppoarchivio.ticket.Vecchi#012 after 65 attempts
2020-07-21T15:05:16.803898+02:00 tst-msg03 
cyrus/replica2to3syncserver[1238 mailbox: longlock 
example.com!user.demo^gruppoarchivio.ticket.Vecchi for 2.5 seconds
2020-07-21T15:05:17.090124+02:00 tst-msg03 
cyrus/replica2to3syncserver[1238 sync_log(): Failed to lock 
/var/lib/imap/sync/squatter/log for MAILBOX 
example.com!user.demo^gruppoarchivio.ticket.Vecchi#012 after 65 attempts
2020-07-21T15:05:17.101288+02:00 tst-msg03 
cyrus/replica2to3syncserver[1238 mappedfile: longlock 
/var/lib/imap/domain/Q/example.com/user/E/demo.gruppoarchivio.conversations 
for 2.7 seconds
2020-07-21T15:05:17.101410+02:00 tst-msg03 cyrus/squatter[27276]: 
indexing mailbox user/demo.gruppoarchivio/ticket/Vecchi at example.com...
2020-07-21T15:05:18.132371+02:00 tst-msg03 cyrus/squatter[27276]: Xapian 
committed 740 updates in 0.374236 sec
2020-07-21T15:05:18.145507+02:00 tst-msg03 cyrus/squatter[27276]: 
mappedfile: longlock 
/var/lib/imap/domain/Q/example.com/user/E/demo.gruppoarchivio.xapianactive 
for 1.0 seconds

But the xapian index seems to be ok:

-rw------- 1 cyrus mail      864 Jul 21 15:05 cyrus.indexed.db
-rw------- 1 cyrus mail        0 Jul 21 15:05 flintlock
-rw------- 1 cyrus mail      116 Jul 21 15:05 iamglass
-rw------- 1 cyrus mail 13115392 Jul 21 15:05 position.glass
-rw------- 1 cyrus mail  5545984 Jul 21 15:05 postlist.glass
-rw------- 1 cyrus mail  3530752 Jul 21 15:05 termlist.glass

I hope I can ignore this. I've found these errors only for one mailbox.


== 2 ==
Another problem is that the "expire" annotation value is not configured 
as an "expire" metadata value on Cyrus 3.2.2. I don't know if this is 
expected or if this is a bug. But it is a problem for me, I have to 
rewrite all these mailboxes metadata.

To be more clear, the Cyrus IMAP 2.4.20 annotation like

* ANNOTATION "user/marco/Trash at example.com" 
"/vendor/cmu/cyrus-imapd/expire" ("value.shared" "14" 
"content-type.shared" "text/plain" "size.shared" "2" 
"modifiedsince.shared" "1406624279")

become in Cyrus IMAP 3.2.2 after the sync:
* METADATA user/marco/Trash at example.com 
("/shared/vendor/cmu/cyrus-imapd/expire" NIL)

I expected "14" and not NIL.

== 3 ==
The specialuse flags are not kept in the replica server:

* LIST (\HasNoChildren \Sent) "/" INBOX/Sent
become
* LIST (\HasNoChildren) "/" INBOX/Sent

Do I have to suppose that I must run the cvt_xlist_specialuse tool as 
described in 
https://www.cyrusimap.org/3.2/imap/download/upgrade.html#upgrade-specific-items 
?
It's not clear to me if this instruction is related to the in place 
upgrade only or to the replication mode too.


== 4 ==
This is a severe error. When I expunge a message in the master, the 
expunge action is not replicated on the replica, and the sync_client dies:

2020-07-23T14:50:44.695378+02:00 tst-msg01 cyrus/imap[26851]: Expunged 1 
messages from example.com!user.marco^fff.Trash
2020-07-23T14:51:10.147600+02:00 tst-msg03 
cyrus/replica2to3syncserver[1207 Fatal error: Internal error: assertion 
failed: imap/dlist.c: 156: base != NULL
2020-07-23T14:51:10.693261+02:00 tst-msg01 cyrus/sync_client[26834]: 
RESERVE received * response:
2020-07-23T14:51:10.693321+02:00 tst-msg01 cyrus/sync_client[26834]: 
reserve messages: failed: Bad protocol
2020-07-23T14:51:10.693730+02:00 tst-msg01 cyrus/sync_client[26834]: 
Error in do_sync(): bailing out! Bad protocol
2020-07-23T14:51:10.693750+02:00 tst-msg01 cyrus/sync_client[26834]: 
Processing sync log file /var/lib/imap/sync/replica2-3/log-26834 failed: 
Bad protocol
2020-07-23T14:51:10.706750+02:00 tst-msg03 cyrus/master[24009]: process 
type:SERVICE name:replica2to3syncserver 
path:/usr/libexec/cyrus-imapd/sync_server age:1142.993s pid:1207 exited, 
status 70

I can't no more suppress this error. All sync_client die, even in non 
rolling mode. I have to delete permanently the replicated mailboxes to 
resume the right working.

I see the same error when I delete a mailbox on replica and after that I 
do a sync_client on master. In this last case the error disappear only 
when I delete the delayed DELETED mailbox too.

I read the documentation, I didn't find restrictions on replica with the 
delayed expunged or the delayed deleted configuration in master and or 
in replica.
In my environment I simply configured delayed deleted and delayed 
expunge in the same way, on master and on replica hosts.


Could you help me to understand?
Thank you very much

Cheers
Marco


More information about the Info-cyrus mailing list