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

Hongchao Deng commented on ZOOKEEPER-2213:
------------------------------------------

There is one more thing I'm not sure.

I thought SetData should return a NoNodeException but it didn't. That's because 
datatree treats empty string also as the root "/".

https://github.com/apache/zookeeper/blob/71401b4842b0486716f96d9ea3060d4fba65be96/src/java/main/org/apache/zookeeper/server/DataTree.java#L292

There is inconsistent assumption because path checking thinks that empty string 
is invalid..

Anyway, I agree with Raul that to fix this we only need to add validatePath() 
for SetData and SetACL. It's more stable to add the checking.



> Empty path in Set crashes server and prevents restart
> -----------------------------------------------------
>
>                 Key: ZOOKEEPER-2213
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2213
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.4.5
>            Reporter: Brian Brazil
>            Priority: Blocker
>
> See https://github.com/samuel/go-zookeeper/issues/62
> I've reproduced this on 3.4.5 with the code:
>         c, _, _ := zk.Connect([]string{"127.0.0.1"}, time.Second)
>         c.Set("", []byte{}, 0)
> This crashes a local zookeeper 3.4.5 server:
> 2015-06-10 16:21:10,862 [myid:] - ERROR 
> [SyncThread:0:SyncRequestProcessor@151] - Severe unrecoverable error, exiting 
>  
> java.lang.IllegalArgumentException: Invalid path
>         at 
> org.apache.zookeeper.common.PathTrie.findMaxPrefix(PathTrie.java:259)
>         at 
> org.apache.zookeeper.server.DataTree.getMaxPrefixWithQuota(DataTree.java:634)
>         at org.apache.zookeeper.server.DataTree.setData(DataTree.java:616)
>         at org.apache.zookeeper.server.DataTree.processTxn(DataTree.java:807)
>         at 
> org.apache.zookeeper.server.ZKDatabase.processTxn(ZKDatabase.java:329)
>         at 
> org.apache.zookeeper.server.ZooKeeperServer.processTxn(ZooKeeperServer.java:965)
>         at 
> org.apache.zookeeper.server.FinalRequestProcessor.processRequest(FinalRequestProcessor.java:116)
>         at 
> org.apache.zookeeper.server.SyncRequestProcessor.flush(SyncRequestProcessor.java:167)
>         at 
> org.apache.zookeeper.server.SyncRequestProcessor.run(SyncRequestProcessor.java:101)
> On restart the zookeeper server crashes out:
> 2015-06-10 16:22:21,352 [myid:] - ERROR [main:ZooKeeperServerMain@54] - 
> Invalid arguments, exiting abnormally
> java.lang.IllegalArgumentException: Invalid path
>         at 
> org.apache.zookeeper.common.PathTrie.findMaxPrefix(PathTrie.java:259)
>         at 
> org.apache.zookeeper.server.DataTree.getMaxPrefixWithQuota(DataTree.java:634)
>         at org.apache.zookeeper.server.DataTree.setData(DataTree.java:616)
>         at org.apache.zookeeper.server.DataTree.processTxn(DataTree.java:807)
>         at 
> org.apache.zookeeper.server.persistence.FileTxnSnapLog.processTransaction(FileTxnSnapLog.java:198)
>         at 
> org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:151)
>         at 
> org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:223)
>         at 
> org.apache.zookeeper.server.ZooKeeperServer.loadData(ZooKeeperServer.java:250)
>         at 
> org.apache.zookeeper.server.ZooKeeperServer.startdata(ZooKeeperServer.java:377)
>         at 
> org.apache.zookeeper.server.NIOServerCnxnFactory.startup(NIOServerCnxnFactory.java:122)
>         at 
> org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:112)
>         at 
> org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:86)
>         at 
> org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:52)
>         at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:116)
>         at 
> org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)



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

Reply via email to