You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-commits@hadoop.apache.org by ac...@apache.org on 2011/09/13 20:15:54 UTC
svn commit: r1170283 - in
/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project: CHANGES.txt
hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/launcher/ContainerLauncherImpl.java
Author: acmurthy
Date: Tue Sep 13 18:15:54 2011
New Revision: 1170283
URL: http://svn.apache.org/viewvc?rev=1170283&view=rev
Log:
fMerge -r 1170280:1170281 from trunk to branch-0.23 to fix MAPREDUCE-2997.
Modified:
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt
hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/launcher/ContainerLauncherImpl.java
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt?rev=1170283&r1=1170282&r2=1170283&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt Tue Sep 13 18:15:54 2011
@@ -1280,6 +1280,9 @@ Release 0.23.0 - Unreleased
MAPREDUCE-2995. Better handling of expired containers in MapReduce
ApplicationMaster. (vinodkv via acmurthy)
+ MAPREDUCE-2995. Fixed race condition in ContainerLauncher. (vinodkv via
+ acmurthy)
+
Release 0.22.0 - Unreleased
INCOMPATIBLE CHANGES
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/launcher/ContainerLauncherImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/launcher/ContainerLauncherImpl.java?rev=1170283&r1=1170282&r2=1170283&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/launcher/ContainerLauncherImpl.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/launcher/ContainerLauncherImpl.java Tue Sep 13 18:15:54 2011
@@ -21,9 +21,9 @@ package org.apache.hadoop.mapreduce.v2.a
import java.io.IOException;
import java.nio.ByteBuffer;
import java.security.PrivilegedAction;
-import java.util.HashMap;
-import java.util.Map;
import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -79,8 +79,8 @@ public class ContainerLauncherImpl exten
private RecordFactory recordFactory;
//have a cache/map of UGIs so as to avoid creating too many RPC
//client connection objects to the same NodeManager
- private Map<String, UserGroupInformation> ugiMap =
- new HashMap<String, UserGroupInformation>();
+ private ConcurrentMap<String, UserGroupInformation> ugiMap =
+ new ConcurrentHashMap<String, UserGroupInformation>();
public ContainerLauncherImpl(AppContext context) {
super(ContainerLauncherImpl.class.getName());
@@ -142,22 +142,19 @@ public class ContainerLauncherImpl exten
UserGroupInformation user = UserGroupInformation.getCurrentUser();
- // TODO: Synchronization problems!!
if (UserGroupInformation.isSecurityEnabled()) {
- if(!ugiMap.containsKey(containerManagerBindAddr)) {
- Token<ContainerTokenIdentifier> token =
- new Token<ContainerTokenIdentifier>(
- containerToken.getIdentifier().array(),
- containerToken.getPassword().array(), new Text(
- containerToken.getKind()), new Text(
- containerToken.getService()));
- //the user in createRemoteUser in this context is not important
- user = UserGroupInformation.createRemoteUser(containerManagerBindAddr);
- user.addToken(token);
- ugiMap.put(containerManagerBindAddr, user);
- } else {
- user = ugiMap.get(containerManagerBindAddr);
- }
+
+ Token<ContainerTokenIdentifier> token = new Token<ContainerTokenIdentifier>(
+ containerToken.getIdentifier().array(), containerToken
+ .getPassword().array(), new Text(containerToken.getKind()),
+ new Text(containerToken.getService()));
+ // the user in createRemoteUser in this context is not important
+ UserGroupInformation ugi = UserGroupInformation
+ .createRemoteUser(containerManagerBindAddr);
+ ugi.addToken(token);
+ ugiMap.putIfAbsent(containerManagerBindAddr, ugi);
+
+ user = ugiMap.get(containerManagerBindAddr);
}
ContainerManager proxy =
user.doAs(new PrivilegedAction<ContainerManager>() {