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

lincoln.lee commented on ZOOKEEPER-1105:
----------------------------------------

Diego, I've also encountered java.nio.channels.CancelledKeyException in 
server's log when a python client calls close method, but I found client had 
sent CLOSE_OP request to server but exit before server can read the request 
completely,
 
src/c/src/zookeeper.c
@@ -2522,6 +2522,22 @@
/* make sure the close request is sent; we set timeout to an arbitrary
  * (but reasonable) number of milliseconds since we want the call to block*/
 rc=adaptor_send_queue(zh, 3000); // here actually call send(s, buf, len, 
MSG_NOSIGNAL)

we can simply sleep one second after call send_buffer in flush_send_queue 
method of src/c/src/zookeeper.c
  rc = send_buffer(zh->fd, zh->to_send.head);
+ if (timeout>0)sleep(1);
  if(rc==0 && timeout==0){

or add a little more lines as the ZOOKEEPER-1105.patch attached (against trunk)
                
> c client zookeeper_close not send CLOSE_OP request to server
> ------------------------------------------------------------
>
>                 Key: ZOOKEEPER-1105
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1105
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: c client
>    Affects Versions: 3.3.2
>            Reporter: jiang guangran
>            Assignee: Patrick Hunt
>         Attachments: ZOOKEEPER-1105.patch, zklog.txt, zktest.c, zktest.java
>
>
> in zookeeper_close function,  do adaptor_finish before send CLOSE_OP request 
> to server
> so the CLOSE_OP request can not be sent to server
> in server zookeeper.log have many
> 2011-06-22 00:23:02,323 - WARN  
> [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@634] - 
> EndOfStreamException: Unable to read additional data from client sessionid 
> 0x1305970d66d2224, likely client has closed socket
> 2011-06-22 00:23:02,324 - INFO  
> [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1435] - Closed 
> socket connection for client /10.250.8.123:60257 which had sessionid 
> 0x1305970d66d2224
> 2011-06-22 00:23:02,325 - ERROR [CommitProcessor:1:NIOServerCnxn@445] - 
> Unexpected Exception:
> java.nio.channels.CancelledKeyException
>         at sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:55)
>         at sun.nio.ch.SelectionKeyImpl.interestOps(SelectionKeyImpl.java:59)
>         at 
> org.apache.zookeeper.server.NIOServerCnxn.sendBuffer(NIOServerCnxn.java:418)
>         at 
> org.apache.zookeeper.server.NIOServerCnxn.sendResponse(NIOServerCnxn.java:1509)
>         at 
> org.apache.zookeeper.server.FinalRequestProcessor.processRequest(FinalRequestProcessor.java:367)
>         at 
> org.apache.zookeeper.server.quorum.CommitProcessor.run(CommitProcessor.java:73)
> and java client not have this problem

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to