[ 
https://issues.apache.org/jira/browse/HBASE-30192?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HBASE-30192:
-----------------------------------
    Labels: pull-request-available  (was: )

> Shell-set CF settings skip sanity checks
> ----------------------------------------
>
>                 Key: HBASE-30192
>                 URL: https://issues.apache.org/jira/browse/HBASE-30192
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Junegunn Choi
>            Assignee: Junegunn Choi
>            Priority: Major
>              Labels: pull-request-available
>
> h2. Problem
> Since HBASE-20819 the shell writes CF {{CONFIGURATION}} into the values map.
> {{ColumnFamilyDescriptor.getConfigurationValue}} reads only the legacy 
> configuration map, so {{TableDescriptorChecker.checkCompactionPolicy}} 
> (compaction-policy class, blocking storefile count) never sees shell-set 
> values. A FIFO policy created from the shell with default TTL is accepted 
> when it should be rejected.
> Same root cause as HBASE-29314 / HBASE-30117, which fixed the map-reading 
> sites but missed the per-key reader.
> h2. Steps to reproduce (hbase shell)
> Start the shell and create a table with the FIFO compaction policy and a 
> default TTL (FOREVER).
> h3. Without the patch
> {noformat}
> hbase:001:0> create 'fifo_test', { NAME => 'cf', CONFIGURATION => { 
> 'hbase.hstore.defaultengine.compactionpolicy.class' => 
> 'org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy' } }
> Created table fifo_test
> {noformat}
>  - Table is created. TheĀ FIFO checks are skipped.
> h3. With the patch
> {noformat}
> hbase:001:0> create 'fifo_test', { NAME => 'cf', CONFIGURATION => { 
> 'hbase.hstore.defaultengine.compactionpolicy.class' => 
> 'org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy' } }
> ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Default TTL is not 
> supported for FIFO compaction Set hbase.table.sanity.checks to false at conf 
> or table descriptor if you want to bypass sanity checks
>       at 
> org.apache.hadoop.hbase.util.TableDescriptorChecker.warnOrThrowExceptionForFailure(TableDescriptorChecker.java:365)
>       at 
> org.apache.hadoop.hbase.util.TableDescriptorChecker.warnOrThrowExceptionForFailure(TableDescriptorChecker.java:382)
>       at 
> org.apache.hadoop.hbase.util.TableDescriptorChecker.checkCompactionPolicy(TableDescriptorChecker.java:261)
>       at 
> org.apache.hadoop.hbase.util.TableDescriptorChecker.sanityCheck(TableDescriptorChecker.java:139)
>       at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:2511)
>       at 
> org.apache.hadoop.hbase.master.MasterRpcServices.createTable(MasterRpcServices.java:792)
>       at 
> org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
>       at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:461)
>       at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
>       at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:102)
>       at org.apache.hadoop.hbase.ipc.RpcHandler.run(RpcHandler.java:82)
> Caused by: java.io.IOException: Default TTL is not supported for FIFO 
> compaction
>       at 
> org.apache.hadoop.hbase.util.TableDescriptorChecker.lambda$checkCompactionPolicy$5(TableDescriptorChecker.java:293)
>       at 
> org.apache.hadoop.hbase.util.TableDescriptorChecker.warnOrThrowExceptionForFailure(TableDescriptorChecker.java:380)
>       ... 9 more
> {noformat}
>  - Rejected as expected.
> h2. Fix
> {{getConfigurationValue}} falls back to the values map (values win on 
> collision).
> h2. Other affected sites
> {{CustomCellTieredUtils.checkForModifyTable}} (custom-tiering feature branch, 
> HBASE-29427) reads the same accessor for the store-engine class and tiering 
> qualifier, so it has the identical bug on the alter/modify path and is fixed 
> by the same change.
> h2. Follow-up (separate issue)
> The values/configuration duality is the real defect. Long-term: make 
> read-both the only sanctioned CF read path and deprecate the standalone 
> configuration accessors. {{table_conf_unset}} is already an alias of 
> {{{}table_att_unset{}}}.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to