A BUGNOTE has been added to this bug. ====================================================================== http://dbmail.org/mantis/bug_view_advanced_page.php?bug_id=0000091 ====================================================================== Reported By: xing Assigned To: ====================================================================== Project: DBMail Bug ID: 91 Category: Database layer Reproducibility: N/A Severity: major Priority: normal Status: confirmed ====================================================================== Date Submitted: 15-Sep-04 20:33 CEST Last Modified: 22-Nov-04 09:01 CET ====================================================================== Summary: Possible infinite loop within either POP3/IMAP code, Description: I noticed my dbmail server's mysql CPU avergaing 75%+ which is out of the normal by a landslide. After investigation I noticed a infinite loop type query sent from likely the DBMAIL pop3/imap process by looking at the db login name and query.
The following mysql query is executed in a infinite loop by a dbmail process (again I don't know which one). ---------------------------- UPDATE messages set status=17794368026245745520 WHERE message_idnr=17794367648288623384 AND status<2 ---------------------------- ====================================================================== ---------------------------------------------------------------------- xing - 15-Sep-04 20:42 CEST ---------------------------------------------------------------------- Confirmed dbmail POP3 daemon as the origin of the queries. Killing all imapd processes had no effect. Killing all pop3d processes stopped the infinite loop query. ---------------------------------------------------------------------- aaron - 07-Oct-04 00:58 CEST ---------------------------------------------------------------------- I see this with IMAPD lately. Not a clue at all what's bringing it on :-\ ---------------------------------------------------------------------- seanc - 05-Nov-04 16:14 CET ---------------------------------------------------------------------- When uploading a message from a local mailbox to the server, I can trigger this 100% of the time. It's devatsating to the database... it loops infinitely with the following two queries: [EMAIL PROTECTED]: [local] 952 2004-11-05 07:05:23 PST LOG: statement: SELECT message_idnr FROM dbmail_messages WHERE mailbox_idnr = '5' AND status < '2' AND unique_id!='' AND recent_flag=1 [EMAIL PROTECTED]: [local] 952 2004-11-05 07:05:23 PST LOG: duration: 0.880 ms [EMAIL PROTECTED]: [local] 952 2004-11-05 07:05:23 PST LOG: statement: SELECT lock.messageblk FROM dbmail_messageblks block, dbmail_messages msg WHERE block.physmessage_id = msg.physmessage_id AND msg.message_idnr = '118' ORDER BY block.messageblk_idnr [EMAIL PROTECTED]: [local] 952 2004-11-05 07:05:23 PST LOG: duration: 0.900 ms Is there a workaround/fix for this bug that can be applied to 2.0.0? My users are constantly doing this and on an amd64, it doesn't take too long to generate 500GB of pgsql log data if the database goes unchecked overnight. :) ---------------------------------------------------------------------- jnorell - 05-Nov-04 17:36 CET ---------------------------------------------------------------------- seanc: your problem is in copying a mailbox to the server - using mailbox2dbmail? That's going to be a different problem than the infinite loop this ticket is about (in pop3d). > [EMAIL PROTECTED]: [local] 952 2004-11-05 07:05:23 PST LOG: statement: > SELECT lock.messageblk FROM dbmail_messageblks block, dbmail_messages msg ^^^^ is that really "lock," not "block"? (ought to get an error on the query if so) > WHERE block.physmessage_id = msg.physmessage_id AND msg.message_idnr = > '118' ORDER BY block.messageblk_idnr > [EMAIL PROTECTED]: [local] 952 2004-11-05 07:05:23 PST LOG: duration: > 0.900 ms ---------------------------------------------------------------------- seanc - 05-Nov-04 20:26 CET ---------------------------------------------------------------------- That's correct... I must have deleted the 'b' when pasting my message. It seems as though the db_get_msgflag() and db_get_main_header() are getting called in an infinite loop via _ic_fetch(). What could cause such a problem? ---------------------------------------------------------------------- paul - 06-Nov-04 22:30 CET ---------------------------------------------------------------------- The reported bug is in mysql/dbmysql.c(db_update_pop) The &sessionptr->messagelst is apparently badly initialized. Maybe wrapping the list_nodeadd call in db_createsession will be enough. ---------------------------------------------------------------------- aaron - 22-Nov-04 02:03 CET ---------------------------------------------------------------------- Problem seems to be a missing list_init. Try the patch. ---------------------------------------------------------------------- ilja - 22-Nov-04 09:01 CET ---------------------------------------------------------------------- There is a list_init in db_createsession() in db.c. Or does this bug express itself when that function isn't called. BTW, the pop3() function is a mess.. way too long. When Paul is finished with imapcommands.c, I'd like to rewrite pop3.c in the same manner. Bug History Date Modified Username Field Change ====================================================================== 15-Sep-04 20:33xing New Bug 15-Sep-04 20:42xing Bugnote Added: 0000264 07-Oct-04 00:58aaron Bugnote Added: 0000288 07-Oct-04 00:59aaron Status new => confirmed 05-Nov-04 16:14seanc Bugnote Added: 0000342 05-Nov-04 16:14seanc Bug Monitored: seanc 05-Nov-04 17:36jnorell Bugnote Added: 0000343 05-Nov-04 20:26seanc Bugnote Added: 0000344 06-Nov-04 22:30paul Bugnote Added: 0000347 22-Nov-04 02:02aaron File Added: diff-pop3 22-Nov-04 02:03aaron Bugnote Added: 0000362 22-Nov-04 09:01ilja Bugnote Added: 0000363 ======================================================================