[ 
https://issues.apache.org/jira/browse/AMQ-7211?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Borgstrom closed AMQ-7211.
--------------------------

> Pending ACKs errantly being cleared on STOMP transaction COMMIT/ABORT
> ---------------------------------------------------------------------
>
>                 Key: AMQ-7211
>                 URL: https://issues.apache.org/jira/browse/AMQ-7211
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: stomp
>    Affects Versions: 5.15.6
>            Reporter: Borgstrom
>            Priority: Major
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> Given a queue with many messages in it, and a client that is creating 
> transactions for each message it is processing will lead to the following 
> error:
> org.apache.activemq.transport.stomp.ProtocolException: Unexpected ACK 
> received for message-id [null]\n\tat 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:476)\n\tat
>  
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:251)\n\tat
>  
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:85)\n\tat
>  
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)\n\tat
>  
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233)\n\tat
>  
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)\n\tat
>  java.lang.Thread.run(Thread.java:748)\n
> The client has a prefetch value of 1.
> Here is the debug logs from my client showing frames sent & received.  We end 
> up processing a number of messages, but eventually this happens:
> {noformat}
> DEBU[0119] Read frame                                    body="[123 34 101 
> 110 118 101 108 111 112 101 34 58 123 34 101 120 99 104 97 110 103 101 73 100 
> 34 58 34 89 65 75 95 72 69 65 82 84 66 69 65 84 34 44 34 117 110 116 114 117 
> 115 116 101 100 95 115 111 117 114 99 101 34 58 102 97 108 115 101 44 34 105 
> 100 34 58 34 56 50 49 53 52 100 98 55 45 102 102 53 99 45 52 98 57 49 45 98 
> 52 98 52 45 101 57 49 52 54 54 99 52 100 50 54 102 34 44 34 109 101 115 115 
> 97 103 101 95 116 105 109 101 115 116 97 109 112 34 58 49 53 53 56 49 50 52 
> 57 57 54 57 49 51 125 44 34 112 97 121 108 111 97 100 34 58 123 34 120 34 58 
> 51 55 44 34 98 121 116 101 115 34 58 34 120 108 52 61 34 125 44 34 97 99 116 
> 105 111 110 34 58 34 119 111 114 107 34 125]" command=MESSAGE 
> header="map[ack:ID\\c6e56db7da800-41539-1558117094401-130\\c12 
> content-type:application/json destination:/queue/YAK_HEARTBEAT-YAK_HEARTBEAT 
> expires:0 
> message-id:ID\\c6e56db7da800-41539-1558117094401-5\\c68\\c-1\\c1\\c538 
> persistent:true priority:4 subscription:1E81E7A4F3D6C40314373C0F20B9F1AF 
> timestamp:1558124997013]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=BEGIN header="map[transaction:55CE4B41F0CF0C86C0D95EA9C7182A26]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=ACK header="map[id:ID\\c6e56db7da800-41539-1558117094401-130\\c12 
> transaction:55CE4B41F0CF0C86C0D95EA9C7182A26]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=COMMIT header="map[transaction:55CE4B41F0CF0C86C0D95EA9C7182A26]"
> DEBU[0119] Read frame                                    body="[123 34 101 
> 110 118 101 108 111 112 101 34 58 123 34 101 120 99 104 97 110 103 101 73 100 
> 34 58 34 89 65 75 95 72 69 65 82 84 66 69 65 84 34 44 34 117 110 116 114 117 
> 115 116 101 100 95 115 111 117 114 99 101 34 58 102 97 108 115 101 44 34 105 
> 100 34 58 34 101 100 49 51 56 51 53 101 45 56 98 50 98 45 52 98 100 101 45 97 
> 52 99 50 45 102 51 50 49 98 49 54 99 50 51 57 57 34 44 34 109 101 115 115 97 
> 103 101 95 116 105 109 101 115 116 97 109 112 34 58 49 53 53 56 49 50 52 57 
> 57 54 57 49 51 125 44 34 112 97 121 108 111 97 100 34 58 123 34 120 34 58 51 
> 56 44 34 98 121 116 101 115 34 58 34 52 103 61 61 34 125 44 34 97 99 116 105 
> 111 110 34 58 34 119 111 114 107 34 125]" command=MESSAGE 
> header="map[ack:ID\\c6e56db7da800-41539-1558117094401-130\\c13 
> content-type:application/json destination:/queue/YAK_HEARTBEAT-YAK_HEARTBEAT 
> expires:0 
> message-id:ID\\c6e56db7da800-41539-1558117094401-5\\c68\\c-1\\c1\\c539 
> persistent:true priority:4 subscription:1E81E7A4F3D6C40314373C0F20B9F1AF 
> timestamp:1558124997017]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=BEGIN header="map[transaction:0082C668C3243EDBA05FE48D25728979]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=ACK header="map[id:ID\\c6e56db7da800-41539-1558117094401-130\\c13 
> transaction:0082C668C3243EDBA05FE48D25728979]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=COMMIT header="map[transaction:0082C668C3243EDBA05FE48D25728979]"
> DEBU[0119] Read frame                                    body="[123 34 101 
> 110 118 101 108 111 112 101 34 58 123 34 101 120 99 104 97 110 103 101 73 100 
> 34 58 34 89 65 75 95 72 69 65 82 84 66 69 65 84 34 44 34 117 110 116 114 117 
> 115 116 101 100 95 115 111 117 114 99 101 34 58 102 97 108 115 101 44 34 105 
> 100 34 58 34 49 54 102 98 99 50 97 101 45 53 52 99 54 45 52 53 49 101 45 97 
> 98 97 50 45 50 49 98 55 56 56 99 49 50 48 57 53 34 44 34 109 101 115 115 97 
> 103 101 95 116 105 109 101 115 116 97 109 112 34 58 49 53 53 56 49 50 52 57 
> 57 54 57 50 52 125 44 34 112 97 121 108 111 97 100 34 58 123 34 120 34 58 52 
> 48 44 34 98 121 116 101 115 34 58 34 79 89 81 61 34 125 44 34 97 99 116 105 
> 111 110 34 58 34 119 111 114 107 34 125]" command=MESSAGE 
> header="map[ack:ID\\c6e56db7da800-41539-1558117094401-130\\c14 
> content-type:application/json destination:/queue/YAK_HEARTBEAT-YAK_HEARTBEAT 
> expires:0 
> message-id:ID\\c6e56db7da800-41539-1558117094401-5\\c68\\c-1\\c1\\c540 
> persistent:true priority:4 subscription:1E81E7A4F3D6C40314373C0F20B9F1AF 
> timestamp:1558124997020]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=BEGIN header="map[transaction:9F8D662467C2343B3E1958F5FD78D7C4]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=ACK header="map[id:ID\\c6e56db7da800-41539-1558117094401-130\\c14 
> transaction:9F8D662467C2343B3E1958F5FD78D7C4]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=COMMIT header="map[transaction:9F8D662467C2343B3E1958F5FD78D7C4]"
> DEBU[0119] Read frame                                    body="[123 34 101 
> 110 118 101 108 111 112 101 34 58 123 34 101 120 99 104 97 110 103 101 73 100 
> 34 58 34 89 65 75 95 72 69 65 82 84 66 69 65 84 34 44 34 117 110 116 114 117 
> 115 116 101 100 95 115 111 117 114 99 101 34 58 102 97 108 115 101 44 34 105 
> 100 34 58 34 56 53 98 53 57 98 56 54 45 56 55 97 49 45 52 99 97 100 45 98 101 
> 101 99 45 57 100 101 98 99 101 50 54 54 98 101 55 34 44 34 109 101 115 115 97 
> 103 101 95 116 105 109 101 115 116 97 109 112 34 58 49 53 53 56 49 50 52 57 
> 57 54 57 51 53 125 44 34 112 97 121 108 111 97 100 34 58 123 34 120 34 58 51 
> 57 44 34 98 121 116 101 115 34 58 34 106 113 73 61 34 125 44 34 97 99 116 105 
> 111 110 34 58 34 119 111 114 107 34 125]" command=MESSAGE 
> header="map[ack:ID\\c6e56db7da800-41539-1558117094401-130\\c15 
> content-type:application/json destination:/queue/YAK_HEARTBEAT-YAK_HEARTBEAT 
> expires:0 
> message-id:ID\\c6e56db7da800-41539-1558117094401-5\\c68\\c-1\\c1\\c541 
> persistent:true priority:4 subscription:1E81E7A4F3D6C40314373C0F20B9F1AF 
> timestamp:1558124997023]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=BEGIN header="map[transaction:513A5D087CF9ADDF9B0225A35EBD3015]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=ACK header="map[id:ID\\c6e56db7da800-41539-1558117094401-130\\c15 
> transaction:513A5D087CF9ADDF9B0225A35EBD3015]"
> DEBU[0119] Writing frame                                 body="[]" 
> command=COMMIT header="map[transaction:513A5D087CF9ADDF9B0225A35EBD3015]"
> DEBU[0119] Read frame                                    body="[111 114 103 
> 46 97 112 97 99 104 101 46 97 99 116 105 118 101 109 113 46 116 114 97 110 
> 115 112 111 114 116 46 115 116 111 109 112 46 80 114 111 116 111 99 111 108 
> 69 120 99 101 112 116 105 111 110 58 32 85 110 101 120 112 101 99 116 101 100 
> 32 65 67 75 32 114 101 99 101 105 118 101 100 32 102 111 114 32 109 101 115 
> 115 97 103 101 45 105 100 32 91 110 117 108 108 93 10 9 97 116 32 111 114 103 
> 46 97 112 97 99 104 101 46 97 99 116 105 118 101 109 113 46 116 114 97 110 
> 115 112 111 114 116 46 115 116 111 109 112 46 80 114 111 116 111 99 111 108 
> 67 111 110 118 101 114 116 101 114 46 111 110 83 116 111 109 112 65 99 107 40 
> 80 114 111 116 111 99 111 108 67 111 110 118 101 114 116 101 114 46 106 97 
> 118 97 58 52 55 54 41 10 9 97 116 32 111 114 103 46 97 112 97 99 104 101 46 
> 97 99 116 105 118 101 109 113 46 116 114 97 110 115 112 111 114 116 46 115 
> 116 111 109 112 46 80 114 111 116 111 99 111 108 67 111 110 118 101 114 116 
> 101 114 46 111 110 83 116 111 109 112 67 111 109 109 97 110 100 40 80 114 111 
> 116 111 99 111 108 67 111 110 118 101 114 116 101 114 46 106 97 118 97 58 50 
> 53 49 41 10 9 97 116 32 111 114 103 46 97 112 97 99 104 101 46 97 99 116 105 
> 118 101 109 113 46 116 114 97 110 115 112 111 114 116 46 115 116 111 109 112 
> 46 83 116 111 109 112 84 114 97 110 115 112 111 114 116 70 105 108 116 101 
> 114 46 111 110 67 111 109 109 97 110 100 40 83 116 111 109 112 84 114 97 110 
> 115 112 111 114 116 70 105 108 116 101 114 46 106 97 118 97 58 56 53 41 10 9 
> 97 116 32 111 114 103 46 97 112 97 99 104 101 46 97 99 116 105 118 101 109 
> 113 46 116 114 97 110 115 112 111 114 116 46 84 114 97 110 115 112 111 114 
> 116 83 117 112 112 111 114 116 46 100 111 67 111 110 115 117 109 101 40 84 
> 114 97 110 115 112 111 114 116 83 117 112 112 111 114 116 46 106 97 118 97 58 
> 56 51 41 10 9 97 116 32 111 114 103 46 97 112 97 99 104 101 46 97 99 116 105 
> 118 101 109 113 46 116 114 97 110 115 112 111 114 116 46 116 99 112 46 84 99 
> 112 84 114 97 110 115 112 111 114 116 46 100 111 82 117 110 40 84 99 112 84 
> 114 97 110 115 112 111 114 116 46 106 97 118 97 58 50 51 51 41 10 9 97 116 32 
> 111 114 103 46 97 112 97 99 104 101 46 97 99 116 105 118 101 109 113 46 116 
> 114 97 110 115 112 111 114 116 46 116 99 112 46 84 99 112 84 114 97 110 115 
> 112 111 114 116 46 114 117 110 40 84 99 112 84 114 97 110 115 112 111 114 116 
> 46 106 97 118 97 58 50 49 53 41 10 9 97 116 32 106 97 118 97 46 108 97 110 
> 103 46 84 104 114 101 97 100 46 114 117 110 40 84 104 114 101 97 100 46 106 
> 97 118 97 58 55 52 56 41 10]" command=ERROR 
> header="map[content-type:text/plain message:Unexpected ACK received for 
> message-id [null]]"
> ERRO[0119] Error while processing frames to/from broker, marking as failed  
> broker=BLACK error="recevied ERROR from server: 
> org.apache.activemq.transport.stomp.ProtocolException: Unexpected ACK 
> received for message-id [null]\n\tat 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:476)\n\tat
>  
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:251)\n\tat
>  
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:85)\n\tat
>  
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)\n\tat
>  
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233)\n\tat
>  
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)\n\tat
>  java.lang.Thread.run(Thread.java:748)\n" 
> name=YAK_HEARTBEAT-YAK_HEARTBEAT{noformat}
>  
> I believe this happens because of a race, where under some conditions 
> ActiveMQ ends up errantly clearing out "c15" when from the pending ACKs when 
> the COMMIT for the ACK of "c14" is processed:
> [https://github.com/apache/activemq/blob/activemq-5.15.6/activemq-stomp/src/main/java/org/apache/activemq/transport/stomp/ProtocolConverter.java#L525]
> The same thing could happen for ABORT too:
> [https://github.com/apache/activemq/blob/activemq-5.15.6/activemq-stomp/src/main/java/org/apache/activemq/transport/stomp/ProtocolConverter.java#L556]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to