Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Invalid
-
2.0.0
-
None
-
None
-
14178
Description
The original description is ambiguous. I think i will rewrite it.
Let's see BlockCache constructor firstly
public CacheConfig(Configuration conf, HColumnDescriptor family) { this(CacheConfig.instantiateBlockCache(conf), family.isBlockCacheEnabled(), family.isInMemory(), // For the following flags we enable them regardless of per-schema settings // if they are enabled in the global configuration. conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_DATA_ON_WRITE) || family.isCacheDataOnWrite(), conf.getBoolean(CACHE_INDEX_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_INDEXES_ON_WRITE) || family.isCacheIndexesOnWrite(), conf.getBoolean(CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_BLOOMS_ON_WRITE) || family.isCacheBloomsOnWrite(), conf.getBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, DEFAULT_EVICT_ON_CLOSE) || family.isEvictBlocksOnClose(), conf.getBoolean(CACHE_DATA_BLOCKS_COMPRESSED_KEY, DEFAULT_CACHE_DATA_COMPRESSED), conf.getBoolean(PREFETCH_BLOCKS_ON_OPEN_KEY, DEFAULT_PREFETCH_ON_OPEN) || family.isPrefetchBlocksOnOpen(), conf.getBoolean(HColumnDescriptor.CACHE_DATA_IN_L1, HColumnDescriptor.DEFAULT_CACHE_DATA_IN_L1) || family.isCacheDataInL1(), conf.getBoolean(DROP_BEHIND_CACHE_COMPACTION_KEY,DROP_BEHIND_CACHE_COMPACTION_DEFAULT) ); }
If we dig in it, we will see CacheConfig.cacheDataOnRead is used to accept family.isBlockCacheEnabled().
I think it is confused as comments about cacheDataOnRead
/** * Whether blocks should be cached on read (default is on if there is a * cache but this can be turned off on a per-family or per-request basis). * If off we will STILL cache meta blocks; i.e. INDEX and BLOOM types. * This cannot be disabled. */ private boolean cacheDataOnRead;
So i think we should use another variable to represent for family.isBlockCacheEnabled().
The secondary point is we use 'or' to decide cacheDataOnWrite is on/off when both CF and global has this setting.
conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_DATA_ON_WRITE) || family.isCacheDataOnWrite()
IMO we should use CF Level setting to override global setting.
Attachments
Attachments
Issue Links
- links to