Index: src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (revision 1487758) +++ src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (working copy) @@ -1006,23 +1006,26 @@ // region at the same time. The first will load the meta region and // the second will use the value that the first one found. synchronized (regionLockObject) { - // If the parent table is META, we may want to pre-fetch some - // region info into the global region cache for this table. - if (Bytes.equals(parentTable, HConstants.META_TABLE_NAME) && - (getRegionCachePrefetch(tableName)) ) { - prefetchRegionCache(tableName, row); - } - // Check the cache again for a hit in case some other thread made the - // same query while we were waiting on the lock. If not supposed to - // be using the cache, delete any existing cached location so it won't - // interfere. + // same query while we were waiting on the lock. if (useCache) { location = getCachedLocation(tableName, row); if (location != null) { return location; } + // If the parent table is META, we may want to pre-fetch some + // region info into the global region cache for this table. + if (Bytes.equals(parentTable, HConstants.META_TABLE_NAME) + && (getRegionCachePrefetch(tableName))) { + prefetchRegionCache(tableName, row); + } + location = getCachedLocation(tableName, row); + if (location != null) { + return location; + } } else { + // If we are not supposed to be using the cache, delete any existing cached location + // so it won't interfere. deleteCachedLocation(tableName, row); }