You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Amitanand Aiyer (JIRA)" <ji...@apache.org> on 2013/05/01 19:44:16 UTC
[jira] [Created] (HBASE-8476) locateRegionInMeta should check the
cache before doing the prefetch
Amitanand Aiyer created HBASE-8476:
--------------------------------------
Summary: locateRegionInMeta should check the cache before doing the prefetch
Key: HBASE-8476
URL: https://issues.apache.org/jira/browse/HBASE-8476
Project: HBase
Issue Type: Bug
Reporter: Amitanand Aiyer
Assignee: Amitanand Aiyer
Priority: Minor
Fix For: 0.89-fb, 0.95.2
locateRegionInMeta uses a regionLockObject to synchronize all accesses to prefetch the RegionCache.
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.
if (useCache) {
location = getCachedLocation(tableName, row);
if (location != null) {
return location;
}
} else {
deleteCachedLocation(tableName, row);
}
However, for this to be effective, we need to check the cache as soon as we grab the lock; before doing the prefetch. Checking the cache after doing the prefetch does not help the current thread, in case another thread has done the prefetch.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira