Преглед на файлове

Fix race condition between multiple localizers on a single node. (cdouglas via mahadev)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/MR-279@1136747 13f79535-47bb-0310-9956-ffa450edef68
Mahadev Konar преди 14 години
родител
ревизия
fbc0a79141

+ 2 - 0
mapreduce/CHANGES.txt

@@ -4,6 +4,8 @@ Trunk (unreleased changes)
 
 
 
 
     MAPREDUCE-279
     MAPREDUCE-279
+    Fix race condition between multiple localizers on a single node. (cdouglas via mahadev)
+
     Improve logging for AM when requesting containers to show the right ask 
     Improve logging for AM when requesting containers to show the right ask 
     and release fields (mahadev)
     and release fields (mahadev)
 
 

+ 4 - 17
mapreduce/yarn/yarn-server/yarn-server-nodemanager/src/main/c/container-executor/impl/container-executor.c

@@ -517,32 +517,19 @@ int create_directory_for_user(const char* path) {
   uid_t user = geteuid();
   uid_t user = geteuid();
   gid_t group = getegid();
   gid_t group = getegid();
   int ret = 0;
   int ret = 0;
-  ret = change_effective_user(tt_uid, tt_gid);
+  ret = change_effective_user(0, tt_gid);
   if (ret == 0) {
   if (ret == 0) {
-    if (mkdir(path, permissions) == 0) {
+    if (0 == mkdir(path, permissions) || EEXIST == errno) {
       // need to reassert the group sticky bit
       // need to reassert the group sticky bit
       if (chmod(path, permissions) != 0) {
       if (chmod(path, permissions) != 0) {
         fprintf(LOGFILE, "Can't chmod %s to add the sticky bit - %s\n",
         fprintf(LOGFILE, "Can't chmod %s to add the sticky bit - %s\n",
                 path, strerror(errno));
                 path, strerror(errno));
         ret = -1;
         ret = -1;
       } else if (change_owner(path, user, tt_gid) != 0) {
       } else if (change_owner(path, user, tt_gid) != 0) {
+        fprintf(LOGFILE, "Failed to chown %s to %d:%d: %s\n", path, user, tt_gid,
+            strerror(errno));
         ret = -1;
         ret = -1;
       }
       }
-    } else if (errno == EEXIST) {
-      struct stat file_stat;
-      if (stat(path, &file_stat) != 0) {
-        fprintf(LOGFILE, "Can't stat directory %s - %s\n", path, 
-                strerror(errno));
-        ret = -1;
-      } else {
-        if (file_stat.st_uid != user ||
-            file_stat.st_gid != tt_gid) {
-          fprintf(LOGFILE, "Directory %s owned by wrong user or group. "
-                  "Expected %d:%d and found %d:%d.\n",
-                  path, user, tt_gid, file_stat.st_uid, file_stat.st_gid);
-          ret = -1;
-        }
-      }
     } else {
     } else {
       fprintf(LOGFILE, "Failed to create directory %s - %s\n", path,
       fprintf(LOGFILE, "Failed to create directory %s - %s\n", path,
               strerror(errno));
               strerror(errno));