You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Arshad Mohammad (JIRA)" <ji...@apache.org> on 2015/03/13 08:09:38 UTC

[jira] [Updated] (ZOOKEEPER-2140) NettyServerCnxn and NIOServerCnxn code should be improved

     [ https://issues.apache.org/jira/browse/ZOOKEEPER-2140?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Arshad Mohammad updated ZOOKEEPER-2140:
---------------------------------------
    Description: 
Classes org.apache.zookeeper.server.NIOServerCnxn and org.apache.zookeeper.server.NettyServerCnxn have following need and scope for improvement
1) Duplicate code.
	These two classes have around 250 line duplicate code. All the command code is duplicated
2) Many improvement/bugFix done in one class but not done in other class. These changes should be synced
For example

In NettyServerCnxn
{code}
               // clone should be faster than iteration
                // ie give up the cnxns lock faster
                AbstractSet<ServerCnxn> cnxns;
                synchronized (factory.cnxns) {
                    cnxns = new HashSet<ServerCnxn>(factory.cnxns);
                }
                for (ServerCnxn c : cnxns) {
                    c.dumpConnectionInfo(pw, false);
                    pw.println();
                }
{code}
In NIOServerCnxn
{code}
               for (ServerCnxn c : factory.cnxns) {
                    c.dumpConnectionInfo(pw, false);
                    pw.println();
                }
{code}
3) These classes are bulky unnecessarily. Command classes have altogether different functionality, cmma should go in different classes.
If this done it will be easy to add new command with minimal change to existing classes.


  was:
Classes org.apache.zookeeper.server.NIOServerCnxn and org.apache.zookeeper.server.NettyServerCnxn have following need and scope for improvement
1) Duplicate code.
	These two classes have around 250 line duplicate code. All the command code is duplicated
2) Many improvement/bugFix done in one class but not done in other class. These changes should be synced
For example

In NettyServerCnxn
{code}
               // clone should be faster than iteration
                // ie give up the cnxns lock faster
                AbstractSet<ServerCnxn> cnxns;
                synchronized (factory.cnxns) {
                    cnxns = new HashSet<ServerCnxn>(factory.cnxns);
                }
                for (ServerCnxn c : cnxns) {
                    c.dumpConnectionInfo(pw, false);
                    pw.println();
                }
{code}
In NIOServerCnxn
{code}
               for (ServerCnxn c : factory.cnxns) {
                    c.dumpConnectionInfo(pw, false);
                    pw.println();
                }
{code}
3) These classes are bulky unnecessarily. Command classes have altogether different functionality, these should go in different classes.
If this done it will be easy to add new command with minimal change to existing classes.



> NettyServerCnxn and NIOServerCnxn code should be improved
> ---------------------------------------------------------
>
>                 Key: ZOOKEEPER-2140
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2140
>             Project: ZooKeeper
>          Issue Type: Improvement
>            Reporter: Arshad Mohammad
>             Fix For: 3.6.0
>
>
> Classes org.apache.zookeeper.server.NIOServerCnxn and org.apache.zookeeper.server.NettyServerCnxn have following need and scope for improvement
> 1) Duplicate code.
> 	These two classes have around 250 line duplicate code. All the command code is duplicated
> 2) Many improvement/bugFix done in one class but not done in other class. These changes should be synced
> For example
> In NettyServerCnxn
> {code}
>                // clone should be faster than iteration
>                 // ie give up the cnxns lock faster
>                 AbstractSet<ServerCnxn> cnxns;
>                 synchronized (factory.cnxns) {
>                     cnxns = new HashSet<ServerCnxn>(factory.cnxns);
>                 }
>                 for (ServerCnxn c : cnxns) {
>                     c.dumpConnectionInfo(pw, false);
>                     pw.println();
>                 }
> {code}
> In NIOServerCnxn
> {code}
>                for (ServerCnxn c : factory.cnxns) {
>                     c.dumpConnectionInfo(pw, false);
>                     pw.println();
>                 }
> {code}
> 3) These classes are bulky unnecessarily. Command classes have altogether different functionality, cmma should go in different classes.
> If this done it will be easy to add new command with minimal change to existing classes.



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