You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Skye Wanderman-Milne (JIRA)" <ji...@apache.org> on 2012/12/18 00:30:15 UTC

[jira] [Commented] (ZOOKEEPER-1495) ZK client hangs when using a function not available on the server.

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

Skye Wanderman-Milne commented on ZOOKEEPER-1495:
-------------------------------------------------

This overall looks good to me. I'm not convinced a separate UnimplementedRequestProcessor is necessary since you could just do the work inline in ZooKeeperServer.submitRequest, but it doesn't make a big difference either way.  The chroot business in your test seems unnecessary -- you're not creating a client with a chroot, and the request shouldn't be processed anyway. You're also creating an ExistsRequest and then a SetDataResponse (although the net result is the same). Maybe clean up the test and resubmit?

One thing to note is that if ZOOKEEPER-1599 is fixed, it will still be possible for 3.4 leaders to send multis to 3.3 followers. We can consider a solution for that problem depending on how ZOOKEEPER-1599 is resolved.
                
> ZK client hangs when using a function not available on the server.
> ------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1495
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1495
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.4.2, 3.3.5
>         Environment: all
>            Reporter: nkeywal
>            Assignee: nkeywal
>            Priority: Minor
>         Attachments: 1495.br33.v3.patch
>
>
> This happens for example when using zk#multi with a 3.4 client but a 3.3 server.
> The issue seems to be on the server side: the servers drops the packets with an unknown OpCode in ZooKeeperServer#submitRequest
> {noformat}
> public void submitRequest(Request si) {
>     // snip
>     try {
>         touch(si.cnxn);
>         boolean validpacket = Request.isValid(si.type); // ===> Check on case OpCode.*
>         if (validpacket) {
>             // snip
>         } else {
>             LOG.warn("Dropping packet at server of type " + si.type);
>             // if invalid packet drop the packet.
>         }
>     } catch (MissingSessionException e) {
>         if (LOG.isDebugEnabled()) {
>             LOG.debug("Dropping request: " + e.getMessage());
>         }
>     }
> }
> {noformat}
> The solution discussed in ZOOKEEPER-1381 would be to get an exception on the client side then & close the session.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira