You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by li...@apache.org on 2014/05/20 20:18:41 UTC

svn commit: r1596349 - in /hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase: HConstants.java ipc/HBaseRPC.java

Author: liyin
Date: Tue May 20 18:18:41 2014
New Revision: 1596349

URL: http://svn.apache.org/r1596349
Log:
[HBASE-10891] Setup Socks Proxy in HBaseRPC for HadoopRPC

Author: manukranthk

Summary: This diff attempts to setup Socks Proxy support to talk to master.

Test Plan: Test on Calypso.

Reviewers: liyintang, nileema, adela, daviddeng

Reviewed By: daviddeng

Subscribers: hbase-eng@

Differential Revision: https://phabricator.fb.com/D1295350

Tasks: 4165944

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java?rev=1596349&r1=1596348&r2=1596349&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/HConstants.java Tue May 20 18:18:41 2014
@@ -1098,6 +1098,12 @@ public final class HConstants {
 
   public static final String SWIFT_CLIENT_SOCKS_PROXY_HOST_AND_PORT =
       "hbase.client.swift.socks.proxy.hostAndPort";
+
+  public static final String HADOOPRPC_CLIENT_SOCKS_PROXY_HOSTNAME =
+      "hbase.client.socks.proxy.host.name";
+  public static final String HADOOPRPC_CLIENT_SOCKS_PROXY_PORT =
+      "hbase.client.socks.proxy.port";
+
   /**
    * Key of the number of store-files for blocking flush
    */

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java?rev=1596349&r1=1596348&r2=1596349&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRPC.java Tue May 20 18:18:41 2014
@@ -28,6 +28,7 @@ import java.lang.reflect.InvocationTarge
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.net.InetSocketAddress;
+import java.net.Proxy.Type;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -50,9 +51,12 @@ import org.apache.hadoop.hbase.util.Byte
 import org.apache.hadoop.hbase.util.ParamFormatHelper;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.ipc.VersionedProtocol;
+import org.apache.hadoop.net.SocksSocketFactory;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.codehaus.jackson.map.ObjectMapper;
 
+import com.google.common.net.HostAndPort;
+
 /** A simple RPC mechanism.
  *
  * This is a local hbase copy of the hadoop RPC so we can do things like
@@ -393,6 +397,28 @@ public class HBaseRPC {
                               (long) serverVersion);
   }
 
+  public static SocketFactory getSocksProxySocketFactoryFromConf(
+      Configuration conf) {
+    String socksProxyHostName =
+        conf.get(HConstants.HADOOPRPC_CLIENT_SOCKS_PROXY_HOSTNAME, "");
+    int socksProxyPort =
+        conf.getInt(HConstants.HADOOPRPC_CLIENT_SOCKS_PROXY_PORT, 0);
+    SocketFactory socketFactory = null;
+    if (!socksProxyHostName.isEmpty() && socksProxyPort != 0) {
+      try {
+        java.net.Proxy proxy = new java.net.Proxy(Type.SOCKS,
+            new InetSocketAddress(socksProxyHostName, socksProxyPort));
+        socketFactory = new SocksSocketFactory(proxy);
+      } catch (Exception e) {
+        LOG.warn("Proxy resolution failed", e);
+      }
+    }
+    if (socketFactory == null) {
+      socketFactory = SocketFactory.getDefault();
+    }
+    return socketFactory;
+  }
+
   /**
    * Construct a client-side proxy object with the default SocketFactory
    *
@@ -409,8 +435,8 @@ public class HBaseRPC {
       int rpcTimeout, HBaseRPCOptions options)
       throws IOException {
 
-    return getProxy(protocol, clientVersion, addr, conf, 
-        SocketFactory.getDefault(), rpcTimeout, options);
+    return getProxy(protocol, clientVersion, addr, conf,
+        getSocksProxySocketFactoryFromConf(conf), rpcTimeout, options);
   }
   
   /* this is needed for unit tests. some tests start multiple