#163 Transaction in progress causes server unresponsive on topic

v0.7.7-beta-1
open
nobody
server (49)
5
2007-07-11
2007-07-11
Peter De Leuze
No

There is a problem that occurs frequently but randomly, but I cannot reproduce it.

This is the scenario:
1) two jms clients connect to the same server, both on a different topic A and B.
Everything works fine.
2) two/more additional clients are started and connect to those topics.
3) at one point, "somewhere" a transaction error is caused, and causes all connected clients to the same topic to receive jms messages: the clients send it to server topic, but no messages are propagated.
Other connected clients on other topics work fine !
In the serverlog the following logstate is printed:
--------------
2007-07-11 09:29:10,234 ERROR [Scheduler-Worker-5] - Transaction in progress, allocated at
java.lang.Exception
at java.lang.Throwable.<init>(Throwable.java:181)
at java.lang.Exception.<init>(Exception.java:29)
at org.exolab.jms.persistence.DatabaseService$State.<init>(DatabaseService.java:321)
at org.exolab.jms.persistence.DatabaseService.begin(DatabaseService.java:152)
at org.exolab.jms.server.SessionConsumer.send(SessionConsumer.java:550)
at org.exolab.jms.server.SessionConsumer.dispatch(SessionConsumer.java:498)
at org.exolab.jms.server.SessionConsumer.access$000(SessionConsumer.java:78)
at org.exolab.jms.server.SessionConsumer$1.run(SessionConsumer.java:155)
at org.exolab.jms.scheduler.SerialTask.run(SerialTask.java:164)
at org.exolab.jms.common.threads.ThreadPool$NotifyingRunnable.run(ThreadPool.java:211)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Thread.java:595)
2007-07-11 09:29:10,315 ERROR [Scheduler-Worker-5] - Failed to release unsent message
org.exolab.jms.persistence.PersistenceException: Transaction already in progress
at java.lang.Throwable.<init>(Throwable.java:196)
at java.lang.Exception.<init>(Exception.java:41)
at org.exolab.jms.service.ServiceException.<init>(ServiceException.java:101)
at org.exolab.jms.service.ServiceException.<init>(ServiceException.java:80)
at org.exolab.jms.persistence.PersistenceException.<init>(PersistenceException.java:71)
at org.exolab.jms.persistence.DatabaseService.begin(DatabaseService.java:159)
at org.exolab.jms.server.SessionConsumer.send(SessionConsumer.java:594)
at org.exolab.jms.server.SessionConsumer.dispatch(SessionConsumer.java:498)
at org.exolab.jms.server.SessionConsumer.access$000(SessionConsumer.java:78)
at org.exolab.jms.server.SessionConsumer$1.run(SessionConsumer.java:155)
at org.exolab.jms.scheduler.SerialTask.run(SerialTask.java:164)
at org.exolab.jms.common.threads.ThreadPool$NotifyingRunnable.run(ThreadPool.java:211)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Thread.java:595)
--------------------

4)When new clients connect/disconnect, this does not change the unresponsiveness on the "faulty" topic.
Only when the first connected client disconnects, then suddenly the server becomes again responsive on that topic !!!

So, it seems that this transaction error causes the whole topic to be blocked, until the faulty client disconnects.
I think it is better that it may never occur that a server just stops (partially) working because of a client error... The topic should stay responsive.

Discussion