From 3d7e7b2d73af15f9716370f1aa8666192541a485 Mon Sep 17 00:00:00 2001 From: Michael Stack Date: Tue, 20 Mar 2018 22:56:41 -0700 Subject: [PATCH] HBASE-20237 Put back getClosestRowBefore and throw UnsupportedOperation instead... for asynchbase client --- hbase-protocol-shaded/src/main/protobuf/Client.proto | 6 ++++++ hbase-protocol/src/main/protobuf/Client.proto | 5 +++++ .../hadoop/hbase/regionserver/RSRpcServices.java | 20 +++++++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/hbase-protocol-shaded/src/main/protobuf/Client.proto b/hbase-protocol-shaded/src/main/protobuf/Client.proto index 642eb61c50..325b9c1460 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. */ diff --git a/hbase-protocol/src/main/protobuf/Client.proto b/hbase-protocol/src/main/protobuf/Client.proto index bc15aec72c..817c26edbe 100644 --- a/hbase-protocol/src/main/protobuf/Client.proto +++ b/hbase-protocol/src/main/protobuf/Client.proto @@ -82,6 +82,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. */ 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 088cdc3526..17b541d64e 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,17 @@ 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("Support for getClosestRowBefore was removed in " + + "hbase-2.0.0"); + } try { - Get get = ProtobufUtil.toGet(action.getGet()); + Get get = ProtobufUtil.toGet(pbGet); if (context != null) { r = get(get, (region), closeCallBack, context); } else { @@ -2422,6 +2432,14 @@ 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("Support for getClosestRowBefore was removed in " + + "hbase-2.0.0"); + } Boolean existence = null; Result r = null; RpcCallContext context = RpcServer.getCurrentCall().orElse(null); -- 2.11.0 (Apple Git-81)