code: public LockedInodePath lockDescendant(AlluxioURI descendantUri, LockPattern lockPattern)
        throws InvalidPathException {
      LockedInodePath path = new LockedInodePath(descendantUri, this,
          PathUtils.getPathComponents(descendantUri.getPath()), lockPattern);
      path.traverseOrClose();
      return path;
    }
docs: Locks a descendant of the current path and returns a new locked inode path. The path is
  traversed according to the lock pattern. Closing the new path will have no effect on the
  current path.
  
  On failure, all locks taken by this method will be released.
  
  @param descendantUri the full descendent uri starting from the root
  @param lockPattern the lock pattern to lock in
  @return the new locked path