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

ASF GitHub Bot commented on GEODE-3416:
---------------------------------------

Github user pivotal-amurmann commented on a diff in the pull request:

    https://github.com/apache/geode/pull/702#discussion_r133252327
  
    --- Diff: 
geode-core/src/main/java/org/apache/geode/internal/net/SocketCloser.java ---
    @@ -96,46 +99,56 @@ public int getMaxThreads() {
         return this.asyncClosePoolMaxThreads;
       }
     
    -  private ThreadPoolExecutor getAsyncThreadExecutor(String address) {
    -    synchronized (asyncCloseExecutors) {
    -      ThreadPoolExecutor pool = asyncCloseExecutors.get(address);
    -      if (pool == null) {
    -        final ThreadGroup tg = 
LoggingThreadGroup.createThreadGroup("Socket asyncClose", logger);
    -        ThreadFactory tf = new ThreadFactory() {
    -          public Thread newThread(final Runnable command) {
    -            Thread thread = new Thread(tg, command);
    -            thread.setDaemon(true);
    -            return thread;
    -          }
    -        };
    -        BlockingQueue<Runnable> workQueue = new 
LinkedBlockingQueue<Runnable>();
    -        pool = new ThreadPoolExecutor(this.asyncClosePoolMaxThreads, 
this.asyncClosePoolMaxThreads,
    -            this.asyncClosePoolKeepAliveSeconds, TimeUnit.SECONDS, 
workQueue, tf);
    -        pool.allowCoreThreadTimeOut(true);
    -        asyncCloseExecutors.put(address, pool);
    +  private ExecutorService getAsyncThreadExecutor(String address) {
    +    ExecutorService executorService = asyncCloseExecutors.get(address);
    +    if (executorService == null) {
    +      // To be used for pre-1.8 jdk releases.
    +      // createThreadPool();
    +
    +      executorService = 
Executors.newWorkStealingPool(asyncClosePoolMaxThreads);
    +
    +      ExecutorService previousThreadPoolExecutor =
    +          asyncCloseExecutors.putIfAbsent(address, executorService);
    +
    +      if (previousThreadPoolExecutor != null) {
    +        executorService.shutdownNow();
    +        return previousThreadPoolExecutor;
           }
    -      return pool;
         }
    +    return executorService;
    +  }
    +
    +  /**
    +   * @deprecated this method is to be used for pre 1.8 jdk.
    --- End diff --
    
    I always appreciate it as a consumer if deprecations contain information 
about what the new solution is for the problem that the deprecated code was 
solving.


> Reduce blocking for SocketCloser.asyncClose 
> --------------------------------------------
>
>                 Key: GEODE-3416
>                 URL: https://issues.apache.org/jira/browse/GEODE-3416
>             Project: Geode
>          Issue Type: Bug
>          Components: client/server
>    Affects Versions: 1.1.0, 1.1.1, 1.2.0, 1.2.1
>            Reporter: Udo Kohlmeyer
>            Assignee: Udo Kohlmeyer
>             Fix For: 1.3.0
>
>
> In the SocketCloser.asyncClose method, there is a synchronization block 
> around at HashMap. This synchronization will cause an effective 
> single-threaded processing capability when closing sockets. this effect 
> becomes more evident with a high number of clients.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to