You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2014/07/19 06:52:12 UTC

git commit: HBASE-11547 Backport HBASE-11052 to 0.96 'Sending random data crashes thrift service' (Adrian)

Repository: hbase
Updated Branches:
  refs/heads/0.96 a2b70c7ef -> 7d782b6ac


HBASE-11547 Backport HBASE-11052 to 0.96 'Sending random data crashes thrift service' (Adrian)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7d782b6a
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7d782b6a
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7d782b6a

Branch: refs/heads/0.96
Commit: 7d782b6acc9b50c912fb6ae81c5f50acf2faebc0
Parents: a2b70c7
Author: Ted Yu <te...@apache.org>
Authored: Sat Jul 19 04:49:19 2014 +0000
Committer: Ted Yu <te...@apache.org>
Committed: Sat Jul 19 04:49:19 2014 +0000

----------------------------------------------------------------------
 .../src/main/resources/hbase-default.xml         | 19 +++++++++++++++++++
 .../hadoop/hbase/thrift/ThriftServerRunner.java  |  4 +++-
 .../hadoop/hbase/thrift2/ThriftServer.java       |  7 ++++---
 3 files changed, 26 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/7d782b6a/hbase-common/src/main/resources/hbase-default.xml
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/resources/hbase-default.xml b/hbase-common/src/main/resources/hbase-default.xml
index 9f19d8c..4059b79 100644
--- a/hbase-common/src/main/resources/hbase-default.xml
+++ b/hbase-common/src/main/resources/hbase-default.xml
@@ -924,6 +924,25 @@ possible configurations would overwhelm and obscure the important.
     </description>
   </property>
   <property>
+    <name>hbase.regionserver.thrift.framed</name>
+    <value>false</value>
+    <description>Use Thrift TFramedTransport on the server side.
+      This is the recommended transport for thrift servers and requires a similar setting
+      on the client side. Changing this to false will select the default transport,
+      vulnerable to DoS when malformed requests are issued due to THRIFT-601.
+    </description>
+  </property>
+  <property>
+   <name>hbase.regionserver.thrift.framed.max_frame_size_in_mb</name>
+    <value>2</value>
+    <description>Default frame size when using framed transport</description>
+  </property>
+  <property>
+    <name>hbase.regionserver.thrift.compact</name>
+    <value>false</value>
+    <description>Use Thrift TCompactProtocol binary serialization protocol.</description>
+  </property>
+  <property>
     <name>hbase.offheapcache.percentage</name>
     <value>0</value>
     <description>The amount of off heap space to be allocated towards the experimental

http://git-wip-us.apache.org/repos/asf/hbase/blob/7d782b6a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
----------------------------------------------------------------------
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
index 2345a8a..45ee428 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
@@ -116,6 +116,7 @@ public class ThriftServerRunner implements Runnable {
   static final String BIND_CONF_KEY = "hbase.regionserver.thrift.ipaddress";
   static final String COMPACT_CONF_KEY = "hbase.regionserver.thrift.compact";
   static final String FRAMED_CONF_KEY = "hbase.regionserver.thrift.framed";
+  static final String MAX_FRAME_SIZE_CONF_KEY = "hbase.regionserver.thrift.framed.max_frame_size_in_mb";
   static final String PORT_CONF_KEY = "hbase.regionserver.thrift.port";
   static final String COALESCE_INC_KEY = "hbase.regionserver.thrift.coalesceIncrement";
 
@@ -281,7 +282,8 @@ public class ThriftServerRunner implements Runnable {
     // Construct correct TransportFactory
     TTransportFactory transportFactory;
     if (conf.getBoolean(FRAMED_CONF_KEY, false) || implType.isAlwaysFramed) {
-      transportFactory = new TFramedTransport.Factory();
+      transportFactory = new TFramedTransport.Factory(
+          conf.getInt(MAX_FRAME_SIZE_CONF_KEY, 2)  * 1024 * 1024);
       LOG.debug("Using framed transport");
     } else {
       transportFactory = new TTransportFactory();

http://git-wip-us.apache.org/repos/asf/hbase/blob/7d782b6a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftServer.java
----------------------------------------------------------------------
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftServer.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftServer.java
index a610bf1..fb226e3 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftServer.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftServer.java
@@ -125,10 +125,10 @@ public class ThriftServer {
     }
   }
 
-  private static TTransportFactory getTTransportFactory(boolean framed) {
+  private static TTransportFactory getTTransportFactory(boolean framed, int frameSize) {
     if (framed) {
       log.debug("Using framed transport");
-      return new TFramedTransport.Factory();
+      return new TFramedTransport.Factory(frameSize);
     } else {
       return new TTransportFactory();
     }
@@ -275,7 +275,8 @@ public class ThriftServer {
 
       boolean framed = cmd.hasOption("framed") ||
         conf.getBoolean("hbase.regionserver.thrift.framed", false) || nonblocking || hsha;
-      TTransportFactory transportFactory = getTTransportFactory(framed);
+      TTransportFactory transportFactory = getTTransportFactory(framed,
+         conf.getInt("hbase.regionserver.thrift.framed.max_frame_size_in_mb", 2) * 1024 * 1024);
       InetSocketAddress inetSocketAddress = bindToPort(cmd.getOptionValue("bind"), listenPort);
       conf.setBoolean("hbase.regionserver.thrift.framed", framed);