Quellcode durchsuchen

HDFS-1755. Federation: The BPOfferService must always connect to namenode as the login user. Contributed by jitendra.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hdfs/branches/HDFS-1052@1082326 13f79535-47bb-0310-9956-ffa450edef68
Jitendra Nath Pandey vor 14 Jahren
Ursprung
Commit
86c1c59e57
2 geänderte Dateien mit 19 neuen und 4 gelöschten Zeilen
  1. 4 1
      CHANGES.txt
  2. 15 3
      src/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java

+ 4 - 1
CHANGES.txt

@@ -241,7 +241,10 @@ Trunk (unreleased changes)
     HDFS-1749. Federation: TestListCorruptFileBlocks failing in federation 
     branch. (jitendra)
 
-   HDFS-1754. Federation: testFsck fails. (boryas)
+    HDFS-1754. Federation: testFsck fails. (boryas)
+
+    HDFS-1755. Federation: The BPOfferService must always connect to namenode as 
+    the login user. (jitendra)
 
   IMPROVEMENTS
 

+ 15 - 3
src/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java

@@ -270,9 +270,21 @@ public class DataNode extends Configured
       }
     }
     
-    synchronized void startAll() {
-      for (BPOfferService bpos: nameNodeThreads.values()) {
-        bpos.start();
+    synchronized void startAll() throws IOException {
+      try {
+        UserGroupInformation.getLoginUser().doAs(
+            new PrivilegedExceptionAction<Object>() {
+              public Object run() throws Exception {
+                for (BPOfferService bpos : nameNodeThreads.values()) {
+                  bpos.start();
+                }
+                return null;
+              }
+            });
+      } catch (InterruptedException ex) {
+        IOException ioe = new IOException();
+        ioe.initCause(ex.getCause());
+        throw ioe;
       }
     }