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
======================================================================