activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Giovani Seben (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQ-2280) stomp: Transport failed: java.io.IOException: Unexpected error occured
Date Thu, 06 Aug 2009 20:03:37 GMT

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


Mime
View raw message