[
https://issues.apache.org/jira/browse/ARTEMIS-4476?focusedWorklogId=887440&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-887440
]
ASF GitHub Bot logged work on ARTEMIS-4476:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 26/Oct/23 18:10
Start Date: 26/Oct/23 18:10
Worklog Time Spent: 10m
Work Description: tabish121 commented on code in PR #4656:
URL: https://github.com/apache/activemq-artemis/pull/4656#discussion_r1373551849
##########
artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java:
##########
@@ -980,6 +983,19 @@ class DefaultController implements SenderController {
@Override
public Consumer init(ProtonServerSenderContext senderContext) throws
Exception {
+ {
+ ProtonHandler handler;
+ Connection qpidConnection;
+ // Avoiding possible NPEs that could happen on mock tests
+ if (connection != null &&
+ (handler = connection.getHandler()) != null && (qpidConnection
= handler.getConnection()) != null) {
+ if (qpidConnection.getRemoteState() == EndpointState.CLOSED) {
+ logger.warn("AMQP Connection creating invalid consumer for
closed connection", connection);
+ throw new IllegalStateException("AMQP connection " +
connection.getRemoteAddress() + " creating invalid consumer for closed
connection");
+ }
+ }
+ }
+
Review Comment:
I'm not particularly fond of this "make mocking easier approach" as it
ignore what should be an invalid case of missing proton handler and connection.
If a test needs to mock this it should be able to supply mocks that answer
with mocked versions of these objects.
Issue Time Tracking
-------------------
Worklog Id: (was: 887440)
Time Spent: 20m (was: 10m)
> Connection Failure Race Conditions in AMQP and Core
> ---------------------------------------------------
>
> Key: ARTEMIS-4476
> URL: https://issues.apache.org/jira/browse/ARTEMIS-4476
> Project: ActiveMQ Artemis
> Issue Type: Task
> Reporter: Clebert Suconic
> Assignee: Clebert Suconic
> Priority: Major
> Time Spent: 20m
> Remaining Estimate: 0h
>
> Failure Detection has a possibility to a race condition with the processing
> of the client packets (or frames in the case of AMQP).
> This is because Netty detects the failure and removes the connection objects
> while the packets are still processing things.
> I was not able to reproduce this particular issue, but I have seen a case
> from a memory dump where the consumer was created while the connection was
> already dropped, leaving the consumer isolated without any communication with
> clients.
> That particular case I could see a possibility because of these races.
> I am adding tests to exercise connection failure in stress and I was able to
> reproduce other issues.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)