Author: shv
Date: Mon Feb 11 11:00:01 2008
New Revision: 620577
URL: http://svn.apache.org/viewvc?rev=620577&view=rev
Log:
HADOOP-2716. Superuser privileges for the Balancer. Contributed by Tsz Wo
(Nicholas), SZE.
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/java/org/apache/hadoop/dfs/Balancer.java
hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestGetBlocks.java
Modified: hadoop/core/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=620577&r1=620576&r2=620577&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Mon Feb 11 11:00:01 2008
@@ -48,6 +48,9 @@
HADOOP-2780. The default socket buffer size for DataNodes is 128K.
(dhruba)
+ HADOOP-2716. Superuser privileges for the Balancer.
+ (Tsz Wo (Nicholas), SZE via shv)
+
Release 0.16.0 - 2008-02-07
INCOMPATIBLE CHANGES
Modified: hadoop/core/trunk/src/java/org/apache/hadoop/dfs/Balancer.java
URL:
http://svn.apache.org/viewvc/hadoop/core/trunk/src/java/org/apache/hadoop/dfs/Balancer.java?rev=620577&r1=620576&r2=620577&view=diff
==============================================================================
--- hadoop/core/trunk/src/java/org/apache/hadoop/dfs/Balancer.java (original)
+++ hadoop/core/trunk/src/java/org/apache/hadoop/dfs/Balancer.java Mon Feb 11
11:00:01 2008
@@ -60,7 +60,10 @@
import org.apache.hadoop.io.retry.RetryProxy;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RemoteException;
+import org.apache.hadoop.net.NetUtils;
import org.apache.hadoop.net.NetworkTopology;
+import org.apache.hadoop.security.UnixUserGroupInformation;
+import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.StringUtils;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
@@ -858,12 +861,21 @@
new HashMap<String, RetryPolicy>();
methodNameToPolicyMap.put("getBlocks", methodPolicy);
+ UserGroupInformation ugi;
+ try {
+ ugi = UnixUserGroupInformation.login(conf);
+ } catch (javax.security.auth.login.LoginException e) {
+ throw new IOException(StringUtils.stringifyException(e));
+ }
+
return (NamenodeProtocol) RetryProxy.create(
NamenodeProtocol.class,
RPC.getProxy(NamenodeProtocol.class,
- NamenodeProtocol.versionID,
- nameNodeAddr,
- conf),
+ NamenodeProtocol.versionID,
+ nameNodeAddr,
+ ugi,
+ conf,
+ NetUtils.getDefaultSocketFactory(conf)),
methodNameToPolicyMap);
}
Modified: hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
URL:
http://svn.apache.org/viewvc/hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java?rev=620577&r1=620576&r2=620577&view=diff
==============================================================================
--- hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
(original)
+++ hadoop/core/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java Mon Feb
11 11:00:01 2008
@@ -639,6 +639,8 @@
*/
synchronized BlocksWithLocations getBlocks(DatanodeID datanode, long size)
throws IOException {
+ checkSuperuserPrivilege();
+
DatanodeDescriptor node = getDatanode(datanode);
if (node == null) {
NameNode.stateChangeLog.warn("BLOCK* NameSystem.getBlocks: "
Modified: hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestGetBlocks.java
URL:
http://svn.apache.org/viewvc/hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestGetBlocks.java?rev=620577&r1=620576&r2=620577&view=diff
==============================================================================
--- hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestGetBlocks.java
(original)
+++ hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestGetBlocks.java Mon Feb
11 11:00:01 2008
@@ -30,6 +30,7 @@
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RemoteException;
import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.security.UnixUserGroupInformation;
import junit.framework.TestCase;
/**
@@ -37,7 +38,7 @@
*/
public class TestGetBlocks extends TestCase {
/** test getBlocks */
- public void testGetBlocks() throws IOException {
+ public void testGetBlocks() throws Exception {
final Configuration CONF = new Configuration();
final short REPLICATION_FACTOR = (short)2;
@@ -93,7 +94,9 @@
InetSocketAddress addr = new InetSocketAddress("localhost",
cluster.getNameNodePort());
NamenodeProtocol namenode = (NamenodeProtocol) RPC.getProxy(
- NamenodeProtocol.class, NamenodeProtocol.versionID, addr, CONF);
+ NamenodeProtocol.class, NamenodeProtocol.versionID, addr,
+ UnixUserGroupInformation.login(CONF), CONF,
+ NetUtils.getDefaultSocketFactory(CONF));
// get blocks of size fileLen from dataNodes[0]
BlockWithLocations[] locs;