Mail-in Agent proceses documents more than once
Posted on 2004-03-30
I have a database with a LotusScript mail-in Agent set to "after new mail has arrived". The problem is that my Agent randomly processes the same document more than once. The server is Domino 6.0.2 CF2.
Yesterday I made five tests, each with eight new mails sent at the same time. There was a delay of approx. 45 minutes between each test. Before starting the next test I deleted the documents received in the previous test.
Test 1: everything was fine.
Test 2: three out of eight memos received were processed twice. The second run started exactly 15 minutes after the first run.
Test 3: see Test 1.
Test 4: two out of eight memos received were processed twice. The second run started exactly 2 Minutes after the first run.
Test 5: see Test 3.
In the last test two mails out of eight were processed three times. The second run started exactly 15 minutes after the first run and the third run with a further delay of 16 minutes.
After my last test I went at home, leaving the eight documents in the database. This morning I've seen that all eight documents have been processed again at night, 0:03, when the Agent Manager's agent cache gets updated.
Now I restartet the Agent manager and all documents were processed again.
The agent processes the documents very fast (all eight documents within same second).
Basically the agent processes data received in a message from a Web application. It extracts pairwise (field=value) some data from the body text and writes the data into another notes document. Finally it stamps the memo form with a status.
The agent processes the documents using the following structure (original code with overhead removed):
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim memo As NotesDocument
Dim status As Integer
On Error Goto Error_Handler
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set memo = dc.GetFirstDocument
While Not memo Is Nothing
' *** Processing takes place here ***
memo.Status = "1"
Call memo.Save( True, True )
Set memo = dc.GetNextDocument( memo )
if Not memo Is Nothing Then
' Write error into memo, set status and continue with next memo
memo.ErrorText = Cstr(Err) & ": " & Error & ", Zeile " & Cstr(Erl)
memo.Status = "2"
' Stop processing.
Print "Error " & Cstr(Err) & ": " & Error & _
" in Agent 'Dispatcher' " & db.Title & " (db.FilePath)"
As a workaround, I check the status in the while loop and do no processing an documents having a Status field. However, this is not a solution, since I need to keep the documents for a while.
Is there a known problem or what am I doing wrong?