Huo Zhu created ZOOKEEPER-3221:
----------------------------------

             Summary: WriteLock in recipes may get wrong child name as lock id
                 Key: ZOOKEEPER-3221
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3221
             Project: ZooKeeper
          Issue Type: Bug
          Components: recipes
         Environment: zookeeper-recipes-1.0
            Reporter: Huo Zhu


recently i used WriteLock in my application, and get following Exception
{code:java}
Exception in thread "produce 1" java.lang.IllegalArgumentException: Path must 
start with / character
at org.apache.zookeeper.common.PathUtils.validatePath(PathUtils.java:51)
at org.apache.zookeeper.ZooKeeper.delete(ZooKeeper.java:851)
at org.apache.zookeeper.recipes.lock.WriteLock$1.execute(WriteLock.java:118)
at org.apache.zookeeper.recipes.lock.WriteLock$1.execute(WriteLock.java:1)
at org.apache.zookeeper.recipes.lock.WriteLock.unlock(WriteLock.java:122)
{code}
the following function is called when tried to lock,  used an existed child 
node name as inner lock id, which may be conflict with another lock user, and 
at the same time the lock id is just the node name , no with prefix path,  
causing{color:#FF0000} java.lang.IllegalArgumentException{color} in final 
delete operation. 
{code:java}
private  void findPrefixInChildren(String prefix, ZooKeeper zookeeper, String 
dir) throws KeeperException, InterruptedException {
            List<String> names = zookeeper.getChildren(dir, false);
            for (String name : names) {
                if (name.startsWith(prefix)) {
                    id = name;
                    if (LOG.isDebugEnabled()) {
                        LOG.debug("Found id created last time: " + id);
                    }
                    break;
                }
            }
            if (id == null) {
                id = zookeeper.create(dir + "/" + prefix, data,  getAcl(), 
EPHEMERAL_SEQUENTIAL);
                if (LOG.isDebugEnabled()) {
                    LOG.debug("Created id: " + id);
                }
            }

        }
{code}
 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to