Wiki, information on database back ends.

Dan White dwhite at olp.net
Tue Sep 14 17:30:55 EDT 2010


On 14/09/10 14:24 -0500, Patrick Goetz wrote:
>There's been some discussion on the Debian cyrus list about how to 
>automate upgrades from cyrus 2.n.k to cyrus 2.m.j.  Jeroen van 
>Meeuwen (on both lists) suggested that the cyrus RPM package features 
>a utility called cyrus-imapd.cvt_cyrusdb_all which might be useful 
>for this.
>
>I've been looking at this script, and it mostly appears to be using 
>cvt_cyrusdb to convert particular db files to Cyrus skiplists and 
>then back again to the original db backend format.  I can't follow 
>the script completely as it seems to rely on DB configuration details 
>found in the imapd.conf file I don't have in my Debian 2.1.16 imap 
>server, and it's also not clear how the script is run.
>
>This raises a number of questions, though:
>
>1.
>Cyrus skiplists?  I thought all the DB files were in Berkeley DB 
>format.  I tried to find some documentation on skiplists, but only 
>found an old message to the developer list from Bron Gondwana 
>discussing skiplist bugs 
>(http://markmail.org/message/zbaq765brbg2acfj).

The current imapd.conf hints at the available data types for each cyrus
database. Depending on the option, the following database types are
available (in 2.3.16):

annotation_db: skiplist
   Allowed values: berkeley, berkeley-hash, skiplist

duplicate_db: berkeley-nosync
   Allowed values: berkeley, berkeley-nosync, berkeley-hash,
berkeley-hash-nosync, skiplist, sql

mboxkey_db: skiplist
   Allowed values: berkeley, skiplist

mboxlist_db: skiplist
   Allowed values: flat, berkeley, berkeley-hash, skiplist

ptscache_db: berkeley
   Allowed values: berkeley, berkeley-hash, skiplist

quota_db: quotalegacy
   Allowed values: flat, berkeley, berkeley-hash, skiplist, sql, quotalegacy

seenstate_db: skiplist
   Allowed values: flat, berkeley, berkeley-hash, skiplist

subscription_db: flat
   Allowed values: flat, berkeley, berkeley-hash, skiplist

statuscache_db: berkeley-nosync
   Allowed values: berkeley, berkeley-nosync, berkeley-hash,
berkeley-hash-nosync, skiplist

tlscache_db: berkeley-nosync
   Allowed values: berkeley, berkeley-nosync, berkeley-hash,
berkeley-hash-nosync, skiplist, sql

userdeny_db: flat
   Allowed values: flat, berkeley, berkeley-hash, skiplist, sql

http://www.cyrusimap.org/docs/cyrus-imapd/2.3.16/internal/database-formats.php
has some discussion of the databases.

I don't know why the (rpm) upgrade script chose skiplist as an
intermediate format, rather than flat. Perhaps skiplist hasn't changed much
between major versions, and offers a speed benefit.

The script seems to use the file command to determine the current database
types, since they can be changed by an admin.

>2.
>The Redhat cvt_cyrusdb_all script seems to assume a specific set of 
>database files.  Is the set of cyrus imap DB files fixed, and if so 
>what are they?  Is there any documentation on what each database file 
>contains? This would be very useful to people trying to convert older 
>cyrus IMAP installations to new ones.

As far as skiplist, that seems to be a proprietary format.

As far as I can tell, all databases use the same underlying structure
(except for quotalegacy), which is defined in the database-formats above.

flat: ASCII text file

berkeley: berkeley db (with safer values).

berkeley-nosync: berkeley db with the DB_TXN_NOSYNC flag set.

berkeley-hash: berkeley db with the DB_HASH flag set.

berkeley-hash-nosync: berkeley db with both DB_TXN_NOSYNC and DB_HASH
flags?

sql: A mysql, pgsql, or sqlite store.

quotalegacy: See database-formats

skiplist: ?

With cyrus version 2.3.13 and above, the cyr_dbtool can be used to insert
and remove records manually for each database.

-- 
Dan White


More information about the Cyrus-devel mailing list