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

ASF GitHub Bot commented on ZOOKEEPER-1669:
-------------------------------------------

Github user CheneySun commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/312#discussion_r128729244
  
    --- Diff: 
src/java/main/org/apache/zookeeper/server/NIOServerCnxnFactory.java ---
    @@ -275,20 +307,9 @@ public synchronized void closeSession(long sessionId) {
     
         @SuppressWarnings("unchecked")
         private void closeSessionWithoutWakeup(long sessionId) {
    -        HashSet<NIOServerCnxn> cnxns;
    -        synchronized (this.cnxns) {
    -            cnxns = (HashSet<NIOServerCnxn>)this.cnxns.clone();
    -        }
    -
    -        for (NIOServerCnxn cnxn : cnxns) {
    -            if (cnxn.getSessionId() == sessionId) {
    -                try {
    -                    cnxn.close();
    -                } catch (Exception e) {
    -                    LOG.warn("exception during session close", e);
    -                }
    -                break;
    -            }
    +        NIOServerCnxn cnxn = sessionMap.remove(sessionId);
    +        if (cnxn != null) {
    +            cnxn.close();
    --- End diff --
    
    @eribeiro good catch, I will fix it.


> Operations to server will be timed-out while thousands of sessions expired 
> same time
> ------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1669
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1669
>             Project: ZooKeeper
>          Issue Type: Improvement
>          Components: server
>    Affects Versions: 3.3.5
>            Reporter: tokoot
>            Assignee: Cheney Sun
>              Labels: performance
>
> If there are thousands of clients, and most of them disconnect with server 
> same time(client restarted or servers partitioned with clients), the server 
> will busy to close those "connections" and become unavailable. The problem is 
> in following:
>   private void closeSessionWithoutWakeup(long sessionId) {
>       HashSet<NIOServerCnxn> cnxns;
>           synchronized (this.cnxns) {
>               cnxns = (HashSet<NIOServerCnxn>)this.cnxns.clone();  // other 
> thread will block because of here
>           }
>       ...
>   }



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

Reply via email to