[
https://issues.apache.org/jira/browse/ZOOKEEPER-2549?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15636811#comment-15636811
]
Raul Gutierrez Segales commented on ZOOKEEPER-2549:
---------------------------------------------------
[~yufeldman]: a few things:
In:
{code}
} catch(Exception e) {
LOG.warn("Unexpected exception. Destruction averted.", e);
+ throw new IOException(e);
}
}
{code}
can you remove the LOG.warn()? I don't think it's relevant anymore, given it
will be handled by the caller.
Nit in:
{code}
+ if ( serverCnxnClassName != null ) {
{code}
extra spaces around the condition.
Ditto for:
{code}
+ if ( serverCnxnClassCtr != null ) {
{code}
Looks like you are doing extra work (allocations) here:
{code}
+ NIOServerCnxn cnxn = new NIOServerCnxn(zkServer, sock, sk, this,
selectorThread);
+
+ if ( serverCnxnClassCtr != null ) {
+ try {
+ cnxn = serverCnxnClassCtr.newInstance(zkServer, sock, sk,
this, selectorThread);
+ } catch (InstantiationException e1) {
+ LOG.debug("Can not instantiate class for " +
serverCnxnClassCtr.getName() + ". Using NIOServerCnxn");
+ } catch (IllegalAccessException e1) {
+ LOG.debug("IllegalAccessException for " +
serverCnxnClassCtr.getName() + ". Using NIOServerCnxn");
+ } catch (InvocationTargetException e1) {
+ LOG.debug("InvocationTargetException for " +
serverCnxnClassCtr.getName() + ". Using NIOServerCnxn");
+ } catch (Throwable t) {
+ LOG.debug("Unknown Exception while dealing with: {} . Using
NIOServerCnxn", serverCnxnClassCtr.getName());
+ }
+ }
{code}
Sounds like we should try this first (if possible):
{code}
cnxn = serverCnxnClassCtr.newInstance(zkServer, sock, sk, this,
selectorThread);
{code}
And only fallback to this:
{code}
cnxn = new NIOServerCnxn(zkServer, sock, sk, this, selectorThread);
{code}
if that failed.
In:
{code}
+ } catch (Exception e) {
+ LOG.warn("Unexpected exception. Converting to IOException.", e);
+ throw new IOException(e);
}
{code}
I'd drop the warning, it's common enough...
Extra whitespaces:
{code}
+ if ( stats != null ) {
+ int length = stats.getDataLength();
+ }
{code}
Other than that, I think it's looking good. Thanks [~yufeldman]!
> As NettyServerCnxn.sendResponse() allows all the exception to bubble up it
> can stop main ZK requests processing thread
> ----------------------------------------------------------------------------------------------------------------------
>
> Key: ZOOKEEPER-2549
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2549
> Project: ZooKeeper
> Issue Type: Bug
> Components: server
> Affects Versions: 3.5.1
> Reporter: Yuliya Feldman
> Assignee: Yuliya Feldman
> Attachments: ZOOKEEPER-2549-2.patch, ZOOKEEPER-2549.patch,
> ZOOKEEPER-2549.patch, zookeeper-2549-1.patch
>
>
> As NettyServerCnxn.sendResponse() allows all the exception to bubble up it
> can stop main ZK requests processing thread and make Zookeeper server look
> like it is hanging, while it just can not process any request anymore.
> Idea is to catch all the exceptions in NettyServerCnxn.sendResponse() ,
> convert them to IOException and allow it propagating up
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)