You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by su...@apache.org on 2013/07/23 08:44:48 UTC
svn commit: r1505912 - in
/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/java/org/apache/hadoop/hdfs/protocol/
src/main/java/org/apache/hadoop/hdfs/server/protocol/
src/test/java/org/apache/hadoop/hdfs/protocol/
Author: suresh
Date: Tue Jul 23 06:44:47 2013
New Revision: 1505912
URL: http://svn.apache.org/r1505912
Log:
HDFS-4974. Merge 1505911 from trunk
Added:
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/protocol/TestAnnotations.java
- copied unchanged from r1505911, hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/protocol/TestAnnotations.java
Modified:
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/DatanodeProtocol.java
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/NamenodeProtocol.java
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1505912&r1=1505911&r2=1505912&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Tue Jul 23 06:44:47 2013
@@ -105,6 +105,9 @@ Release 2.1.0-beta - 2013-07-02
HDFS-4373. Add HTTP API for querying NameNode startup progress. (cnauroth)
HDFS-4374. Display NameNode startup progress in UI. (cnauroth)
+
+ HDFS-4974. Add Idempotent and AtMostOnce annotations to namenode
+ protocol methods. (suresh)
IMPROVEMENTS
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java?rev=1505912&r1=1505911&r2=1505912&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java Tue Jul 23 06:44:47 2013
@@ -40,6 +40,7 @@ import org.apache.hadoop.hdfs.server.nam
import org.apache.hadoop.hdfs.server.namenode.SafeModeException;
import org.apache.hadoop.io.EnumSetWritable;
import org.apache.hadoop.io.Text;
+import org.apache.hadoop.io.retry.AtMostOnce;
import org.apache.hadoop.io.retry.Idempotent;
import org.apache.hadoop.security.AccessControlException;
import org.apache.hadoop.security.KerberosInfo;
@@ -139,7 +140,7 @@ public interface ClientProtocol {
* <p>
* Blocks have a maximum size. Clients that intend to create
* multi-block files must also use
- * {@link #addBlock(String, String, ExtendedBlock, DatanodeInfo[])}
+ * {@link #addBlock}
*
* @param src path of the file being created.
* @param masked masked permission.
@@ -170,7 +171,10 @@ public interface ClientProtocol {
*
* RuntimeExceptions:
* @throws InvalidPathException Path <code>src</code> is invalid
+ * <p>
+ * <em>Note that create with {@link CreateFlag#OVERWRITE} is idempotent.</em>
*/
+ @AtMostOnce
public HdfsFileStatus create(String src, FsPermission masked,
String clientName, EnumSetWritable<CreateFlag> flag,
boolean createParent, short replication, long blockSize)
@@ -204,6 +208,7 @@ public interface ClientProtocol {
* RuntimeExceptions:
* @throws UnsupportedOperationException if append is not supported
*/
+ @AtMostOnce
public LocatedBlock append(String src, String clientName)
throws AccessControlException, DSQuotaExceededException,
FileNotFoundException, SafeModeException, UnresolvedLinkException,
@@ -409,6 +414,7 @@ public interface ClientProtocol {
* @throws SnapshotAccessControlException if path is in RO snapshot
* @throws IOException an I/O error occurred
*/
+ @AtMostOnce
public boolean rename(String src, String dst)
throws UnresolvedLinkException, SnapshotAccessControlException, IOException;
@@ -422,6 +428,7 @@ public interface ClientProtocol {
* contains a symlink
* @throws SnapshotAccessControlException if path is in RO snapshot
*/
+ @AtMostOnce
public void concat(String trg, String[] srcs)
throws IOException, UnresolvedLinkException, SnapshotAccessControlException;
@@ -460,6 +467,7 @@ public interface ClientProtocol {
* @throws SnapshotAccessControlException if path is in RO snapshot
* @throws IOException If an I/O error occurred
*/
+ @AtMostOnce
public void rename2(String src, String dst, Options.Rename... options)
throws AccessControlException, DSQuotaExceededException,
FileAlreadyExistsException, FileNotFoundException,
@@ -484,6 +492,7 @@ public interface ClientProtocol {
* @throws SnapshotAccessControlException if path is in RO snapshot
* @throws IOException If an I/O error occurred
*/
+ @AtMostOnce
public boolean delete(String src, boolean recursive)
throws AccessControlException, FileNotFoundException, SafeModeException,
UnresolvedLinkException, SnapshotAccessControlException, IOException;
@@ -704,6 +713,7 @@ public interface ClientProtocol {
* @throws AccessControlException if the superuser privilege is violated.
* @throws IOException if image creation failed.
*/
+ @AtMostOnce
public void saveNamespace() throws AccessControlException, IOException;
@@ -725,6 +735,7 @@ public interface ClientProtocol {
*
* @throws AccessControlException if the superuser privilege is violated.
*/
+ @Idempotent
public boolean restoreFailedStorage(String arg)
throws AccessControlException, IOException;
@@ -732,6 +743,7 @@ public interface ClientProtocol {
* Tells the namenode to reread the hosts and exclude files.
* @throws IOException
*/
+ @Idempotent
public void refreshNodes() throws IOException;
/**
@@ -741,6 +753,7 @@ public interface ClientProtocol {
*
* @throws IOException
*/
+ @Idempotent
public void finalizeUpgrade() throws IOException;
/**
@@ -763,6 +776,7 @@ public interface ClientProtocol {
*
* @throws IOException
*/
+ @Idempotent
public void metaSave(String filename) throws IOException;
/**
@@ -918,6 +932,7 @@ public interface ClientProtocol {
* @throws SnapshotAccessControlException if path is in RO snapshot
* @throws IOException If an I/O error occurred
*/
+ @AtMostOnce
public void createSymlink(String target, String link, FsPermission dirPerm,
boolean createParent) throws AccessControlException,
FileAlreadyExistsException, FileNotFoundException,
@@ -965,6 +980,7 @@ public interface ClientProtocol {
* @param newNodes datanodes in the pipeline
* @throws IOException if any error occurs
*/
+ @AtMostOnce
public void updatePipeline(String clientName, ExtendedBlock oldBlock,
ExtendedBlock newBlock, DatanodeID[] newNodes)
throws IOException;
@@ -997,6 +1013,7 @@ public interface ClientProtocol {
* @param token delegation token
* @throws IOException
*/
+ @Idempotent
public void cancelDelegationToken(Token<DelegationTokenIdentifier> token)
throws IOException;
@@ -1005,6 +1022,7 @@ public interface ClientProtocol {
* DataTransferProtocol to/from DataNodes.
* @throws IOException
*/
+ @Idempotent
public DataEncryptionKey getDataEncryptionKey() throws IOException;
/**
@@ -1014,6 +1032,7 @@ public interface ClientProtocol {
* @return the snapshot path.
* @throws IOException
*/
+ @AtMostOnce
public String createSnapshot(String snapshotRoot, String snapshotName)
throws IOException;
@@ -1023,6 +1042,7 @@ public interface ClientProtocol {
* @param snapshotName Name of the snapshot for the snapshottable directory
* @throws IOException
*/
+ @AtMostOnce
public void deleteSnapshot(String snapshotRoot, String snapshotName)
throws IOException;
@@ -1033,6 +1053,7 @@ public interface ClientProtocol {
* @param snapshotNewName new name of the snapshot
* @throws IOException
*/
+ @AtMostOnce
public void renameSnapshot(String snapshotRoot, String snapshotOldName,
String snapshotNewName) throws IOException;
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/DatanodeProtocol.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/DatanodeProtocol.java?rev=1505912&r1=1505911&r2=1505912&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/DatanodeProtocol.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/DatanodeProtocol.java Tue Jul 23 06:44:47 2013
@@ -25,6 +25,8 @@ import org.apache.hadoop.hdfs.DFSConfigK
import org.apache.hadoop.hdfs.protocol.DatanodeID;
import org.apache.hadoop.hdfs.protocol.ExtendedBlock;
import org.apache.hadoop.hdfs.protocol.LocatedBlock;
+import org.apache.hadoop.io.retry.AtMostOnce;
+import org.apache.hadoop.io.retry.Idempotent;
import org.apache.hadoop.security.KerberosInfo;
/**********************************************************************
@@ -81,6 +83,7 @@ public interface DatanodeProtocol {
* @return the given {@link org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration} with
* updated registration information
*/
+ @Idempotent
public DatanodeRegistration registerDatanode(DatanodeRegistration registration
) throws IOException;
@@ -98,6 +101,7 @@ public interface DatanodeProtocol {
* @param failedVolumes number of failed volumes
* @throws IOException on error
*/
+ @Idempotent
public HeartbeatResponse sendHeartbeat(DatanodeRegistration registration,
StorageReport[] reports,
int xmitsInProgress,
@@ -120,6 +124,7 @@ public interface DatanodeProtocol {
* @return - the next command for DN to process.
* @throws IOException
*/
+ @Idempotent
public DatanodeCommand blockReport(DatanodeRegistration registration,
String poolId, StorageBlockReport[] reports) throws IOException;
@@ -133,6 +138,7 @@ public interface DatanodeProtocol {
* writes a new Block here, or another DataNode copies a Block to
* this DataNode, it will call blockReceived().
*/
+ @AtMostOnce
public void blockReceivedAndDeleted(DatanodeRegistration registration,
String poolId,
StorageReceivedDeletedBlocks[] rcvdAndDeletedBlocks)
@@ -142,21 +148,25 @@ public interface DatanodeProtocol {
* errorReport() tells the NameNode about something that has gone
* awry. Useful for debugging.
*/
+ @Idempotent
public void errorReport(DatanodeRegistration registration,
int errorCode,
String msg) throws IOException;
+ @Idempotent
public NamespaceInfo versionRequest() throws IOException;
/**
* same as {@link org.apache.hadoop.hdfs.protocol.ClientProtocol#reportBadBlocks(LocatedBlock[])}
* }
*/
+ @Idempotent
public void reportBadBlocks(LocatedBlock[] blocks) throws IOException;
/**
* Commit block synchronization in lease recovery
*/
+ @AtMostOnce
public void commitBlockSynchronization(ExtendedBlock block,
long newgenerationstamp, long newlength,
boolean closeFile, boolean deleteblock, DatanodeID[] newtargets,
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/NamenodeProtocol.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/NamenodeProtocol.java?rev=1505912&r1=1505911&r2=1505912&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/NamenodeProtocol.java (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/NamenodeProtocol.java Tue Jul 23 06:44:47 2013
@@ -25,6 +25,8 @@ import org.apache.hadoop.hdfs.DFSConfigK
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.apache.hadoop.hdfs.security.token.block.ExportedBlockKeys;
import org.apache.hadoop.hdfs.server.namenode.CheckpointSignature;
+import org.apache.hadoop.io.retry.AtMostOnce;
+import org.apache.hadoop.io.retry.Idempotent;
import org.apache.hadoop.security.KerberosInfo;
/*****************************************************************************
@@ -73,6 +75,7 @@ public interface NamenodeProtocol {
* @throws IOException if size is less than or equal to 0 or
datanode does not exist
*/
+ @Idempotent
public BlocksWithLocations getBlocks(DatanodeInfo datanode, long size)
throws IOException;
@@ -82,6 +85,7 @@ public interface NamenodeProtocol {
* @return ExportedBlockKeys containing current block keys
* @throws IOException
*/
+ @Idempotent
public ExportedBlockKeys getBlockKeys() throws IOException;
/**
@@ -90,11 +94,13 @@ public interface NamenodeProtocol {
* case of a non-active node.
* @throws IOException
*/
+ @Idempotent
public long getTransactionID() throws IOException;
/**
* Get the transaction ID of the most recent checkpoint.
*/
+ @Idempotent
public long getMostRecentCheckpointTxId() throws IOException;
/**
@@ -103,6 +109,7 @@ public interface NamenodeProtocol {
* @throws IOException
* @return a unique token to identify this transaction.
*/
+ @Idempotent
public CheckpointSignature rollEditLog() throws IOException;
/**
@@ -112,6 +119,7 @@ public interface NamenodeProtocol {
* of the name-node
* @throws IOException
*/
+ @Idempotent
public NamespaceInfo versionRequest() throws IOException;
/**
@@ -124,6 +132,7 @@ public interface NamenodeProtocol {
* @param msg free text description of the error
* @throws IOException
*/
+ @Idempotent
public void errorReport(NamenodeRegistration registration,
int errorCode,
String msg) throws IOException;
@@ -134,6 +143,7 @@ public interface NamenodeProtocol {
* @return {@link NamenodeRegistration} of the node,
* which this node has just registered with.
*/
+ @Idempotent
public NamenodeRegistration registerSubordinateNamenode(
NamenodeRegistration registration) throws IOException;
@@ -151,6 +161,7 @@ public interface NamenodeProtocol {
* @return {@link CheckpointCommand} if checkpoint is allowed.
* @throws IOException
*/
+ @AtMostOnce
public NamenodeCommand startCheckpoint(NamenodeRegistration registration)
throws IOException;
@@ -162,6 +173,7 @@ public interface NamenodeProtocol {
* @param sig {@code CheckpointSignature} which identifies the checkpoint.
* @throws IOException
*/
+ @AtMostOnce
public void endCheckpoint(NamenodeRegistration registration,
CheckpointSignature sig) throws IOException;
@@ -171,6 +183,7 @@ public interface NamenodeProtocol {
* available to be fetched from the NameNode.
* @param sinceTxId return only logs that contain transactions >= sinceTxId
*/
+ @Idempotent
public RemoteEditLogManifest getEditLogManifest(long sinceTxId)
throws IOException;
}