[ https://issues.apache.org/jira/browse/QPIDJMS-552?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17434866#comment-17434866 ]
ASF GitHub Bot commented on QPIDJMS-552: ---------------------------------------- franz1981 commented on a change in pull request #44: URL: https://github.com/apache/qpid-jms/pull/44#discussion_r737494700 ########## File path: qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java ########## @@ -183,6 +189,44 @@ JmsConnection connect() throws JMSException { return this; } + ExecutorService getCompletionExecutor() { + ThreadPoolExecutor exec = completionExecutor; + if (exec == null) { + synchronized (this) { + exec = completionExecutor; + if (exec == null) { + // it can grow "unbounded" to serve multiple concurrent session completions: + // in reality it is bounded by the amount of concurrent completion requests + exec = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 5, TimeUnit.SECONDS, new LinkedTransferQueue<>(), + new QpidJMSThreadFactory("JmsConnection ["+ connectionInfo.getId() + "] completion dispatcher", connectionInfo.isUseDaemonThread())); Review comment: > Previously they were named based on their individual session. It might be good to at least reinstate that name while operating for a given session? You're right, indeed it was nice to have a good name to find them both on stack trace and while profiling, let me think how to improve this If the user doesn't use anymore JMS 2 features in same connection and close any existing session that use completions, I expect the pool to release any existing completion thread (at some point), but as you rightly said, it's a pretty weird an unhappy use case -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org > JMS 2 Completion threads shouldn't scale with the number of sessions > -------------------------------------------------------------------- > > Key: QPIDJMS-552 > URL: https://issues.apache.org/jira/browse/QPIDJMS-552 > Project: Qpid JMS > Issue Type: Bug > Components: qpid-jms-client > Affects Versions: 1.3.0 > Reporter: Francesco Nigro > Priority: Major > > JMS 2 Completion threads are now tied to be one per JMS Session ie a client > application with N JMS sessions need N completion threads to handle the > completion events. > Given that the asynchronous model of JMS 2 allows users to have few threads > handling many JMS sessions, should be better to reduce the amount of > completion threads without exceeding the number of available cores and > shrink/grow according to the completion event processing load. > If the user confine a connection in a thread handling many JMS sessions and > the completion events are issued by the same Netty thread in sequence, if the > completion processing for a JMS Session is fast enough, next JMS Sessions can > reuse existing completion threads instead of using a new one. > This model save using too many completion threads for users tasks that are > supposed to be very fast: if the user task cause a specific JMS Session > completion thread to block, the expectation is that the system should be able > to create a new completion thread to handle other JMS Session completion > events, as expected. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org