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);