Edgar Asatryan created JAMES-2458:
-------------------------------------
Summary: JMS mail queue caught in infinite loop.
Key: JAMES-2458
URL: https://issues.apache.org/jira/browse/JAMES-2458
Project: James Server
Issue Type: Bug
Components: Queue
Affects Versions: 3.0.0, master
Reporter: Edgar Asatryan
h2. *Background*
When *JMSMail* queue is empty the *deQueue* invocation leads to infinite loop.
Now the *deQueue* uses *while(true)* and tries to receive message with 10
second time out. When queue is empty the branch containing return statement is
never executed.
*Test*
Please run this test in *JMSMailQueueTest*:
{code:java}
@Test
void dequeueWhenQueueIsEmpty() throws Exception {
MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
}
{code}
it's never stops.
Proposed solution to create the *EmptyMailQueueException* or
*TimeoutMailQueueException* or even more specialized exception to describe the
problem.
Also in bundle with new exceptions we could add new method to the *MailQueue*
like this
{code:java}
MailQueueItem deQueue(long timeout, TimeUnit unit) throws MailQueueException,
InterruptedException;
{code}
to give users explicit control over timeout. This new method also gives a kind
of symmetry between *enQueue* and *deQueue*.
As an alternative I would suggest to simply return *null* when time is out and
no message is available for return.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]