You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Giovani Seben (JIRA)" <ji...@apache.org> on 2009/08/06 22:03:37 UTC

[jira] Commented: (AMQ-2280) stomp: Transport failed: java.io.IOException: Unexpected error occured

    [ https://issues.apache.org/activemq/browse/AMQ-2280?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=53513#action_53513 ] 

Giovani Seben commented on AMQ-2280:
------------------------------------

Hi,

The patch that I'm suggesting is a simple check on the code to try to avoid this situation since in my opinion without a more fine grained definition of transactions with Stomp would be required.

Let me try to explain this a bit better. 
The particular problem with the snippet of stomp code that you attached to this report is that it first subscribes to destination "/queue/COMMAND.HOST.alex" and then you tries to send transacted messages to "/queue/COMMANDREPLY.HOST.alex".  Since stomp transactions are bound only by the transactionID the logic in the code needs to check *all* destinations used in a connection for messages to commit. In this case the exception happens because there is nothing to be commited at "/queue/COMMAND.HOST.alex".

The bottom line is that since BEGIN doesn't take a destination as a parameter there is no way to identify for which destination you are starting a transaction and that's the reason why all destinations for the current connection have to be checked for messages to be commited.

My recommendation is that if you use transactions, don't use more than one destination per connection. This way you avoid the confusion of which destination the transaction is actually supposed to be for.

Hope that this clarifies some of your questions.

> stomp: Transport failed: java.io.IOException: Unexpected error occured
> ----------------------------------------------------------------------
>
>                 Key: AMQ-2280
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2280
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker, Connector
>    Affects Versions: 5.3.0
>         Environment: linux  2.6.26.8, Fedora Core 8
> java version "1.6.0_11"
> Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
> Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
> apache-activemq-5.3-SNAPSHOT-bin.gz   	 Fri May 29 06:12:47 GMT+00:00 2009  	 34977374  	   
>            Reporter: Aleksandar Ivanisevic
>         Attachments: AMQ-2280.patch
>
>
> This does not happen in 5.2.0, only in 5.3..SNAPSHOT 
> I'm getting the above exception with the following STOMP session
> > telnet localhost 61613
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> CONNECT
> passcode:password
> login:login
> ^@
> CONNECTED
> session:ID:alex-60773-1244124360289-2:2
> SUBSCRIBE
> activemq.prefetchSize:1
> ack:client
> destination:/queue/COMMAND.HOST.alex
> activemq.exclusive:true
> ^@
> BEGIN
> destination:/queue/COMMANDREPLY.HOST.alex
> transaction:ID:alex-58262-1244123488785-2:1-1
> persistent:true
> ^@
> SEND
> destination:/queue/COMMANDREPLY.HOST.alex
> transaction:ID:alex-58262-1244123488785-2:1-1
> receipt:ID:alex-58262-1244123488785-2:1-2
> persistent:true
> replytext
> ^@
> RECEIPT
> receipt-id:ID:alex-58262-1244123488785-2:1-2
> COMMIT
> destination:/queue/COMMANDREPLY.HOST.alex
> transaction:ID:alex-58262-1244123488785-2:1-1
> ^@
> Connection closed by foreign host.
> at this point AMQ closses the TCP connection and I see the following in the log (DEBUG root log level):
> DEBUG TransportConnection            - Setting up new connection: /127.0.0.1:44692
> DEBUG AMQPersistenceAdapter          - dataFilesInProgress.values: (0) []
> DEBUG AMQPersistenceAdapter          - lastDataFile: 1
> DEBUG AsyncDataManager               - lastFileId=0, purgeList: (0) []
> DEBUG AbstractRegion                 - localhost adding consumer: ID:alex-60773-1244124360289-2:2:-1:1 for destination: queue://COMMAND.HOST.alex
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG AMQPersistenceAdapter          - dataFilesInProgress.values: (0) []
> DEBUG AMQPersistenceAdapter          - lastDataFile: 1
> DEBUG AsyncDataManager               - lastFileId=0, purgeList: (0) []
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG AMQMessageStore                - Journalled transacted message add for: ID:alex-60773-1244124360289-2:2:-1:1:1, at: offset = 10973, file = 1, size = 375, type = 1
> DEBUG AMQPersistenceAdapter          - dataFilesInProgress.values: (0) []
> DEBUG AMQPersistenceAdapter          - lastDataFile: 1
> DEBUG AsyncDataManager               - lastFileId=0, purgeList: (0) []
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG Transport                      - Transport failed: java.io.IOException: Unexpected error occured
> java.io.IOException: Unexpected error occured
> 	at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:192)
> 	at java.lang.Thread.run(Thread.java:619)
> Caused by: java.util.NoSuchElementException
> 	at java.util.LinkedList.getFirst(LinkedList.java:109)
> 	at org.apache.activemq.transport.stomp.StompSubscription.onStompCommit(StompSubscription.java:130)
> 	at org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommit(ProtocolConverter.java:337)
> 	at org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:179)
> 	at org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:67)
> 	at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
> 	at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
> 	at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
> 	... 1 more
> DEBUG TransportConnection            - Stopping connection: /127.0.0.1:44692
> DEBUG TcpTransport                   - Stopping transport tcp:///127.0.0.1:44692
> DEBUG TransportConnection            - Stopped transport: /127.0.0.1:44692
> DEBUG TransportConnection            - Cleaning up connection resources: /127.0.0.1:44692
> DEBUG AbstractRegion                 - localhost removing consumer: ID:alex-60773-1244124360289-2:2:-1:1 for destination: queue://COMMAND.HOST.alex
> DEBUG LocalTransaction               - rollback: TX:ID:alex-60773-1244124360289-2:2:1 syncCount: 3
> DEBUG AMQMessageStore                - Transacted message add rollback for: ID:alex-60773-1244124360289-2:2:-1:1:1, at: offset = 10973, file = 1, size = 375, type = 1
> DEBUG TransportConnection            - Connection Stopped: /127.0.0.1:44692

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.