Race condition cleaning connection using VMTransport
----------------------------------------------------
Key: AMQ-2049
URL: https://issues.apache.org/activemq/browse/AMQ-2049
Project: ActiveMQ
Issue Type: Bug
Components: Transport
Affects Versions: 5.3.0
Reporter: David Jencks
Assignee: David Jencks
Fix For: 5.3.0
This problem arises when the server side has a RegionBroker installed and there
is a configured clientID for the connection.
ActiveMQConnection.ensureConnectionInfoSent sends the ConnectionInfo object
with the configured clientID off to the server. Currently this results in the
same ConnectionInfo object in the AMQConnection and the TransportConnection.
Now when you get to AMQConnection.cleanup() it asynchronously sends a message
to the broker to clean up and immediately sets the configured clientID to null.
When the RegionBroker processes the remove message the clientID is no longer
set (assuming bad luck in thread scheduling) and it complains:
public void removeConnection(ConnectionContext context, ConnectionInfo
info, Throwable error) throws Exception {
String clientId = info.getClientId();
if (clientId == null) {
throw new InvalidClientIDException("No clientID specified for
connection disconnect request");
}
One fix for this is to copy the connectionInfo before sending it to the broker.
This is a small but unnecessary cost for non-vm transports but works.
Another fix might be to send the close message synchronously so it's processed
before the clientID is nulled out.
I'm committing the "copy" solution but IMO this should be reviewed by experts.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.