activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nathan Mittler <nathan.mitt...@gmail.com>
Subject Re: activeMQ 5.1 + activemq-cpp-2.2 openwire transaction problem
Date Sun, 17 Aug 2008 14:52:14 GMT
Definitely sounds like a bug - would you mind capturing this in a JIRA  
issue?  If you have a code snippet, you can attach that as well, and  
we'll take a look.

Thanks,
Nate

On Aug 17, 2008, at 1:23 AM, BRoach wrote:

>
> There seems to be a rather nasty bug having to do with transactions  
> in the
> c++ client and openwire.
>
> If you send a large number of messages inside a transaction, and  
> ActiveMQ
> runs out of memory, cms::MessageProducer::send() throws an exception  
> (as it
> should).
>
> The exception text is: No valid response received for command
>
> The problem is ... the last message sent (the one that caused the  
> exception
> to be thrown) gets added to the queue while the others are rolled  
> back. This
> is a large problem, as the whole point of transactions is to avoid  
> this sort
> of thing.
>
> To summarize:
> - Start sending messages with the session set to SESSION_TRANSACTED
> - Fill ActiveMQ memory
> - Receive exception
> - The last message sent will be in the queue. All other messages  
> will be
> rolled back.
>
> Here's what the debug log looks like:
> DEBUG Usage                          - Memory usage change.  from:  
> 2, to: 1
> DEBUG AMQMessageStore                - Transacted message add  
> rollback for:
> 68445488-66bc-c258-0d30-4a1faede93a5:0:1:109, at: offset = 4527877,  
> file =
> 6, size = 47444, type = 1
> DEBUG Usage                          - Memory usage change.  from:  
> 1, to: 0
> DEBUG AMQMessageStore                - Transacted message add  
> rollback for:
> 68445488-66bc-c258-0d30-4a1faede93a5:0:1:110, at: offset = 4575321,  
> file =
> 6, size = 47439, type = 1
> DEBUG TransportConnection            - Connection Stopped: / 
> 127.0.0.1:44382
> DEBUG AMQMessageStore                - Journalled message add for:
> 68445488-66bc-c258-0d30-4a1faede93a5:0:1:111, at: offset = 4622760,  
> file =
> 6, size = 47442, type = 1
>
> As you can see, it adds a message to the queue after the rollback  
> and after
> stopping the connection!
>
> Trying to use Stomp rather than openwire creates a whole other set of
> problems (at least using the activemq-cpp API). It blocks when you  
> fill the
> memory (ok, not so bad) ... but if you kill your client because it's
> blocking forever ... activeMQ somehow doesn't lose the socket and  
> you're
> completely hosed (you have to restart activeMQ).
>
> I wrote a quick test C client using libstomp rather than activemq- 
> cpp and
> can code around this problem using a timeout and some sanity  
> checking ...
> but it's a bit of work and I really don't want to have to re-write the
> application I've already completed using activemq-cpp.
>
> Thoughts?
>
> Thanks in advance,
> Brian Roach
>
> -- 
> View this message in context: http://www.nabble.com/activeMQ-5.1-%2B-activemq-cpp-2.2-openwire-transaction-problem-tp19018190p19018190.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>


Mime
View raw message