You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Keith Wall (JIRA)" <ji...@apache.org> on 2016/07/04 21:44:11 UTC

[jira] [Commented] (QPID-7261) [Java Broker] Deletion of virtual host node does not close active connections

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

Keith Wall commented on QPID-7261:
----------------------------------

I can't reproduce this problem on trunk and the future wiring looks good to me.  Deleting a VHN organises for the virtualhost to be deleted ({{AVHN#deleteVirtualHostIfExists}}).  Deleting the VH first closes the connections and disassociates them from the VH.   The delete of VH should not be able to complete until all connections are closed and disassociated.  Furthermore, the association of a new connection takes place in the same thread as the close/disassociation, so there should be no way a new connection can get registered at an inopportune moment during the virtualhost delete and somehow get forgotten.

I played around trying to force a failure by opening connections in a loop whilst deleting the VHN without success.

> [Java Broker] Deletion of virtual host node does not close active connections
> -----------------------------------------------------------------------------
>
>                 Key: QPID-7261
>                 URL: https://issues.apache.org/jira/browse/QPID-7261
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: qpid-java-6.0, qpid-java-6.1
>            Reporter: Alex Rudyy
>             Fix For: qpid-java-6.1
>
>
> Deletion of virtual host node does not close active connections on virtual host. If not closed connection is attempted to be closed from client side Broker crashes with exception like the one below:
> {noformat}
> ########################################################################
> #
> # Unhandled Exception java.lang.IllegalStateException: Task executor VirtualHostNode-test-Config is not in ACTIVE state in Thread IO-/127.0.0.1:52792
> #
> # Exiting
> #
> ########################################################################
> java.lang.IllegalStateException: Task executor VirtualHostNode-test-Config is not in ACTIVE state
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.checkState(TaskExecutorImpl.java:225)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.submitWrappedTask(TaskExecutorImpl.java:147)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.submit(TaskExecutorImpl.java:142)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject.doOnConfigThread(AbstractConfiguredObject.java:554)
> 	at org.apache.qpid.server.virtualhost.AbstractVirtualHost.deregisterConnectionAsync(AbstractVirtualHost.java:1808)
> 	at org.apache.qpid.server.virtualhost.AbstractVirtualHost.deregisterConnection(AbstractVirtualHost.java:1803)
> 	at org.apache.qpid.server.protocol.v0_8.AMQPConnection_0_8.closed(AMQPConnection_0_8.java:716)
> 	at org.apache.qpid.server.transport.MultiVersionProtocolEngine.closed(MultiVersionProtocolEngine.java:114)
> 	at org.apache.qpid.server.transport.NonBlockingConnection.shutdown(NonBlockingConnection.java:405)
> 	at org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:328)
> 	at org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:124)
> 	at org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:504)
> 	at org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:337)
> 	at org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:87)
> 	at org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:462)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at java.lang.Thread.run(Thread.java:745)
> {noformat}
> {noformat}
> ########################################################################
> #
> # Unhandled Exception java.lang.IllegalStateException: Task executor VirtualHostNode-test-Config is not in ACTIVE state in Thread IO-/127.0.0.1:54390
> #
> # Exiting
> #
> ########################################################################
> java.lang.IllegalStateException: Task executor VirtualHostNode-test-Config is not in ACTIVE state
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.checkState(TaskExecutorImpl.java:225)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.submitWrappedTask(TaskExecutorImpl.java:147)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.submit(TaskExecutorImpl.java:142)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject.doOnConfigThread(AbstractConfiguredObject.java:554)
> 	at org.apache.qpid.server.virtualhost.AbstractVirtualHost.deregisterConnectionAsync(AbstractVirtualHost.java:1808)
> 	at org.apache.qpid.server.virtualhost.AbstractVirtualHost.deregisterConnection(AbstractVirtualHost.java:1803)
> 	at org.apache.qpid.server.protocol.v0_8.AMQPConnection_0_8.closed(AMQPConnection_0_8.java:716)
> 	at org.apache.qpid.server.transport.MultiVersionProtocolEngine.closed(MultiVersionProtocolEngine.java:114)
> 	at org.apache.qpid.server.transport.NonBlockingConnection.shutdown(NonBlockingConnection.java:405)
> 	at org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:328)
> 	at org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:124)
> 	at org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:504)
> 	at org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:337)
> 	at org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:87)
> 	at org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:462)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at java.lang.Thread.run(Thread.java:745)
> May 12, 2016 5:42:10 PM com.google.common.util.concurrent.ExecutionList executeListener
> SEVERE: RuntimeException while executing runnable com.google.common.util.concurrent.Futures$6@2753af0 with executor org.apache.qpid.server.configuration.updater.TaskExecutorImpl@4af6535b
> java.lang.NullPointerException
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor.execute(TaskExecutorImpl.java:427)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.execute(TaskExecutorImpl.java:172)
> 	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> 	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
> 	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)
> 	at com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.run(Futures.java:918)
> 	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)
> 	at com.google.common.util.concurrent.Futures$ImmediateFuture.addListener(Futures.java:106)
> 	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:914)
> 	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)
> 	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> 	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
> 	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)
> 	at com.google.common.util.concurrent.Futures$CombinedFuture.setOneValue(Futures.java:1764)
> 	at com.google.common.util.concurrent.Futures$CombinedFuture.access$400(Futures.java:1608)
> 	at com.google.common.util.concurrent.Futures$CombinedFuture$2.run(Futures.java:1686)
> 	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)
> 	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> 	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
> 	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)
> 	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject$2$1.onSuccess(AbstractConfiguredObject.java:567)
> 	at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
> 	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)
> 	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> 	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
> 	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject$ChainedSettableFuture.set(AbstractConfiguredObject.java:2202)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject$18.onSuccess(AbstractConfiguredObject.java:2160)
> 	at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor.execute(TaskExecutorImpl.java:422)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.execute(TaskExecutorImpl.java:172)
> 	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> 	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
> 	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject$ChainedSettableFuture.set(AbstractConfiguredObject.java:2202)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject$19$1.onSuccess(AbstractConfiguredObject.java:2257)
> 	at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor.execute(TaskExecutorImpl.java:422)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.execute(TaskExecutorImpl.java:172)
> 	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> 	at com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:101)
> 	at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:170)
> 	at com.google.common.util.concurrent.Futures.addCallback(Futures.java:1322)
> 	at org.apache.qpid.server.model.AbstractConfiguredObject$19.onSuccess(AbstractConfiguredObject.java:2252)
> 	at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor.execute(TaskExecutorImpl.java:422)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.execute(TaskExecutorImpl.java:172)
> 	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
> 	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
> 	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)
> 	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)
> 	at org.apache.qpid.server.transport.AbstractAMQPConnection$1.run(AbstractAMQPConnection.java:155)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor$1$1.run(TaskExecutorImpl.java:437)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor$1$1.run(TaskExecutorImpl.java:433)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at javax.security.auth.Subject.doAs(Subject.java:360)
> 	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl$ImmediateIfSameThreadExecutor$1.run(TaskExecutorImpl.java:432)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org