Issue Details (XML | Word | Printable)

Key: JAMES-603
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Blocker Blocker
Assignee: Noel J. Bergman
Reporter: Stefano Bagnara
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
JAMES Server

Outgoing spooling stuck over old mails when more than 1000 old mails are present in outgoing.

Created: 01/Sep/06 05:21 PM   Updated: 21/Nov/07 08:31 AM
Return to search
Component/s: Remote Delivery, SpoolManager & Processors
Affects Version/s: 2.3.0
Fix Version/s: 2.3.0

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works spool-fix.patch 2006-09-04 07:07 PM Noel J. Bergman 4 kB

Resolution Date: 08/Sep/06 05:12 PM


 Description  « Hide
scenario:
remote delivery has 6 hours for the third delaytime
insert into the outgoing spool 1000 messages with a last_updated 5 hours ago and error_message 3
start james
send a new message

the first remote delivery thread is stuck in the main accept method because getNextPendingMessage ALWAYS return a new pending message but none of them is ready to be processed. The bad news is that after it finish the 1000 messages from pendingMessages it simply restart the loadPendingMessages and try them again, without waiting.

So 100% CPU used until we are able to spool the 1000 "old" messages and then our james will return to normality.


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
ASF #440612 Wed Sep 06 04:38:23 UTC 2006 noel JAMES-603. The salient change is that we push the filter all the way down to the code that processes the ResultSet, and we don't load messages into the cache that aren't accepted by the filter. Unfortunately, we can no longer naively call setMaxRows, since we don't know how many rows we might have to process in order to get to even ANY valid messages, so we'll have to trust the JDBC driver to use cursors properly, rather than buffer a potentially huge ResultSet in memory.
Files Changed
ADD /james/server/branches/v2.3/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java (from /james/server/trunk/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java)
MODIFY /james/server/trunk/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java