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

Reply via email to