Repository: hbase
Updated Branches:
  refs/heads/master d7475b92e -> 9601ab227


HBASE-20237 Put back getClosestRowBefore and throw UnsupportedOperation 
instead... for asynchbase client Throw exception if an old client connects.


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

Branch: refs/heads/master
Commit: 9601ab2272fc0f81478004643f78f7080071b29e
Parents: d7475b9
Author: Michael Stack <st...@apache.org>
Authored: Tue Mar 20 22:56:41 2018 -0700
Committer: Michael Stack <st...@apache.org>
Committed: Wed Mar 21 21:51:25 2018 -0700

----------------------------------------------------------------------
 .../src/main/protobuf/Client.proto              |  6 ++++++
 hbase-protocol/src/main/protobuf/Client.proto   |  5 +++++
 .../hbase/regionserver/RSRpcServices.java       | 22 +++++++++++++++++++-
 3 files changed, 32 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/9601ab22/hbase-protocol-shaded/src/main/protobuf/Client.proto
----------------------------------------------------------------------
diff --git a/hbase-protocol-shaded/src/main/protobuf/Client.proto 
b/hbase-protocol-shaded/src/main/protobuf/Client.proto
index 642eb61..325b9c1 100644
--- a/hbase-protocol-shaded/src/main/protobuf/Client.proto
+++ b/hbase-protocol-shaded/src/main/protobuf/Client.proto
@@ -81,6 +81,12 @@ message Get {
   // the existence.
   optional bool existence_only = 10 [default = false];
 
+  // If the row to get doesn't exist, return the
+  // closest row before. Deprecated. No longer used!
+  // Since hbase-2.0.0 but left in place so can test
+  // for Gets with this set and throw Exception.
+  optional bool closest_row_before = 11 [default = false];
+
   optional Consistency consistency = 12 [default = STRONG];
   repeated ColumnFamilyTimeRange cf_time_range = 13;
   optional bool load_column_families_on_demand = 14; /* DO NOT add defaults to 
load_column_families_on_demand. */

http://git-wip-us.apache.org/repos/asf/hbase/blob/9601ab22/hbase-protocol/src/main/protobuf/Client.proto
----------------------------------------------------------------------
diff --git a/hbase-protocol/src/main/protobuf/Client.proto 
b/hbase-protocol/src/main/protobuf/Client.proto
index 058bd4b..9b4e3e1 100644
--- a/hbase-protocol/src/main/protobuf/Client.proto
+++ b/hbase-protocol/src/main/protobuf/Client.proto
@@ -81,6 +81,11 @@ message Get {
   // the existence.
   optional bool existence_only = 10 [default = false];
 
+  // If the row to get doesn't exist, return the
+  // closest row before. Deprecated. No longer used!
+  // Since hbase-2.0.0.
+  optional bool closest_row_before = 11 [default = false];
+
   optional Consistency consistency = 12 [default = STRONG];
   repeated ColumnFamilyTimeRange cf_time_range = 13;
   optional bool load_column_families_on_demand = 14; /* DO NOT add defaults to 
load_column_families_on_demand. */

http://git-wip-us.apache.org/repos/asf/hbase/blob/9601ab22/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
index c559823..f9d6798 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
@@ -85,6 +85,7 @@ import org.apache.hadoop.hbase.conf.ConfigurationObserver;
 import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;
 import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;
 import org.apache.hadoop.hbase.exceptions.ScannerResetException;
+import org.apache.hadoop.hbase.exceptions.UnknownProtocolException;
 import org.apache.hadoop.hbase.filter.ByteArrayComparable;
 import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;
 import org.apache.hadoop.hbase.ipc.HBaseRpcController;
@@ -816,8 +817,18 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
         }
         if (action.hasGet()) {
           long before = EnvironmentEdgeManager.currentTime();
+          ClientProtos.Get pbGet = action.getGet();
+          // An asynchbase client, https://github.com/OpenTSDB/asynchbase, 
starts by trying to do
+          // a get closest before. Throwing the UnknownProtocolException 
signals it that it needs
+          // to switch and do hbase2 protocol (HBase servers do not tell 
clients what versions
+          // they are; its a problem for non-native clients like asynchbase. 
HBASE-20225.
+          if (pbGet.hasClosestRowBefore() && pbGet.getClosestRowBefore()) {
+            throw new UnknownProtocolException("Is this a pre-hbase-1.0.0 or 
asynchbase client? " +
+                "Client is invoking getClosestRowBefore removed in hbase-2.0.0 
replaced by " +
+                "reverse Scan.");
+          }
           try {
-            Get get = ProtobufUtil.toGet(action.getGet());
+            Get get = ProtobufUtil.toGet(pbGet);
             if (context != null) {
               r = get(get, (region), closeCallBack, context);
             } else {
@@ -2437,6 +2448,15 @@ public class RSRpcServices implements 
HBaseRPCErrorHandler,
 
       GetResponse.Builder builder = GetResponse.newBuilder();
       ClientProtos.Get get = request.getGet();
+      // An asynchbase client, https://github.com/OpenTSDB/asynchbase, starts 
by trying to do
+      // a get closest before. Throwing the UnknownProtocolException signals 
it that it needs
+      // to switch and do hbase2 protocol (HBase servers do not tell clients 
what versions
+      // they are; its a problem for non-native clients like asynchbase. 
HBASE-20225.
+      if (get.hasClosestRowBefore() && get.getClosestRowBefore()) {
+        throw new UnknownProtocolException("Is this a pre-hbase-1.0.0 or 
asynchbase client? " +
+            "Client is invoking getClosestRowBefore removed in hbase-2.0.0 
replaced by " +
+            "reverse Scan.");
+      }
       Boolean existence = null;
       Result r = null;
       RpcCallContext context = RpcServer.getCurrentCall().orElse(null);

Reply via email to