You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Justin Bertram (Jira)" <ji...@apache.org> on 2024/01/20 22:29:00 UTC

[jira] [Resolved] (ARTEMIS-4571) Race condition w/TTL impacting in-vm connections

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

Justin Bertram resolved ARTEMIS-4571.
-------------------------------------
    Fix Version/s: 2.32.0
       Resolution: Fixed

> Race condition w/TTL impacting in-vm connections
> ------------------------------------------------
>
>                 Key: ARTEMIS-4571
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4571
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>            Reporter: Justin Bertram
>            Assignee: Justin Bertram
>            Priority: Major
>             Fix For: 2.32.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> The following WARN can occur due to a race condition between the initialization of {{org.apache.activemq.artemis.spi.core.protocol.ConnectionEntry}} and the periodic check by {{RemotingServiceImpl$FailureCheckAndFlushThread}}:
> {noformat}
> AMQ212037: Connection failure to invm:0 has been detected: AMQ229014: Did not receive data from invm:0 within the -1ms connection TTL. The connection will now be closed. [code=CONNECTION_TIMEDOUT]{noformat}
> Also, the following ERROR message can happen at the same time:
> {noformat}
> ActiveMQNotConnectedException[errorType=NOT_CONNECTED message=AMQ219010: Connection is destroyed]{noformat}
> Internally, the {{org.apache.activemq.artemis.spi.core.protocol.ConnectionEntry}} is subject to the following race condition:
> # {{ConnectionEntry}} is initilalized with the default {{ActiveMQClient.DEFAULT_CONNECTION_TTL}} (60000) at {{CoreProtocolManager#createConnectionEntry()}}
> # {{RemotingServiceImpl$FailureCheckAndFlushThread}} evaluates {{if (entry.ttl != -1)}} as {{true}}.
> # A {{Ping}} is sent. Then {{ttl}} is updated to {{ActiveMQClient.DEFAULT_CONNECTION_TTL_INVM}} (-1).
> # {{RemotingServiceImpl$FailureCheckAndFlushThread}} checks {{if (now >= entry.lastCheck + entry.ttl)}}. Since {{ttl}} has been updated to {{-1}} the check passes (= expired) and the connection will be added to {{toRemove}}.
> # The WARN and ERROR occur.



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