BDB and errors...

Robert Mueller robm at fastmail.fm
Tue Mar 14 15:20:29 EST 2006


We're using cyrus 2.3 and everything works fine, except we seem to have 
intermittent problems with BDB 4.2 (specifically the RPM db4-4.2.52-3.1). We 
only use BDB for the delivery db.

In general it works fine, however if for some reason a server has crashed 
and we reboot the server, we then seem to almost always have a problem with 
the DB.

Probably best to show a sequence of events.

1. Server froze up, so force a hard reset
2. Server boots up and remounts everything fine. All partitions are reiserfs 
and mount ok with journal playback
3. We start cyrus. Since the delivery DB is temporary and non-critical, the 
start script explicitly does:

     rm -f /var/imap/db/log.*
     rm -f /var/imap/db/__db*
     rm -f /var/imap/deliver.db

To clean out all existing BDB state and information. I can confirm that the 
only files left in the /var/imap/db dir are DB_CONFIG and skipstamp. There 
appears to be no BDB environment state
4. cyrus appears to start fine, but intermittently we see errors in the log 
like:

Mar 14 13:47:25 server1 lmtp[2514]: DBERROR: mystore: error storing 
<441702FE.6070601 at googlemail.com>: DB_PAGE_NOTFOUND: Requested page not 
found

Each time an error like this occurs, it seems to leave a transaction open. 
Running:

(cd /var/imap/db; /usr/bin/db_stat -t -h .)

Normally shows "Active transactions" as 0, but after each of the above 
errors appears in the log, the count increases and never decreases. 
Eventually this causes problems because it appears that processes get stuck 
waiting for the transaction in a semi-busy loop inside BDB (continuous calls 
to select with a 1/10th of second timeout), and the checkpointing process 
can't cleanup old log files with open transactions in them. Eventually 
either the transaction count reaches the set_tx_max value, and causes BDB to 
go into error status, or the server load increases a lot due to the 
semi-busy wait loop BDB gets in.

5. Stopping cyrus, then starting it again with the exact same start script 
usually then fixes the problem

That's the bit I don't get. Why would restarting again change anything, it 
seems that we're clearing out exactly the same data in each case, but 
there's definitely some weird state getting left behind after a hard reboot 
causing the errors, but I don't know where or why.

Has anyone seen anything similar with their servers or has any idea what 
would be causing this?

Rob



More information about the Info-cyrus mailing list