Index: java/org/apache/hadoop/hbase/regionserver/HRegionServer.java =================================================================== --- java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (revision 736456) +++ java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (working copy) @@ -32,6 +32,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; @@ -209,6 +210,12 @@ final Map scanners = new ConcurrentHashMap(); + +//New + Map> cache = null; + + + /** * Starts a HRegionServer at the default location * @param conf @@ -290,6 +297,11 @@ for(int i = 0; i < nbBlocks; i++) { reservedSpace.add(new byte[DEFAULT_SIZE_RESERVATION_BLOCK]); } + + this.cache = new HashMap>(); + + + } /** @@ -1525,11 +1537,29 @@ } HRegion region = getRegion(regionName); - HbaseMapWritable result = - region.getFull(row, columnSet, + + // New + HbaseMapWritable result = null; + HStoreKey key = new HStoreKey(row, ts, region.getRegionInfo()); + if(cache.containsKey(key)){ + if (LOG.isDebugEnabled()) { + LOG.debug("Getting from Cache"); + } + result = cache.get(key); + } else{ + + //Old + result = region.getFull(row, columnSet, ts, numVersions, getLockFromId(lockId)); if (result == null || result.isEmpty()) return null; + + if (LOG.isDebugEnabled()) { + LOG.debug("Putting in cache"); + } + cache.put(key, result); + } + return new RowResult(row, result); } catch (Throwable t) { throw convertThrowableToIOE(cleanup(t));