Author: shv Date: Wed Jan 16 19:45:28 2008 New Revision: 612699 URL: http://svn.apache.org/viewvc?rev=612699&view=rev Log: HADOOP-1742. Improve JavaDoc documentation for HDFS classes. Contributed by Konstantin Shvachko.
Modified: lucene/hadoop/trunk/CHANGES.txt lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java Modified: lucene/hadoop/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?rev=612699&r1=612698&r2=612699&view=diff ============================================================================== --- lucene/hadoop/trunk/CHANGES.txt (original) +++ lucene/hadoop/trunk/CHANGES.txt Wed Jan 16 19:45:28 2008 @@ -251,6 +251,9 @@ HADOOP-1989. Remove 'datanodecluster' command from bin/hadoop. (Sanjay Radia via shv) + HADOOP-1742. Improve JavaDoc documentation for ClientProtocol, DFSClient, + and FSNamesystem. (Konstantin Shvachko) + OPTIMIZATIONS HADOOP-1898. Release the lock protecting the last time of the last stack Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java?rev=612699&r1=612698&r2=612699&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java Wed Jan 16 19:45:28 2008 @@ -23,7 +23,8 @@ import org.apache.hadoop.fs.permission.*; /********************************************************************** - * ClientProtocol is used by a piece of DFS user code to communicate + * ClientProtocol is used by user code via + * [EMAIL PROTECTED] DistributedFileSystem} class to communicate * with the NameNode. User code can manipulate the directory namespace, * as well as open/close file streams, etc. * @@ -32,13 +33,8 @@ /** * Compared to the previous version the following changes have been introduced: - * 16 : removed deprecated obtainLock() and releaseLock(). - * 17 : getBlockSize replaced by getPreferredBlockSize - * 18 : datanodereport returns dead, live or all nodes. - * 19 : rollEditLog() returns a token to uniquely identify the editfile. - * 20 : getContentLength returns the total size in bytes of a directory subtree - * 21 : add lease holder as a parameter in abandonBlock(...) - * 22 : Serialization of FileStatus has changed. + * (Only the latest change is reflected. + * The log of historical changes can be retrieved from the svn). * 23 : added setOwner(...) and setPermission(...); changed create(...) and mkdir(...) */ public static final long versionID = 23L; @@ -47,12 +43,14 @@ // File contents /////////////////////////////////////// /** - * Open an existing file and get block locations within the specified range. + * Open an existing file for read and get block locations within + * the specified range. + * <p> * Return [EMAIL PROTECTED] LocatedBlocks} which contains * file length, blocks and their locations. * DataNode locations for each block are sorted by * the distance to the client's address. - * + * <p> * The client will then have to contact * one of the indicated DataNodes to obtain the actual data. There * is no need to call close() or any other function after @@ -86,24 +84,33 @@ long length) throws IOException; /** - * Create a new file. Get back block and datanode info, - * which describes where the first block should be written. - * - * Successfully calling this method prevents any other - * client from creating a file under the given name, but - * the caller must invoke complete() for the file to be - * added to the filesystem. - * + * Create a new file entry in the namespace. + * <p> + * This will create an empty file specified by the source path. + * The path should reflect a full path originated at the root. + * The name-node does not have a notion of "current" directory for a client. + * <p> + * Once created, the file is visible and available for read to other clients. + * Although, other clients cannot [EMAIL PROTECTED] #delete(String)}, re-create or + * [EMAIL PROTECTED] #rename(String, String)} it until the file is completed or + * abandoned implicitely by [EMAIL PROTECTED] #abandonFileInProgress(String, String)} + * or explicitely as a result of lease expiration. + * <p> * Blocks have a maximum size. Clients that intend to - * create multi-block files must also use reportWrittenBlock() - * and addBlock(). - * - * If permission denied, - * an [EMAIL PROTECTED] AccessControlException} will be thrown as an - * [EMAIL PROTECTED] org.apache.hadoop.ipc.RemoteException}. + * create multi-block files must also use [EMAIL PROTECTED] #addBlock(String, String)}. * - * @param src The path of the directory being created - * @param masked The masked permission + * @param src path of the file being created. + * @param masked masked permission. + * @param clientName name of the current client. + * @param overwrite indicates whether the file should be + * overwritten if it already exists. + * @param replication block replication factor. + * @param blockSize maximum block size. + * + * @throws AccessControlException if permission to create file is + * denied by the system. As usually on the client side the exception will + * be wrapped into [EMAIL PROTECTED] org.apache.hadoop.ipc.RemoteException}. + * @throws IOException if other errors occur. */ public void create(String src, FsPermission masked, @@ -115,7 +122,7 @@ /** * Set replication for an existing file. - * + * <p> * The NameNode sets replication to the new value and returns. * The actual block replication is not expected to be performed during * this method call. The blocks will be populated or removed in the @@ -148,11 +155,10 @@ ) throws IOException; /** - * If the client has not yet called reportWrittenBlock(), it can - * give up on it by calling abandonBlock(). The client can then + * The client can give up on a blcok by calling abandonBlock(). + * The client can then * either obtain a new block, or complete or abandon the file. - * - * Any partial writes to the block will be garbage-collected. + * Any partial writes to the block will be discarded. */ public void abandonBlock(Block b, String src, String holder ) throws IOException; @@ -162,11 +168,10 @@ * indicated filename (which must currently be open for writing) * should call addBlock(). * - * addBlock() returns block and datanode info, just like the initial - * call to create(). - * - * A null response means the NameNode could not allocate a block, - * and that the caller should try again. + * addBlock() allocates a new block and datanodes the block data + * should be replicated to. + * + * @return LocatedBlock allocated block information. */ public LocatedBlock addBlock(String src, String clientName) throws IOException; @@ -174,7 +179,7 @@ * A client that wants to abandon writing to the current file * should call abandonFileInProgress(). After this call, any * client can call create() to obtain the filename. - * + * <p> * Any blocks that have been written for the file will be * garbage-collected. * @param src The filename @@ -208,17 +213,29 @@ // Namespace management /////////////////////////////////////// /** - * Rename an item in the fs namespace + * Rename an item in the file system namespace. + * + * @param src existing file or directory name. + * @param dst new name. + * @return true if successful, or false if the old name does not exist + * or if the new name already belongs to the namespace. + * @throws IOException if the new name is invalid. */ public boolean rename(String src, String dst) throws IOException; /** - * Remove the given filename from the filesystem + * Delete the given file or directory from the file system. + * <p> + * Any blocks belonging to the deleted files will be garbage-collected. + * + * @param src existing name. + * @return true only if the existing file or directory was actually removed + * from the file system. */ public boolean delete(String src) throws IOException; /** - * Check whether the given file exists + * Check whether the given file exists. */ public boolean exists(String src) throws IOException; @@ -231,13 +248,12 @@ * Create a directory (or hierarchy of directories) with the given * name and permission. * - * If permission denied, - * an [EMAIL PROTECTED] AccessControlException} will be thrown as an - * [EMAIL PROTECTED] org.apache.hadoop.ipc.RemoteException}. - * * @param src The path of the directory being created * @param masked The masked permission of the directory being created * @return True if the operation success. + * @throws [EMAIL PROTECTED] AccessControlException} if permission to create file is + * denied by the system. As usually on the client side the exception will + * be wraped into [EMAIL PROTECTED] org.apache.hadoop.ipc.RemoteException}. */ public boolean mkdirs(String src, FsPermission masked) throws IOException; @@ -258,7 +274,7 @@ * Clearly, it would be bad if a client held a bunch of locks * that it never gave up. This can happen easily if the client * dies unexpectedly. - * + * <p> * So, the NameNode will revoke the locks and live file-creates * for clients that it thinks have died. A client tells the * NameNode that it is still alive by periodically calling @@ -270,11 +286,12 @@ /** * Get a set of statistics about the filesystem. - * Right now, only two values are returned. - * [0] contains the total storage capacity of the system, - * in bytes. - * [1] contains the total used space of the system, in bytes. - * [2] contains the available storage of the system, in bytes. + * Right now, only three values are returned. + * <ul> + * <li> [0] contains the total storage capacity of the system, in bytes.</li> + * <li> [1] contains the total used space of the system, in bytes.</li> + * <li> [2] contains the available storage of the system, in bytes.</li> + * </ul> */ public long[] getStats() throws IOException; @@ -405,14 +422,16 @@ */ public void metaSave(String filename) throws IOException; - /* Get the file info for a specific file or directory. + /** + * Get the file info for a specific file or directory. * @param src The string representation of the path to the file * @throws IOException if file does not exist * @return object containing information regarding the file */ public DFSFileInfo getFileInfo(String src) throws IOException; - /* Get the total size of all files and directories rooted at + /** + * Get the total size of all files and directories rooted at * the specified directory. * @param src The string representation of the path * @return size of directory subtree in bytes Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java?rev=612699&r1=612698&r2=612699&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java Wed Jan 16 19:45:28 2008 @@ -337,7 +337,7 @@ * Call * [EMAIL PROTECTED] #create(String,FsPermission,boolean,short,long,Progressable,int)} * with default permission. - * @see FsPermission#getDefault(Configuration) + * @see FsPermission#getDefault() */ public OutputStream create(String src, boolean overwrite, @@ -361,7 +361,7 @@ * @param replication block replication * @return output stream * @throws IOException - * @see [EMAIL PROTECTED] ClientProtocol#create(String, FsPermission, String, boolean, short, long)} + * @see ClientProtocol#create(String, FsPermission, String, boolean, short, long) */ public OutputStream create(String src, FsPermission permission, @@ -399,8 +399,8 @@ } /** - * Make a direct connection to namenode and manipulate structures - * there. + * Rename file or directory. + * See [EMAIL PROTECTED] ClientProtocol#rename(String, String)}. */ public boolean rename(String src, String dst) throws IOException { checkOpen(); @@ -408,8 +408,8 @@ } /** - * Make a direct connection to namenode and manipulate structures - * there. + * Delete file or directory. + * See [EMAIL PROTECTED] ClientProtocol#delete(String)}. */ public boolean delete(String src) throws IOException { checkOpen(); @@ -528,7 +528,7 @@ * @param permission The permission of the directory being created. * If permission == null, use [EMAIL PROTECTED] FsPermission#getDefault()}. * @return True if the operation success. - * @see [EMAIL PROTECTED] ClientProtocol#mkdirs(String, FsPermission)} + * @see ClientProtocol#mkdirs(String, FsPermission) */ public boolean mkdirs(String src, FsPermission permission)throws IOException{ checkOpen(); @@ -1461,7 +1461,7 @@ private Progressable progress; /** * Create a new output stream to the given DataNode. - * @see [EMAIL PROTECTED] ClientProtocol#create(String, FsPermission, String, boolean, short, long)} + * @see ClientProtocol#create(String, FsPermission, String, boolean, short, long) */ public DFSOutputStream(String src, FsPermission masked, boolean overwrite, Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java?rev=612699&r1=612698&r2=612699&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java Wed Jan 16 19:45:28 2008 @@ -373,7 +373,8 @@ getDistributedUpgradeVersion()); } - /** Close down this filesystem manager. + /** + * Close down this file system manager. * Causes heartbeat and lease daemons to stop; waits briefly for * them to finish, but a short timeout returns control back to caller. */ @@ -645,7 +646,8 @@ results.toArray(new BlockWithLocations[results.size()])); } - /* Get all valid locations of the block & add the block to results + /** + * Get all valid locations of the block & add the block to results * return the length of the added block; 0 if the block is not added */ private long addBlock(Block block, List<BlockWithLocations> results) { @@ -879,6 +881,14 @@ text + " is less than the required minimum " + minReplication); } + /** + * Create a new file entry in the namespace. + * + * @see ClientProtocol#create(String, FsPermission, String, boolean, short, long) + * + * @throws IOException if file name is invalid + * [EMAIL PROTECTED] FSDirectory#isValidToCreate(String)}. + */ void startFile(String src, PermissionStatus permissions, String holder, String clientMachine, boolean overwrite, short replication, long blockSize @@ -888,17 +898,6 @@ getEditLog().logSync(); } - /** - * The client would like to create a new block for the indicated - * filename. Return an array that consists of the block, plus a set - * of machines. The first on this list should be where the client - * writes data. Subsequent items in the list must be provided in - * the connection to the first datanode. - * Return an array that consists of the block, plus a set - * of machines - * @throws IOException if the filename is invalid - * [EMAIL PROTECTED] FSDirectory#isValidToCreate(String)}. - */ private synchronized void startFileInternal(String src, PermissionStatus permissions, String holder, @@ -2974,7 +2973,7 @@ } } - /* + /** * Counts the number of nodes in the given list into active and * decommissioned counters. */ @@ -2993,13 +2992,17 @@ return new NumberReplicas(live, count); } - /** return the number of nodes that are live and decommissioned. */ + /** + * Return the number of nodes that are live and decommissioned. + */ private NumberReplicas countNodes(Block b) { return countNodes(blocksMap.nodeIterator(b)); } - /** Returns a newly allocated list of all nodes. Returns a count of - * live and decommissioned nodes. */ + /** + * Returns a newly allocated list of all nodes. Returns a count of + * live and decommissioned nodes. + */ ArrayList<DatanodeDescriptor> containingNodeList(Block b, NumberReplicas[] numReplicas) { ArrayList<DatanodeDescriptor> nodeList = new ArrayList<DatanodeDescriptor>(); @@ -3021,7 +3024,8 @@ } return nodeList; } - /* + + /** * Return true if there are any blocks on this node that have not * yet reached their replication factor. Otherwise returns false. */ @@ -3212,7 +3216,9 @@ } } - // Keeps track of which datanodes are allowed to connect to the namenode. + /** + * Keeps track of which datanodes are allowed to connect to the namenode. + */ private boolean inHostsList(DatanodeID node) { Set<String> hostsList = hostsReader.getHosts(); return (hostsList.isEmpty() || @@ -3801,7 +3807,7 @@ return getEditLog().getFsEditName(); } - /* + /** * This is called just before a new checkpoint is uploaded to the * namenode. */ @@ -3823,7 +3829,7 @@ ckptState = CheckpointStates.UPLOAD_START; } - /* + /** * This is called when a checkpoint upload finishes successfully. */ synchronized void checkpointUploadDone() { @@ -3900,7 +3906,7 @@ /** * Check whether current user have permissions to access the path. * For more details of the parameters, see - * [EMAIL PROTECTED] PermissionChecker#checkPermission(INodeDirectory, boolean, FsAction, FsAction, FsAction)}. + * [EMAIL PROTECTED] PermissionChecker#checkPermission(String, INodeDirectory, boolean, FsAction, FsAction, FsAction, FsAction)}. */ private PermissionChecker checkPermission(String path, boolean doCheckOwner, FsAction ancestorAccess, FsAction parentAccess, FsAction access, @@ -3915,7 +3921,7 @@ return pc; } - /* + /** * Check to see if we have exceeded the limit on the number * of inodes. */