qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF subversion and git services (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QPID-5796) ConnectionRegistry may suffer an ArrayIndexOutOfBounds if closed at the same moment as a messaging connection is closed
Date Tue, 22 Jul 2014 22:32:41 GMT

    [ https://issues.apache.org/jira/browse/QPID-5796?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14071042#comment-14071042
] 

ASF subversion and git services commented on QPID-5796:
-------------------------------------------------------

Commit 1612716 from [~k-wall] in branch 'qpid/trunk'
[ https://svn.apache.org/r1612716 ]

QPID-5796: [Java Broker] Prevent possibility of AOOBE if connection registry is closed at
the same time as closes are received

> 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
>
> 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.
> 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: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message