فهرست منبع

HDFS-8693. Addendum patch to execute the command using UGI. Contributed by Brahma Reddy Battula.

(cherry picked from commit 35c17351cab645dcc72e0d2ae1608507aa787ffb)
(cherry picked from commit 24af0bc144b7e89fc2ea8d2f49b2c8eeb5a2b725)
Brahma Reddy Battula 7 سال پیش
والد
کامیت
77a933a45b

+ 17 - 4
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolManager.java

@@ -240,20 +240,33 @@ class BlockPoolManager {
           Joiner.on(",").useForNull("<default>").join(toRefresh));
           Joiner.on(",").useForNull("<default>").join(toRefresh));
       
       
       for (String nsToRefresh : toRefresh) {
       for (String nsToRefresh : toRefresh) {
-        BPOfferService bpos = bpByNameserviceId.get(nsToRefresh);
+        final BPOfferService bpos = bpByNameserviceId.get(nsToRefresh);
         Map<String, InetSocketAddress> nnIdToAddr = addrMap.get(nsToRefresh);
         Map<String, InetSocketAddress> nnIdToAddr = addrMap.get(nsToRefresh);
         Map<String, InetSocketAddress> nnIdToLifelineAddr =
         Map<String, InetSocketAddress> nnIdToLifelineAddr =
             lifelineAddrMap.get(nsToRefresh);
             lifelineAddrMap.get(nsToRefresh);
-        ArrayList<InetSocketAddress> addrs =
+        final ArrayList<InetSocketAddress> addrs =
             Lists.newArrayListWithCapacity(nnIdToAddr.size());
             Lists.newArrayListWithCapacity(nnIdToAddr.size());
-        ArrayList<InetSocketAddress> lifelineAddrs =
+        final ArrayList<InetSocketAddress> lifelineAddrs =
             Lists.newArrayListWithCapacity(nnIdToAddr.size());
             Lists.newArrayListWithCapacity(nnIdToAddr.size());
         for (String nnId : nnIdToAddr.keySet()) {
         for (String nnId : nnIdToAddr.keySet()) {
           addrs.add(nnIdToAddr.get(nnId));
           addrs.add(nnIdToAddr.get(nnId));
           lifelineAddrs.add(nnIdToLifelineAddr != null ?
           lifelineAddrs.add(nnIdToLifelineAddr != null ?
               nnIdToLifelineAddr.get(nnId) : null);
               nnIdToLifelineAddr.get(nnId) : null);
         }
         }
-        bpos.refreshNNList(addrs, lifelineAddrs);
+        try {
+          UserGroupInformation.getLoginUser()
+              .doAs(new PrivilegedExceptionAction<Object>() {
+                @Override
+                public Object run() throws Exception {
+                  bpos.refreshNNList(addrs, lifelineAddrs);
+                  return null;
+                }
+              });
+        } catch (InterruptedException ex) {
+          IOException ioe = new IOException();
+          ioe.initCause(ex.getCause());
+          throw ioe;
+        }
       }
       }
     }
     }
   }
   }