Author: omalley
Date: Fri Feb 19 08:55:45 2010
New Revision: 911744
URL: http://svn.apache.org/viewvc?rev=911744&view=rev
Log:
HDFS-986. Delegation token renewing and cancelling should provide
meaningful exceptions when there are failures instead of returning
false. (omalley)
Modified:
hadoop/hdfs/trunk/CHANGES.txt
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DFSClient.java
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/security/token/delegation/DelegationTokenIdentifier.java
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/TestDFSClientRetries.java
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/security/TestDelegationToken.java
Modified: hadoop/hdfs/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Fri Feb 19 08:55:45 2010
@@ -66,6 +66,10 @@
HDFS-930. Better error message for DATA_TRANSFER_VERSION mismatched.
(Kay Kay via szetszwo)
+ HDFS-986. Delegation token renewing and cancelling should provide
+ meaningful exceptions when there are failures instead of returning
+ false. (omalley)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DFSClient.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DFSClient.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DFSClient.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DFSClient.java Fri Feb 19
08:55:45 2010
@@ -347,18 +347,24 @@
return namenode.getDelegationToken(renewer);
}
- public Boolean renewDelegationToken(Token<DelegationTokenIdentifier> token)
+ public long renewDelegationToken(Token<DelegationTokenIdentifier> token)
throws InvalidToken, IOException {
try {
return namenode.renewDelegationToken(token);
} catch (RemoteException re) {
- throw re.unwrapRemoteException(InvalidToken.class);
+ throw re.unwrapRemoteException(InvalidToken.class,
+ AccessControlException.class);
}
}
- public Boolean cancelDelegationToken(Token<DelegationTokenIdentifier> token)
- throws IOException {
- return namenode.cancelDelegationToken(token);
+ public void cancelDelegationToken(Token<DelegationTokenIdentifier> token)
+ throws InvalidToken, IOException {
+ try {
+ namenode.cancelDelegationToken(token);
+ } catch (RemoteException re) {
+ throw re.unwrapRemoteException(InvalidToken.class,
+ AccessControlException.class);
+ }
}
/**
Modified:
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DistributedFileSystem.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
---
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
(original)
+++
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
Fri Feb 19 08:55:45 2010
@@ -623,10 +623,10 @@
* Renew an existing delegation token.
*
* @param token delegation token obtained earlier
- * @return True if renewed successfully else false
+ * @return the new expiration time
* @throws IOException
*/
- public Boolean renewDelegationToken(Token<DelegationTokenIdentifier> token)
+ public long renewDelegationToken(Token<DelegationTokenIdentifier> token)
throws InvalidToken, IOException {
return dfs.renewDelegationToken(token);
}
@@ -635,11 +635,10 @@
* Cancel an existing delegation token.
*
* @param token delegation token
- * @return True if canceled successfully else false
* @throws IOException
*/
- public Boolean cancelDelegationToken(Token<DelegationTokenIdentifier> token)
+ public void cancelDelegationToken(Token<DelegationTokenIdentifier> token)
throws IOException {
- return dfs.cancelDelegationToken(token);
+ dfs.cancelDelegationToken(token);
}
}
Modified:
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
---
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
(original)
+++
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
Fri Feb 19 08:55:45 2010
@@ -602,19 +602,18 @@
* Renew an existing delegation token.
*
* @param token delegation token obtained earlier
- * @return True if renewed successfully else false
+ * @return the new expiration time
* @throws IOException
*/
- public Boolean renewDelegationToken(Token<DelegationTokenIdentifier> token)
+ public long renewDelegationToken(Token<DelegationTokenIdentifier> token)
throws IOException;
/**
* Cancel an existing delegation token.
*
* @param token delegation token
- * @return True if canceled successfully else false
* @throws IOException
*/
- public Boolean cancelDelegationToken(Token<DelegationTokenIdentifier> token)
+ public void cancelDelegationToken(Token<DelegationTokenIdentifier> token)
throws IOException;
}
Modified:
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/security/token/delegation/DelegationTokenIdentifier.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/security/token/delegation/DelegationTokenIdentifier.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
---
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/security/token/delegation/DelegationTokenIdentifier.java
(original)
+++
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/security/token/delegation/DelegationTokenIdentifier.java
Fri Feb 19 08:55:45 2010
@@ -28,7 +28,7 @@
@InterfaceAudience.Private
public class DelegationTokenIdentifier
extends AbstractDelegationTokenIdentifier {
- static final Text HDFS_DELEGATION_KIND = new Text("HDFS_DELEGATION_TOKEN");
+ public static final Text HDFS_DELEGATION_KIND = new
Text("HDFS_DELEGATION_TOKEN");
/**
* Create an empty delegation token identifier for reading into.
Modified:
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
---
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
(original)
+++
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Fri Feb 19 08:55:45 2010
@@ -4354,15 +4354,15 @@
return new Token<DelegationTokenIdentifier>(dtId, dtSecretManager);
}
- public Boolean renewDelegationToken(Token<DelegationTokenIdentifier> token)
+ public long renewDelegationToken(Token<DelegationTokenIdentifier> token)
throws InvalidToken, IOException {
String renewer = UserGroupInformation.getCurrentUser().getShortUserName();
return dtSecretManager.renewToken(token, renewer);
}
- public Boolean cancelDelegationToken(Token<DelegationTokenIdentifier> token)
+ public void cancelDelegationToken(Token<DelegationTokenIdentifier> token)
throws IOException {
String canceller =
UserGroupInformation.getCurrentUser().getShortUserName();
- return dtSecretManager.cancelToken(token, canceller);
+ dtSecretManager.cancelToken(token, canceller);
}
}
Modified:
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
---
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
(original)
+++
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java
Fri Feb 19 08:55:45 2010
@@ -556,14 +556,16 @@
return namesystem.getDelegationToken(renewer);
}
- public Boolean renewDelegationToken(Token<DelegationTokenIdentifier> token)
+ @Override
+ public long renewDelegationToken(Token<DelegationTokenIdentifier> token)
throws InvalidToken, IOException {
return namesystem.renewDelegationToken(token);
}
- public Boolean cancelDelegationToken(Token<DelegationTokenIdentifier> token)
+ @Override
+ public void cancelDelegationToken(Token<DelegationTokenIdentifier> token)
throws IOException {
- return namesystem.cancelDelegationToken(token);
+ namesystem.cancelDelegationToken(token);
}
/** {...@inheritdoc} */
Modified:
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/TestDFSClientRetries.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/TestDFSClientRetries.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
---
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/TestDFSClientRetries.java
(original)
+++
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/TestDFSClientRetries.java
Fri Feb 19 08:55:45 2010
@@ -201,14 +201,13 @@
return null;
}
- public Boolean renewDelegationToken(Token<DelegationTokenIdentifier> token)
+ public long renewDelegationToken(Token<DelegationTokenIdentifier> token)
throws InvalidToken, IOException {
- return false;
+ return 0;
}
- public Boolean cancelDelegationToken(Token<DelegationTokenIdentifier>
token)
+ public void cancelDelegationToken(Token<DelegationTokenIdentifier> token)
throws IOException {
- return false;
}
Modified:
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/security/TestDelegationToken.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/security/TestDelegationToken.java?rev=911744&r1=911743&r2=911744&view=diff
==============================================================================
---
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/security/TestDelegationToken.java
(original)
+++
hadoop/hdfs/trunk/src/test/hdfs/org/apache/hadoop/hdfs/security/TestDelegationToken.java
Fri Feb 19 08:55:45 2010
@@ -34,6 +34,8 @@
import org.apache.hadoop.hdfs.HdfsConfiguration;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.io.Text;
+import org.apache.hadoop.security.AccessControlException;
+import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.security.token.SecretManager.InvalidToken;
import
org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenIdentifier;
@@ -80,8 +82,13 @@
Token<DelegationTokenIdentifier> token = generateDelegationToken(
"SomeUser", "JobTracker");
// Fake renewer should not be able to renew
- Assert.assertFalse(dtSecretManager.renewToken(token, "FakeRenewer"));
- Assert.assertTrue(dtSecretManager.renewToken(token, "JobTracker"));
+ try {
+ dtSecretManager.renewToken(token, "FakeRenewer");
+ Assert.fail("should have failed");
+ } catch (AccessControlException ace) {
+ // PASS
+ }
+ dtSecretManager.renewToken(token, "JobTracker");
DelegationTokenIdentifier identifier = new DelegationTokenIdentifier();
byte[] tokenId = token.getIdentifier();
identifier.readFields(new DataInputStream(
@@ -97,10 +104,15 @@
} catch (InvalidToken e) {
//Success
}
- Assert.assertTrue(dtSecretManager.renewToken(token, "JobTracker"));
+ dtSecretManager.renewToken(token, "JobTracker");
Log.info("Sleep beyond the max lifetime");
Thread.sleep(5000);
- Assert.assertFalse(dtSecretManager.renewToken(token, "JobTracker"));
+ try {
+ dtSecretManager.renewToken(token, "JobTracker");
+ Assert.fail("should have been expired");
+ } catch (InvalidToken it) {
+ // PASS
+ }
}
@Test
@@ -110,9 +122,19 @@
Token<DelegationTokenIdentifier> token = generateDelegationToken(
"SomeUser", "JobTracker");
//Fake renewer should not be able to renew
- Assert.assertFalse(dtSecretManager.cancelToken(token, "FakeCanceller"));
- Assert.assertTrue(dtSecretManager.cancelToken(token, "JobTracker"));
- Assert.assertFalse(dtSecretManager.renewToken(token, "JobTracker"));
+ try {
+ dtSecretManager.cancelToken(token, "FakeCanceller");
+ Assert.fail("should have failed");
+ } catch (AccessControlException ace) {
+ // PASS
+ }
+ dtSecretManager.cancelToken(token, "JobTracker");
+ try {
+ dtSecretManager.renewToken(token, "JobTracker");
+ Assert.fail("should have failed");
+ } catch (InvalidToken it) {
+ // PASS
+ }
}
@Test
@@ -126,6 +148,7 @@
new ByteArrayInputStream(tokenId)));
Log.info("A valid token should have non-null password, and should be
renewed successfully");
Assert.assertTrue(null != dtSecretManager.retrievePassword(identifier));
- Assert.assertTrue(dtSecretManager.renewToken(token, "JobTracker"));
- }
+ dtSecretManager.renewToken(token, "JobTracker");
+ }
+
}