[ 
https://issues.apache.org/jira/browse/HBASE-14189?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15001597#comment-15001597
 ] 

Heng Chen commented on HBASE-14189:
-----------------------------------

{quote}
A change of boolean type to Boolean will do the work of new Enum no? When on 
the table or CF the setting is no set, we can avoid serialize that attribute 
into HCD?
{quote}

Sounds good!  I will do it

> CF Level BC setting should override global one.
> -----------------------------------------------
>
>                 Key: HBASE-14189
>                 URL: https://issues.apache.org/jira/browse/HBASE-14189
>             Project: HBase
>          Issue Type: Improvement
>          Components: BlockCache
>    Affects Versions: 2.0.0
>            Reporter: Heng Chen
>            Assignee: Heng Chen
>         Attachments: HBASE-14189.patch, HBASE-14189_v1.patch, 
> HBASE-14189_v2.patch, HBASE-14189_v3.patch, HBASE-14189_v4.patch, 
> HBASE-14189_v5.patch
>
>
> The original description is ambiguous. I think i will rewrite it.
> Let's see {{BlockCache}} constructor firstly
> {code}
>   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)
>      );
>   }
> {code}
> 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}}
> {code}
>   /**
>    * 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;
> {code}
> 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.
> {code}
> conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY,
>             DEFAULT_CACHE_DATA_ON_WRITE) || family.isCacheDataOnWrite()
> {code}
> IMO we should use CF Level setting to override global setting. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to