|
@@ -32,6 +32,7 @@ import java.net.UnknownHostException;
|
|
|
import java.nio.channels.ServerSocketChannel;
|
|
|
import java.nio.channels.SocketChannel;
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
+import java.security.PrivilegedExceptionAction;
|
|
|
import java.security.SecureRandom;
|
|
|
import java.util.AbstractList;
|
|
|
import java.util.ArrayList;
|
|
@@ -480,14 +481,26 @@ public class DataNode extends Configured
|
|
|
}
|
|
|
|
|
|
public static InterDatanodeProtocol createInterDataNodeProtocolProxy(
|
|
|
- DatanodeID datanodeid, Configuration conf) throws IOException {
|
|
|
- InetSocketAddress addr = NetUtils.createSocketAddr(
|
|
|
+ DatanodeID datanodeid, final Configuration conf) throws IOException {
|
|
|
+ final InetSocketAddress addr = NetUtils.createSocketAddr(
|
|
|
datanodeid.getHost() + ":" + datanodeid.getIpcPort());
|
|
|
if (InterDatanodeProtocol.LOG.isDebugEnabled()) {
|
|
|
InterDatanodeProtocol.LOG.info("InterDatanodeProtocol addr=" + addr);
|
|
|
}
|
|
|
- return (InterDatanodeProtocol)RPC.getProxy(InterDatanodeProtocol.class,
|
|
|
- InterDatanodeProtocol.versionID, addr, conf);
|
|
|
+
|
|
|
+ UserGroupInformation loginUgi = UserGroupInformation.getLoginUser();
|
|
|
+ try {
|
|
|
+ return loginUgi
|
|
|
+ .doAs(new PrivilegedExceptionAction<InterDatanodeProtocol>() {
|
|
|
+ public InterDatanodeProtocol run() throws IOException {
|
|
|
+ return (InterDatanodeProtocol) RPC.getProxy(
|
|
|
+ InterDatanodeProtocol.class, InterDatanodeProtocol.versionID,
|
|
|
+ addr, conf);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (InterruptedException ie) {
|
|
|
+ throw new IOException(ie.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public InetSocketAddress getNameNodeAddr() {
|