[
https://issues.apache.org/jira/browse/QPID-5796?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alex Rudyy resolved QPID-5796.
------------------------------
Resolution: Fixed
The changes look good to me
> ConnectionRegistry may suffer an ArrayIndexOutOfBounds if closed at the same
> moment as a messaging connection is closed
> -----------------------------------------------------------------------------------------------------------------------
>
> Key: QPID-5796
> URL: https://issues.apache.org/jira/browse/QPID-5796
> Project: Qpid
> Issue Type: Bug
> Components: Java Broker
> Affects Versions: 0.29
> Reporter: Keith Wall
> Assignee: Alex Rudyy
> Fix For: 0.29
>
>
> If the closure of the ConnectionRegistry races with a incoming connection
> close, there is the possibility of the a AIOOBException within the
> close(replyText) method.
> This issue is longstanding, but could previously only manifest on Broker
> shutdown. With recent work on 0.29, it is now possible for the user to stop
> the virtual host (or virtualhostnode) at runtime, meaning this problem could
> manifest at non-shutdown situations too.
> {code:java}
> public void close(final String replyText)
> {
> synchronized(this)
> {
> for(AMQConnectionModel conn : _registry)
> {
> conn.stop();
> }
> }
> if (_logger.isDebugEnabled())
> {
> _logger.debug("Closing connection registry :" + _registry.size()
> + " connections.");
> }
> while (!_registry.isEmpty())
> {
> # <---- another thread closes a connection
> AMQConnectionModel connection = _registry.get(0); # !#% AIOOB
> closeConnection(connection, AMQConstant.CONNECTION_FORCED,
> replyText);
> }
> }
> {code}
> I forced this issue to occur by opening a large number of messaging
> connections then stopping the virtualhostnode from the Web Management
> Console, whilst the connections were closed from the client. The following
> stack trace results:
> {noformat}
> 2014-07-22 22:15:43,568 WARN [qtp1081024101-26] (rest.RestServlet) - Caught
> exception
> java.lang.ArrayIndexOutOfBoundsException: 0
> at
> java.util.concurrent.CopyOnWriteArrayList.get(CopyOnWriteArrayList.java:368)
> at
> java.util.concurrent.CopyOnWriteArrayList.get(CopyOnWriteArrayList.java:377)
> at
> org.apache.qpid.server.connection.ConnectionRegistry.close(ConnectionRegistry.java:75)
> at
> org.apache.qpid.server.connection.ConnectionRegistry.close(ConnectionRegistry.java:49)
> at
> org.apache.qpid.server.virtualhost.AbstractVirtualHost.onClose(AbstractVirtualHost.java:648)
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.close(AbstractConfiguredObject.java:445)
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$1.performAction(AbstractConfiguredObject.java:418)
> at
> org.apache.qpid.server.model.AbstractConfiguredObject$1.performAction(AbstractConfiguredObject.java:414)
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.applyToChildren(AbstractConfiguredObject.java:586)
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.closeChildren(AbstractConfiguredObject.java:413)
> at
> org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode.stopAndSetStateTo(AbstractVirtualHostNode.java:189)
> at
> org.apache.qpid.server.virtualhostnode.AbstractVirtualHostNode.doStop(AbstractVirtualHostNode.java:184)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.attainState(AbstractConfiguredObject.java:652)
> at
> org.apache.qpid.server.model.AbstractConfiguredObject.attainStateIfResolved(AbstractConfiguredObject.java:632)
> at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]