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/07/14 22:34:33 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=52821#action_52821 ] 

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

I was reviewing this report and I found the problem that generates this exception. 

In the particular case shown here, when commiting a transaction the broker will attempt to commit messages received by the subscriber created before the transaction. 
{code}
SUBSCRIBE
activemq.prefetchSize:1
ack:client
destination:/queue/COMMAND.HOST.alex
activemq.exclusive:true
{code}
Since there are no messages there to be commited it fails when doing a lookup on the message subscription linked list. 

Stomp transactions are based only on the transaction ID. The sample here assumes that the transaction is tied to the destination which is not the case. In this case the destination parameter passed in the BEGIN and COMMIT statements is simply ignored by the stomp transport. They are not part of the protocol specification AFAIK. Since mixing multiple transacted and non-transacted destinations within the same stomp connection will cause problems I added a simple check that will warn the user about this issue.  

> 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
>
> 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.