You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Lorenz Quack (JIRA)" <ji...@apache.org> on 2015/11/10 14:42:11 UTC
[jira] [Commented] (QPID-6819) Schedule socket accepts on the
thread pool
[ https://issues.apache.org/jira/browse/QPID-6819?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14998585#comment-14998585 ]
Lorenz Quack commented on QPID-6819:
------------------------------------
I think there is something wrong here.
Yesterday I had a test failure that seems related to this change:
{noformat}
2015-11-09 23:30:38,623 ERROR [IO-pool-Port-amqp-6] o.a.q.t.u.InternalBrokerHolder Uncaught exception from thread IO-pool-Port-amqp-6
java.lang.NullPointerException: null
at org.apache.qpid.server.transport.SelectorThread$SelectionTask$1.run(SelectorThread.java:191) ~[qpid-broker-core-6.0.0-SNAPSHOT.jar:6.0.0-SNAPSHOT]
at org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:448) ~[qpid-broker-core-6.0.0-SNAPSHOT.jar:6.0.0-SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_60]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_60]
{noformat}
The line numbers are a little off because I had added some debug lines.
The null pointer happened on the line {{transport.acceptSocketChannel(channel);}} (I believe currently that should be line 189 on trunk).
It is hard to see how this could null pointer but I think there is a race with {{unregisterConnection()}}.
In the unlucky case
* {{processSelectionKeys()}} enters {{if(key.isAcceptable())}} on line 166.
* before line 168 is executed {{unregisterConnection()}} calls {{connection.getSocketChannel().register(connection.getSelectionTask().getSelector(), 0);}} (line 480) setting the attachment to {{null}}
* when {{processSelectionKeys()}} continues it will null pointer.
> Schedule socket accepts on the thread pool
> ------------------------------------------
>
> Key: QPID-6819
> URL: https://issues.apache.org/jira/browse/QPID-6819
> Project: Qpid
> Issue Type: Improvement
> Components: Java Broker
> Reporter: Keith Wall
> Fix For: qpid-java-6.0
>
> Attachments: 0001-QPID-6819-Java-Broker-Schedule-socket-accepts-on-the.patch
>
>
> Testing with very large numbers of connections shows that accepting socket connections in the same thread as the selector can be a bottleneck. Change the algorithm to schedule the accept of new socket connections as a task, deregistering {{OP_ACCEPT}} from the selector, whilst the task is in progress.
--
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