Author: tomwhite Date: Wed Jan 16 10:26:21 2013 New Revision: 1433882 URL: http://svn.apache.org/viewvc?rev=1433882&view=rev Log: Merge -r 1433878:1433879 from trunk to branch-2. Fixes: HADOOP-9212. Potential deadlock in FileSystem.Cache/IPC/UGI.
Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/Credentials.java hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1433882&r1=1433881&r2=1433882&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt Wed Jan 16 10:26:21 2013 @@ -244,6 +244,8 @@ Release 2.0.3-alpha - Unreleased HADOOP-8816. HTTP Error 413 full HEAD if using kerberos authentication. (moritzmoeller via tucu) + + HADOOP-9212. Potential deadlock in FileSystem.Cache/IPC/UGI. (tomwhite) HADOOP-8589 ViewFs tests fail when tests and home dirs are nested. (sanjay Radia) Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/Credentials.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/Credentials.java?rev=1433882&r1=1433881&r2=1433882&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/Credentials.java (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/Credentials.java Wed Jan 16 10:26:21 2013 @@ -18,10 +18,13 @@ package org.apache.hadoop.security; +import java.io.BufferedInputStream; import java.io.DataInput; import java.io.DataInputStream; import java.io.DataOutput; import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.util.Arrays; import java.util.Collection; @@ -148,8 +151,32 @@ public class Credentials implements Writ in.close(); return credentials; } catch(IOException ioe) { + throw new IOException("Exception reading " + filename, ioe); + } finally { IOUtils.cleanup(LOG, in); + } + } + + /** + * Convenience method for reading a token storage file, and loading the Tokens + * therein in the passed UGI + * @param filename + * @param conf + * @throws IOException + */ + public static Credentials readTokenStorageFile(File filename, Configuration conf) + throws IOException { + DataInputStream in = null; + Credentials credentials = new Credentials(); + try { + in = new DataInputStream(new BufferedInputStream( + new FileInputStream(filename))); + credentials.readTokenStorageStream(in); + return credentials; + } catch(IOException ioe) { throw new IOException("Exception reading " + filename, ioe); + } finally { + IOUtils.cleanup(LOG, in); } } Modified: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java?rev=1433882&r1=1433881&r2=1433882&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java (original) +++ hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java Wed Jan 16 10:26:21 2013 @@ -18,6 +18,7 @@ package org.apache.hadoop.security; +import java.io.File; import java.io.IOException; import java.lang.reflect.UndeclaredThrowableException; import java.security.AccessControlContext; @@ -645,10 +646,11 @@ public class UserGroupInformation { String fileLocation = System.getenv(HADOOP_TOKEN_FILE_LOCATION); if (fileLocation != null) { - // load the token storage file and put all of the tokens into the - // user. + // Load the token storage file and put all of the tokens into the + // user. Don't use the FileSystem API for reading since it has a lock + // cycle (HADOOP-9212). Credentials cred = Credentials.readTokenStorageFile( - new Path("file:///" + fileLocation), conf); + new File(fileLocation), conf); loginUser.addCredentials(cred); } loginUser.spawnAutoRenewalThreadForUserCreds();