HADOOP-10346. Deadlock while logging tokens. Contributed by Jason Lowe

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1569382 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jason Darrell Lowe 2014-02-18 15:23:29 +00:00
parent 4aa664f677
commit 4fe4268336
2 changed files with 12 additions and 7 deletions

View File

@ -357,6 +357,8 @@ Release 2.4.0 - UNRELEASED
HADOOP-10249. LdapGroupsMapping should trim ldap password read from file. HADOOP-10249. LdapGroupsMapping should trim ldap password read from file.
(Dilli Armugam via suresh) (Dilli Armugam via suresh)
HADOOP-10346. Deadlock while logging tokens (jlowe)
Release 2.3.1 - UNRELEASED Release 2.3.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -105,18 +105,21 @@ public class Token<T extends TokenIdentifier> implements Writable {
return identifier; return identifier;
} }
private static synchronized Class<? extends TokenIdentifier> private static Class<? extends TokenIdentifier>
getClassForIdentifier(Text kind) { getClassForIdentifier(Text kind) {
if (tokenKindMap == null) { Class<? extends TokenIdentifier> cls = null;
tokenKindMap = Maps.newHashMap(); synchronized (Token.class) {
for (TokenIdentifier id : ServiceLoader.load(TokenIdentifier.class)) { if (tokenKindMap == null) {
tokenKindMap.put(id.getKind(), id.getClass()); tokenKindMap = Maps.newHashMap();
for (TokenIdentifier id : ServiceLoader.load(TokenIdentifier.class)) {
tokenKindMap.put(id.getKind(), id.getClass());
}
} }
cls = tokenKindMap.get(kind);
} }
Class<? extends TokenIdentifier> cls = tokenKindMap.get(kind);
if (cls == null) { if (cls == null) {
LOG.warn("Cannot find class for token kind " + kind); LOG.warn("Cannot find class for token kind " + kind);
return null; return null;
} }
return cls; return cls;
} }