[ https://issues.apache.org/jira/browse/ZOOKEEPER-2623?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17774123#comment-17774123 ]
Andor Molnar commented on ZOOKEEPER-2623: ----------------------------------------- [~tison] [~eolivelli] Shall we backport this to 3.8 and 3.9? > CheckVersion outside of Multi causes NullPointerException > --------------------------------------------------------- > > Key: ZOOKEEPER-2623 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2623 > Project: ZooKeeper > Issue Type: Bug > Reporter: Diego Ongaro > Assignee: Kezhu Wang > Priority: Minor > Labels: pull-request-available > Fix For: 3.10.0 > > Time Spent: 1h > Remaining Estimate: 0h > > I wasn't sure if check version (opcode 13) was permitted outside of a multi > op, so I tried it. My server crashed with a NullPointerException and became > unusable until restarted. I guess it's not allowed, but perhaps the server > should handle this more gracefully? > Here are the server logs: > {noformat} > Accepted socket connection from /0:0:0:0:0:0:0:1:51737 > Session establishment request from client /0:0:0:0:0:0:0:1:51737 client's > lastZxid is 0x0 > Connection request from old client /0:0:0:0:0:0:0:1:51737; will be dropped if > server is in r-o mode > Client attempting to establish new session at /0:0:0:0:0:0:0:1:51737 > :Fsessionid:0x10025651faa0000 type:createSession cxid:0x0 > zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a > Processing request:: sessionid:0x10025651faa0000 type:createSession cxid:0x0 > zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a > Got zxid 0x60000065e expected 0x1 > Creating new log file: log.60000065e > Committing request:: sessionid:0x10025651faa0000 type:createSession cxid:0x0 > zxid:0x60000065e txntype:-10 reqpath:n/a > Processing request:: sessionid:0x10025651faa0000 type:createSession cxid:0x0 > zxid:0x60000065e txntype:-10 reqpath:n/a > :Esessionid:0x10025651faa0000 type:createSession cxid:0x0 zxid:0x60000065e > txntype:-10 reqpath:n/a > sessionid:0x10025651faa0000 type:createSession cxid:0x0 zxid:0x60000065e > txntype:-10 reqpath:n/a > Add a buffer to outgoingBuffers, sk sun.nio.ch.SelectionKeyImpl@28e9f397 is > valid: true > Established session 0x10025651faa0000 with negotiated timeout 20000 for > client /0:0:0:0:0:0:0:1:51737 > :Fsessionid:0x10025651faa0000 type:check cxid:0x1 zxid:0xfffffffffffffffe > txntype:unknown reqpath:/ > Processing request:: sessionid:0x10025651faa0000 type:check cxid:0x1 > zxid:0xfffffffffffffffe txntype:unknown reqpath:/ > Processing request:: sessionid:0x10025651faa0000 type:check cxid:0x1 > zxid:0xfffffffffffffffe txntype:unknown reqpath:/ > Exception causing close of session 0x10025651faa0000: Connection reset by peer > :Esessionid:0x10025651faa0000 type:check cxid:0x1 zxid:0xfffffffffffffffe > txntype:unknown reqpath:/ > IOException stack trace > java.io.IOException: Connection reset by peer > at sun.nio.ch.FileDispatcherImpl.read0(Native Method) > at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) > at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) > at sun.nio.ch.IOUtil.read(IOUtil.java:197) > at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) > at > org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:320) > at > org.apache.zookeeper.server.NIOServerCnxnFactory$IOWorkRequest.doWork(NIOServerCnxnFactory.java:530) > at > org.apache.zookeeper.server.WorkerService$ScheduledWorkRequest.run(WorkerService.java:162) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > Unexpected exception > java.lang.NullPointerException > at > org.apache.zookeeper.server.ZKDatabase.addCommittedProposal(ZKDatabase.java:252) > at > org.apache.zookeeper.server.FinalRequestProcessor.processRequest(FinalRequestProcessor.java:127) > at > org.apache.zookeeper.server.quorum.CommitProcessor$CommitWorkRequest.doWork(CommitProcessor.java:362) > at > org.apache.zookeeper.server.WorkerService$ScheduledWorkRequest.run(WorkerService.java:162) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > Committing request:: sessionid:0x10025651faa0000 type:error cxid:0x1 > zxid:0x60000065f txntype:-1 reqpath:n/a > Unregister MBean > [org.apache.ZooKeeperService:name0=ReplicatedServer_id1,name1=replica.1,name2=Follower,name3=Connections,name4="0:0:0:0:0:0:0:1",name5=0x10025651faa0000] > Exception thrown by downstream processor, unable to continue. > CommitProcessor exited loop! > Closed socket connection for client /0:0:0:0:0:0:0:1:51737 which had > sessionid 0x10025651faa0000 > {noformat} > And here's a one-liner to repro, which does a ConnectRequest followed by a > {{CheckVersion(path="/", version=89235}}}: > {noformat} > echo > AAAALAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAEAAAANAAAAAS8AAVyT > | base64 --decode | nc localhost 2181 >/dev/null > {noformat} > This is against master as of a couple of weeks ago (f78061a). I haven't > checked to see which versions are affected. -- This message was sent by Atlassian Jira (v8.20.10#820010)