http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java index 364b9c9..d24299d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java @@ -93,13 +93,6 @@ public interface MemStore extends HeapSize { long delete(final Cell deleteCell); /** - * Find the key that matches <i>row</i> exactly, or the one that immediately precedes it. The - * target row key is set in state. - * @param state column/delete tracking state - */ - void getRowKeyAtOrBefore(final GetClosestRowBeforeTracker state); - - /** * Given the specs of a column, update it, first by inserting a new record, * then removing the old one. Since there is only 1 KeyValue involved, the memstoreTS * will be set to 0, thus ensuring that they instantly appear to anyone. The underlying
http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/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 d7be4b4..5f31086 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 @@ -1933,32 +1933,21 @@ public class RSRpcServices implements HBaseRPCErrorHandler, quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.GET); - if (get.hasClosestRowBefore() && get.getClosestRowBefore()) { - if (get.getColumnCount() != 1) { - throw new DoNotRetryIOException( - "get ClosestRowBefore supports one and only one family now, not " - + get.getColumnCount() + " families"); - } - byte[] row = get.getRow().toByteArray(); - byte[] family = get.getColumn(0).getFamily().toByteArray(); - r = region.getClosestRowBefore(row, family); - } else { - Get clientGet = ProtobufUtil.toGet(get); - if (get.getExistenceOnly() && region.getCoprocessorHost() != null) { - existence = region.getCoprocessorHost().preExists(clientGet); - } - if (existence == null) { - r = region.get(clientGet); - if (get.getExistenceOnly()) { - boolean exists = r.getExists(); - if (region.getCoprocessorHost() != null) { - exists = region.getCoprocessorHost().postExists(clientGet, exists); - } - existence = exists; + Get clientGet = ProtobufUtil.toGet(get); + if (get.getExistenceOnly() && region.getCoprocessorHost() != null) { + existence = region.getCoprocessorHost().preExists(clientGet); + } + if (existence == null) { + r = region.get(clientGet); + if (get.getExistenceOnly()) { + boolean exists = r.getExists(); + if (region.getCoprocessorHost() != null) { + exists = region.getCoprocessorHost().postExists(clientGet, exists); } + existence = exists; } } - if (existence != null){ + if (existence != null) { ClientProtos.Result pbr = ProtobufUtil.toResult(existence, region.getRegionInfo().getReplicaId() != 0); builder.setResult(pbr); @@ -1974,8 +1963,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler, throw new ServiceException(ie); } finally { if (regionServer.metricsRegionServer != null) { - regionServer.metricsRegionServer.updateGet( - EnvironmentEdgeManager.currentTime() - before); + regionServer.metricsRegionServer.updateGet(EnvironmentEdgeManager.currentTime() - before); } if (quota != null) { quota.close(); http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java index 9da99ab..6d87057 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java @@ -381,17 +381,6 @@ public interface Region extends ConfigurationObserver { List<Cell> get(Get get, boolean withCoprocessor) throws IOException; /** - * Return all the data for the row that matches <i>row</i> exactly, - * or the one that immediately preceeds it, at or immediately before - * <i>ts</i>. - * @param row - * @param family - * @return result of the operation - * @throws IOException - */ - Result getClosestRowBefore(byte[] row, byte[] family) throws IOException; - - /** * Return an iterator that scans over the HRegion, returning the indicated * columns and rows specified by the {@link Scan}. * <p> http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java index 85d4b64..13b8317 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java @@ -783,41 +783,6 @@ public class RegionCoprocessorHost // RegionObserver support /** - * @param row the row key - * @param family the family - * @param result the result set from the region - * @return true if default processing should be bypassed - * @exception IOException Exception - */ - public boolean preGetClosestRowBefore(final byte[] row, final byte[] family, - final Result result) throws IOException { - return execOperation(coprocessors.isEmpty() ? null : new RegionOperation() { - @Override - public void call(RegionObserver oserver, ObserverContext<RegionCoprocessorEnvironment> ctx) - throws IOException { - oserver.preGetClosestRowBefore(ctx, row, family, result); - } - }); - } - - /** - * @param row the row key - * @param family the family - * @param result the result set from the region - * @exception IOException Exception - */ - public void postGetClosestRowBefore(final byte[] row, final byte[] family, - final Result result) throws IOException { - execOperation(coprocessors.isEmpty() ? null : new RegionOperation() { - @Override - public void call(RegionObserver oserver, ObserverContext<RegionCoprocessorEnvironment> ctx) - throws IOException { - oserver.postGetClosestRowBefore(ctx, row, family, result); - } - }); - } - - /** * @param get the Get request * @return true if default processing should be bypassed * @exception IOException Exception http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java index 46fce67..edc166e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java @@ -143,20 +143,6 @@ public interface Store extends HeapSize, StoreConfigInformation, PropagatingConf */ void rollback(final Cell cell); - /** - * Find the key that matches <i>row</i> exactly, or the one that immediately precedes it. WARNING: - * Only use this method on a table where writes occur with strictly increasing timestamps. This - * method assumes this pattern of writes in order to make it reasonably performant. Also our - * search is dependent on the axiom that deletes are for cells that are in the container that - * follows whether a memstore snapshot or a storefile, not for the current container: i.e. we'll - * see deletes before we come across cells we are to delete. Presumption is that the - * memstore#kvset is processed before memstore#snapshot and so on. - * @param row The row key of the targeted row. - * @return Found Cell or null if none found. - * @throws IOException - */ - Cell getRowKeyAtOrBefore(final byte[] row) throws IOException; - FileSystem getFileSystem(); /* http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java index 8bd69a2..275d4da 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java @@ -661,7 +661,6 @@ public class AccessController extends BaseMasterAndRegionObserver } private enum OpType { - GET_CLOSEST_ROW_BEFORE("getClosestRowBefore"), GET("get"), EXISTS("exists"), SCAN("scan"), @@ -1424,28 +1423,6 @@ public class AccessController extends BaseMasterAndRegionObserver return scanner; } - @Override - public void preGetClosestRowBefore(final ObserverContext<RegionCoprocessorEnvironment> c, - final byte [] row, final byte [] family, final Result result) - throws IOException { - assert family != null; - RegionCoprocessorEnvironment env = c.getEnvironment(); - Map<byte[],? extends Collection<byte[]>> families = makeFamilyMap(family, null); - User user = getActiveUser(); - AuthResult authResult = permissionGranted(OpType.GET_CLOSEST_ROW_BEFORE, user, env, families, - Action.READ); - if (!authResult.isAllowed() && cellFeaturesEnabled && !compatibleEarlyTermination) { - authResult.setAllowed(checkCoveringPermission(OpType.GET_CLOSEST_ROW_BEFORE, env, row, - families, HConstants.LATEST_TIMESTAMP, Action.READ)); - authResult.setReason("Covering cell set"); - } - logResult(authResult); - if (authorizationEnabled && !authResult.isAllowed()) { - throw new AccessDeniedException("Insufficient permissions " + - authResult.toContextString()); - } - } - private void internalPreRead(final ObserverContext<RegionCoprocessorEnvironment> c, final Query query, OpType opType) throws IOException { Filter filter = query.getFilter(); http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java index feec5f8..86b6c35 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java @@ -92,6 +92,7 @@ import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.regionserver.HStore; import org.apache.hadoop.hbase.regionserver.InternalScanner; import org.apache.hadoop.hbase.regionserver.Region; +import org.apache.hadoop.hbase.regionserver.RegionScanner; import org.apache.hadoop.hbase.regionserver.RegionServerServices; import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException; import org.apache.hadoop.hbase.regionserver.wal.MetricsWAL; @@ -4155,4 +4156,28 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility { } return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]); } + + public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException { + Scan scan = new Scan(row); + scan.setSmall(true); + scan.setCaching(1); + scan.setReversed(true); + scan.addFamily(family); + try (RegionScanner scanner = r.getScanner(scan)) { + List<Cell> cells = new ArrayList<Cell>(1); + scanner.next(cells); + if (r.getRegionInfo().isMetaRegion() && !isTargetTable(row, cells.get(0))) { + return null; + } + return Result.create(cells); + } + } + + private boolean isTargetTable(final byte[] inRow, Cell c) { + String inputRowString = Bytes.toString(inRow); + int i = inputRowString.indexOf(HConstants.DELIMITER); + String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength()); + int o = outputRowString.indexOf(HConstants.DELIMITER); + return inputRowString.substring(0, i).equals(outputRowString.substring(0, o)); + } } http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java index 5ab7424..6dc4394 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java @@ -4209,83 +4209,56 @@ public class TestFromClientSide { region.flush(true); Result result; - Get get = null; // Test before first that null is returned - get = new Get(beforeFirstRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); - assertTrue(result.isEmpty()); + result = getReverseScanResult(table, beforeFirstRow, + HConstants.CATALOG_FAMILY); + assertNull(result); // Test at first that first is returned - get = new Get(firstRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, firstRow, HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), firstRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), one)); // Test in between first and second that first is returned - get = new Get(beforeSecondRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, beforeSecondRow, HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), firstRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), one)); // Test at second make sure second is returned - get = new Get(secondRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, secondRow, HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), secondRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), two)); // Test in second and third, make sure second is returned - get = new Get(beforeThirdRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, beforeThirdRow, HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), secondRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), two)); // Test at third make sure third is returned - get = new Get(thirdRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, thirdRow, HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), thirdRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), three)); // Test in third and forth, make sure third is returned - get = new Get(beforeForthRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, beforeForthRow, HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), thirdRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), three)); // Test at forth make sure forth is returned - get = new Get(forthRow); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, forthRow, HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), forthRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), four)); // Test after forth make sure forth is returned - get = new Get(Bytes.add(forthRow, one)); - get.setClosestRowBefore(true); - get.addFamily(HConstants.CATALOG_FAMILY); - result = table.get(get); + result = getReverseScanResult(table, Bytes.add(forthRow, one), HConstants.CATALOG_FAMILY); assertTrue(result.containsColumn(HConstants.CATALOG_FAMILY, null)); assertTrue(Bytes.equals(result.getRow(), forthRow)); assertTrue(Bytes.equals(result.getValue(HConstants.CATALOG_FAMILY, null), four)); @@ -4293,6 +4266,17 @@ public class TestFromClientSide { } } + private Result getReverseScanResult(Table table, byte[] row, byte[] fam) throws IOException { + Scan scan = new Scan(row); + scan.setSmall(true); + scan.setReversed(true); + scan.setCaching(1); + scan.addFamily(fam); + try (ResultScanner scanner = table.getScanner(scan)) { + return scanner.next(); + } + } + /** * For HBASE-2156 * @throws Exception http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.java index d92d301..dbb1cd1 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.java @@ -85,7 +85,6 @@ public class TestFromClientSideNoCodec { // Check getRowOrBefore byte[] f = fs[0]; Get get = new Get(row); - get.setClosestRowBefore(true); get.addFamily(f); r = ht.get(get); assertTrue(r.toString(), r.containsColumn(f, f)); http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java index 6707354..14b43df 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java @@ -102,8 +102,6 @@ public class SimpleRegionObserver extends BaseRegionObserver { final AtomicInteger ctPreDeleted = new AtomicInteger(0); final AtomicInteger ctPrePrepareDeleteTS = new AtomicInteger(0); final AtomicInteger ctPostDeleted = new AtomicInteger(0); - final AtomicInteger ctPreGetClosestRowBefore = new AtomicInteger(0); - final AtomicInteger ctPostGetClosestRowBefore = new AtomicInteger(0); final AtomicInteger ctPreIncrement = new AtomicInteger(0); final AtomicInteger ctPreIncrementAfterRowLock = new AtomicInteger(0); final AtomicInteger ctPreAppend = new AtomicInteger(0); @@ -518,32 +516,6 @@ public class SimpleRegionObserver extends BaseRegionObserver { } @Override - public void preGetClosestRowBefore(final ObserverContext<RegionCoprocessorEnvironment> c, - final byte[] row, final byte[] family, final Result result) - throws IOException { - RegionCoprocessorEnvironment e = c.getEnvironment(); - assertNotNull(e); - assertNotNull(e.getRegion()); - assertNotNull(row); - assertNotNull(result); - if (ctBeforeDelete.get() > 0) { - ctPreGetClosestRowBefore.incrementAndGet(); - } - } - - @Override - public void postGetClosestRowBefore(final ObserverContext<RegionCoprocessorEnvironment> c, - final byte[] row, final byte[] family, final Result result) - throws IOException { - RegionCoprocessorEnvironment e = c.getEnvironment(); - assertNotNull(e); - assertNotNull(e.getRegion()); - assertNotNull(row); - assertNotNull(result); - ctPostGetClosestRowBefore.incrementAndGet(); - } - - @Override public Result preIncrement(final ObserverContext<RegionCoprocessorEnvironment> c, final Increment increment) throws IOException { ctPreIncrement.incrementAndGet(); @@ -940,14 +912,6 @@ public class SimpleRegionObserver extends BaseRegionObserver { return ctPostDeleted.get(); } - public int getCtPreGetClosestRowBefore() { - return ctPreGetClosestRowBefore.get(); - } - - public int getCtPostGetClosestRowBefore() { - return ctPostGetClosestRowBefore.get(); - } - public int getCtPreIncrement() { return ctPreIncrement.get(); } http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java index 418e2fc..470a453 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java @@ -33,7 +33,6 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; -import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.MetaTableAccessor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Delete; @@ -66,6 +65,8 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { private static final byte[] T35 = Bytes.toBytes("035"); private static final byte[] T40 = Bytes.toBytes("040"); + private static HBaseTestingUtility UTIL = new HBaseTestingUtility(); + @Test @@ -160,7 +161,7 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { tableb, tofindBytes, HConstants.NINES, false); LOG.info("find=" + new String(metaKey)); - Result r = mr.getClosestRowBefore(metaKey, HConstants.CATALOG_FAMILY); + Result r = UTIL.getClosestRowBefore(mr, metaKey, HConstants.CATALOG_FAMILY); if (answer == -1) { assertNull(r); return null; @@ -206,38 +207,38 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { p.add(c0, c0, T20); region.put(p); - Result r = region.getClosestRowBefore(T20, c0); + Result r = UTIL.getClosestRowBefore(region, T20, c0); assertTrue(Bytes.equals(T20, r.getRow())); Delete d = new Delete(T20); d.deleteColumn(c0, c0); region.delete(d); - r = region.getClosestRowBefore(T20, c0); + r = UTIL.getClosestRowBefore(region, T20, c0); assertTrue(Bytes.equals(T10, r.getRow())); p = new Put(T30); p.add(c0, c0, T30); region.put(p); - r = region.getClosestRowBefore(T30, c0); + r = UTIL.getClosestRowBefore(region, T30, c0); assertTrue(Bytes.equals(T30, r.getRow())); d = new Delete(T30); d.deleteColumn(c0, c0); region.delete(d); - r = region.getClosestRowBefore(T30, c0); + r = UTIL.getClosestRowBefore(region, T30, c0); assertTrue(Bytes.equals(T10, r.getRow())); - r = region.getClosestRowBefore(T31, c0); + r = UTIL.getClosestRowBefore(region, T31, c0); assertTrue(Bytes.equals(T10, r.getRow())); region.flush(true); // try finding "010" after flush - r = region.getClosestRowBefore(T30, c0); + r = UTIL.getClosestRowBefore(region, T30, c0); assertTrue(Bytes.equals(T10, r.getRow())); - r = region.getClosestRowBefore(T31, c0); + r = UTIL.getClosestRowBefore(region, T31, c0); assertTrue(Bytes.equals(T10, r.getRow())); // Put into a different column family. Should make it so I still get t10 @@ -245,16 +246,16 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { p.add(c1, c1, T20); region.put(p); - r = region.getClosestRowBefore(T30, c0); + r = UTIL.getClosestRowBefore(region, T30, c0); assertTrue(Bytes.equals(T10, r.getRow())); - r = region.getClosestRowBefore(T31, c0); + r = UTIL.getClosestRowBefore(region, T31, c0); assertTrue(Bytes.equals(T10, r.getRow())); region.flush(true); - r = region.getClosestRowBefore(T30, c0); + r = UTIL.getClosestRowBefore(region, T30, c0); assertTrue(Bytes.equals(T10, r.getRow())); - r = region.getClosestRowBefore(T31, c0); + r = UTIL.getClosestRowBefore(region, T31, c0); assertTrue(Bytes.equals(T10, r.getRow())); // Now try combo of memcache and mapfiles. Delete the t20 COLUMS[1] @@ -262,14 +263,14 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { d = new Delete(T20); d.deleteColumn(c1, c1); region.delete(d); - r = region.getClosestRowBefore(T30, c0); + r = UTIL.getClosestRowBefore(region, T30, c0); assertTrue(Bytes.equals(T10, r.getRow())); // Ask for a value off the end of the file. Should return t10. - r = region.getClosestRowBefore(T31, c0); + r = UTIL.getClosestRowBefore(region, T31, c0); assertTrue(Bytes.equals(T10, r.getRow())); region.flush(true); - r = region.getClosestRowBefore(T31, c0); + r = UTIL.getClosestRowBefore(region, T31, c0); assertTrue(Bytes.equals(T10, r.getRow())); // Ok. Let the candidate come out of hfile but have delete of @@ -279,7 +280,7 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { region.put(p); d = new Delete(T10); d.deleteColumn(c1, c1); - r = region.getClosestRowBefore(T12, c0); + r = UTIL.getClosestRowBefore(region, T12, c0); assertTrue(Bytes.equals(T11, r.getRow())); } finally { if (region != null) { @@ -316,13 +317,13 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { region.put(p); // try finding "035" - Result r = region.getClosestRowBefore(T35, c0); + Result r = UTIL.getClosestRowBefore(region, T35, c0); assertTrue(Bytes.equals(T30, r.getRow())); region.flush(true); // try finding "035" - r = region.getClosestRowBefore(T35, c0); + r = UTIL.getClosestRowBefore(region, T35, c0); assertTrue(Bytes.equals(T30, r.getRow())); p = new Put(T20); @@ -330,13 +331,13 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase { region.put(p); // try finding "035" - r = region.getClosestRowBefore(T35, c0); + r = UTIL.getClosestRowBefore(region, T35, c0); assertTrue(Bytes.equals(T30, r.getRow())); region.flush(true); // try finding "035" - r = region.getClosestRowBefore(T35, c0); + r = UTIL.getClosestRowBefore(region, T35, c0); assertTrue(Bytes.equals(T30, r.getRow())); } finally { if (region != null) { http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMinVersions.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMinVersions.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMinVersions.java index 7f8a20b..cd84eac 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMinVersions.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMinVersions.java @@ -89,20 +89,20 @@ public class TestMinVersions { // now make sure that getClosestBefore(...) get can // rows that would be expired without minVersion. // also make sure it gets the latest version - Result r = region.getClosestRowBefore(T1, c0); + Result r = hbu.getClosestRowBefore(region, T1, c0); checkResult(r, c0, T4); - r = region.getClosestRowBefore(T2, c0); + r = hbu.getClosestRowBefore(region, T2, c0); checkResult(r, c0, T4); // now flush/compact region.flush(true); region.compact(true); - r = region.getClosestRowBefore(T1, c0); + r = hbu.getClosestRowBefore(region, T1, c0); checkResult(r, c0, T4); - r = region.getClosestRowBefore(T2, c0); + r = hbu.getClosestRowBefore(region, T2, c0); checkResult(r, c0, T4); } finally { HBaseTestingUtility.closeRegionAndWAL(region); http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java index bd8cf64..8fd3f67 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java @@ -879,16 +879,6 @@ public class TestWithDisabledAuthorization extends SecureTestUtil { } }, SUPERUSER, USER_ADMIN, USER_RW, USER_RO, USER_OWNER, USER_CREATE, USER_QUAL, USER_NONE); - // preGetClosestRowBefore - verifyAllowed(new AccessTestAction() { - @Override - public Object run() throws Exception { - ACCESS_CONTROLLER.preGetClosestRowBefore(ObserverContext.createAndPrepare(RCP_ENV, null), - TEST_ROW, TEST_FAMILY, new Result()); - return null; - } - }, SUPERUSER, USER_ADMIN, USER_RW, USER_RO, USER_OWNER, USER_CREATE, USER_QUAL, USER_NONE); - // preGetOp verifyAllowed(new AccessTestAction() { @Override http://git-wip-us.apache.org/repos/asf/hbase/blob/3b6db268/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 7b0ca04..c96e1fd 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 @@ -1610,25 +1610,12 @@ public class ThriftServerRunner implements Runnable { } } - @Deprecated - @Override - public List<TCell> getRowOrBefore(ByteBuffer tableName, ByteBuffer row, - ByteBuffer family) throws IOError { - try { - Result result = getRowOrBefore(getBytes(tableName), getBytes(row), getBytes(family)); - return ThriftUtilities.cellFromHBase(result.rawCells()); - } catch (IOException e) { - LOG.warn(e.getMessage(), e); - throw new IOError(Throwables.getStackTraceAsString(e)); - } - } - @Override public TRegionInfo getRegionInfo(ByteBuffer searchRow) throws IOError { try { byte[] row = getBytes(searchRow); - Result startRowResult = - getRowOrBefore(TableName.META_TABLE_NAME.getName(), row, HConstants.CATALOG_FAMILY); + Result startRowResult = getReverseScanResult(TableName.META_TABLE_NAME.getName(), row, + HConstants.CATALOG_FAMILY); if (startRowResult == null) { throw new IOException("Cannot find row in "+ TableName.META_TABLE_NAME+", row=" @@ -1662,7 +1649,8 @@ public class ThriftServerRunner implements Runnable { } } - private Result getRowOrBefore(byte[] tableName, byte[] row, byte[] family) throws IOException { + private Result getReverseScanResult(byte[] tableName, byte[] row, byte[] family) + throws IOException { Scan scan = new Scan(row); scan.setReversed(true); scan.addFamily(family);
