You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Reid Chan (Jira)" <ji...@apache.org> on 2021/07/23 02:39:00 UTC
[jira] [Resolved] (HBASE-26094) In branch-1 L2 BC should not be the
victimhandler of L1 BC when using combined BC
[ https://issues.apache.org/jira/browse/HBASE-26094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Reid Chan resolved HBASE-26094.
-------------------------------
Fix Version/s: 1.7.2
Hadoop Flags: Reviewed
Resolution: Fixed
> In branch-1 L2 BC should not be the victimhandler of L1 BC when using combined BC
> ---------------------------------------------------------------------------------
>
> Key: HBASE-26094
> URL: https://issues.apache.org/jira/browse/HBASE-26094
> Project: HBase
> Issue Type: Bug
> Components: BlockCache
> Affects Versions: 1.7.0
> Reporter: Yutong Xiao
> Assignee: Yutong Xiao
> Priority: Major
> Fix For: 1.7.2
>
>
> Currently in branch-1, the block cache initialisation is:
> {code:java}
> LruBlockCache l1 = getL1(conf);
> // blockCacheDisabled is set as a side-effect of getL1Internal(), so check it again after the call.
> if (blockCacheDisabled) return null;
> BlockCache l2 = getL2(conf);
> if (l2 == null) {
> GLOBAL_BLOCK_CACHE_INSTANCE = l1;
> } else {
> boolean useExternal = conf.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);
> boolean combinedWithLru = conf.getBoolean(BUCKET_CACHE_COMBINED_KEY,
> DEFAULT_BUCKET_CACHE_COMBINED);
> if (useExternal) {
> GLOBAL_BLOCK_CACHE_INSTANCE = new InclusiveCombinedBlockCache(l1, l2);
> } else {
> if (combinedWithLru) {
> GLOBAL_BLOCK_CACHE_INSTANCE = new CombinedBlockCache(l1, l2);
> } else {
> // L1 and L2 are not 'combined'. They are connected via the LruBlockCache victimhandler
> // mechanism. It is a little ugly but works according to the following: when the
> // background eviction thread runs, blocks evicted from L1 will go to L2 AND when we get
> // a block from the L1 cache, if not in L1, we will search L2.
> GLOBAL_BLOCK_CACHE_INSTANCE = l1;
> }
> }
> l1.setVictimCache(l2);
> }
> {code}
> As the code above, L2 will always be the victimhandler of L1, no matter if we use combined blockcache or not. But as logic (in master & branch-2) L2 should not be the victimhandler of L1 when using combined BC. We should set the victimhandler only when we use InclusiveConbinedBC or we do not use CombinedBC.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)