Robbie Gemmell created ARTEMIS-4242:
---------------------------------------

             Summary: closing session with recent 'async acks' can lead to 
exceptions from apparent consumer cleanup race
                 Key: ARTEMIS-4242
                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4242
             Project: ActiveMQ Artemis
          Issue Type: Bug
          Components: Broker
    Affects Versions: 2.28.0
            Reporter: Robbie Gemmell


(Title is a little bit of a guess based on what a test is doing, the exceptions 
logged as a result, and the fact it poisoned a subsequent test).

Closing a session with recent 'async acks' from using option 
'blockOnAcknowledge=false' appears to lead to possible exceptions on the broker 
(snippet later), seemingly from a race between consumer cleanup during this, 
and processing of the previous acknowledgements.

AcknowledgementTest.testNonBlockingAckPerf sends messages and then consumes 
them two seperate queues with 'blockOnAcknowledge=false' and 
'blockOnAcknowledge=true' and compares duration. Invariably, it logs 
stacktraces like below during execution of this test (not obvious from default 
output, but is when turning on some debug instrumentation of which test is 
starting/stopping). After this happens, the test that follows would fail due to 
finding an extra message on a queue (queue1) they both used (this was reported 
in ARTEMIS-4082 against testDupsOKAcknowledgeQueue).

Changing AcknowledgementTest.testNonBlockingAckPerf to closely inspect the 
counts after it is main work is finished, it then fails sporadically as or mroe 
often than it was causing testDupsOKAcknowledgeQueue to fail.

Example output during failure in recent run: 
https://github.com/apache/activemq-artemis/actions/runs/4691971133/jobs/8317110969#step:5:33384
{noformat}
[Thread-0 
(ActiveMQ-remoting-threads-ActiveMQServerImpl::name=localhost-195163481)] 
17:20:43,422 WARN  [org.apache.activemq.artemis.core.server] AMQ222061: Client 
connection failed, clearing up resources for session 
855206e2-da1f-11ed-8303-000d3aa462b0
[Thread-0 
(ActiveMQ-remoting-threads-ActiveMQServerImpl::name=localhost-195163481)] 
17:20:43,430 WARN  [org.apache.activemq.artemis.core.server] AMQ222107: Cleared 
up resources for session 855206e2-da1f-11ed-8303-000d3aa462b0
[Thread-7 
(ActiveMQ-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$6@fd46303)]
 17:20:43,446 ERROR [org.apache.activemq.artemis.core.server] AMQ224016: Caught 
exception
org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException: AMQ229028: 
Consumer 0 doesn't exist on the server
        at 
org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.findConsumer(ServerSessionImpl.java:1267)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.acknowledge(ServerSessionImpl.java:1234)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.onSessionAcknowledge(ServerSessionPacketHandler.java:762)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.onMessagePacket(ServerSessionPacketHandler.java:302)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at org.apache.activemq.artemis.utils.actors.Actor.doTask(Actor.java:32) 
~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) 
~[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 
~[?:?]
        at 
org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
[Thread-7 
(ActiveMQ-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$6@fd46303)]
 17:20:43,463 ERROR [org.apache.activemq.artemis.core.server] AMQ224016: Caught 
exception
org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException: AMQ229028: 
Consumer 0 doesn't exist on the server
        at 
org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.findConsumer(ServerSessionImpl.java:1267)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.acknowledge(ServerSessionImpl.java:1234)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.onSessionAcknowledge(ServerSessionPacketHandler.java:762)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.onMessagePacket(ServerSessionPacketHandler.java:302)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at org.apache.activemq.artemis.utils.actors.Actor.doTask(Actor.java:32) 
~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) 
~[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 
~[?:?]
        at 
org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
[Thread-7 
(ActiveMQ-server-org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$6@fd46303)]
 17:20:43,470 ERROR [org.apache.activemq.artemis.core.server] AMQ224016: Caught 
exception
org.apache.activemq.artemis.api.core.ActiveMQIllegalStateException: AMQ229028: 
Consumer 0 doesn't exist on the server
        at 
org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.findConsumer(ServerSessionImpl.java:1267)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.acknowledge(ServerSessionImpl.java:1234)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.onSessionAcknowledge(ServerSessionPacketHandler.java:762)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at 
org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.onMessagePacket(ServerSessionPacketHandler.java:302)
 ~[artemis-server-2.29.0-SNAPSHOT.jar:2.29.0-SNAPSHOT]
        at org.apache.activemq.artemis.utils.actors.Actor.doTask(Actor.java:32) 
~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) 
~[?:?]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 
~[?:?]
        at 
org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
 ~[artemis-commons-2.29.0-SNAPSHOT.jar:?]

..etc etc etc..
{noformat}




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to