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

Nick Dimiduk reassigned HBASE-28187:
------------------------------------

    Assignee: guluo

> NPE when flushing a non-existing column family
> ----------------------------------------------
>
>                 Key: HBASE-28187
>                 URL: https://issues.apache.org/jira/browse/HBASE-28187
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 2.6.0, 2.4.17, 2.5.5
>            Reporter: Ke Han
>            Assignee: guluo
>            Priority: Major
>              Labels: pull-request-available
>
> Flush a columnfamily that doesn't exist in the table will cause NPE ERROR in 
> both shell and the HMaster logs.
> h1. Reproduce
> Start up HBase 2.5.9 cluster, executing the following commands with hbase 
> shell in HMaster node will lead to NPE. (Can be reproduced determinstically)
> {code:java}
> create 'table', {NAME => 'cf1', VERSIONS => 2, COMPRESSION => 'GZ', 
> BLOOMFILTER => 'ROWCOL'}, {NAME => 'cf2', VERSIONS => 4, COMPRESSION => 
> 'NONE', BLOOMFILTER => 'ROWCOL'}
> incr 'table', 'row1', 'cf1:cell', 2
> flush 'table', 'cf3'{code}
> The shell outputs
> {code:java}
> hbase:006:0> create 'table', {NAME => 'cf1', VERSIONS => 2, COMPRESSION => 
> 'GZ', BLOOMFILTER => 'ROWCOL'}, {NAME => 'cf2', VERSIONS => 4, COMPRESSION => 
> 'NONE', BLOOMFILTER => 'ROWCOL'}
> Created table table
> Took 2.1238 seconds                                                           
>                                                                       
> => Hbase::Table - table
> hbase:007:0> 
> hbase:008:0> incr 'table', 'row1', 'cf1:cell', 2
> COUNTER VALUE = 2
> Took 0.0131 seconds                                                           
>                                                                       
> hbase:009:0> 
> hbase:010:0> flush 'table', 'cf3'
> ERROR: java.io.IOException: java.lang.NullPointerException
>  at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:479)
>  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: 
> org.apache.hadoop.hbase.errorhandling.ForeignException$ProxyThrowable: 
> java.lang.NullPointerException
>  at 
> org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager$FlushTableSubprocedurePool.waitForOutstandingTasks(RegionServerFlushTableProcedureManager.java:274)
>  at 
> org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.flushRegions(FlushTableSubprocedure.java:115)
>  at 
> org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.acquireBarrier(FlushTableSubprocedure.java:126)
>  at org.apache.hadoop.hbase.procedure.Subprocedure.call(Subprocedure.java:160)
>  at org.apache.hadoop.hbase.procedure.Subprocedure.call(Subprocedure.java:46)
>  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>  at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>  at java.lang.Thread.run(Thread.java:750)
> For usage try 'help "flush"'
> Took 12.1713 seconds                                                         
> {code}
>  
> According to the _flush (flush.rb)_ command specification, user can flush a 
> specific column family.
> {code:java}
> Flush all regions in passed table or pass a region row to
> flush an individual region or a region server name whose format
> is 'host,port,startcode', to flush all its regions.
> You can also flush a single column family for all regions within a table,
> or for an specific region only.
> For example:
>   hbase> flush 'TABLENAME'
>   hbase> flush 'TABLENAME','FAMILYNAME' {code}
> In the above case, *cf3* an incorrect input (non-existing column family). If 
> user tries to flush it, the expected output is:
>  # HBase rejects this operation
>  # returns a prompt saying the column family doesn't exist 
> {_}"{_}{_}{+}ERROR: Unknown CF...{+}".{_}
>  
> In 2.6.0, the flush command would stuck and run into NPE
> {code:java}
> java.lang.NullPointerException: null
>         at 
> org.apache.hadoop.hbase.regionserver.HRegion.logFatLineOnFlush(HRegion.java:2724)
>  ~[hbase-server-2.6.0.jar:2.6.0]
>         at 
> org.apache.hadoop.hbase.regionserver.HRegion.internalPrepareFlushCache(HRegion.java:2640)
>  ~[hbase-server-2.6.0.jar:2.6.0]
>         at 
> org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:2587)
>  ~[hbase-server-2.6.0.jar:2.6.0] {code}
> h1. Root Cause
> There's a missing check for the whether the target flushing columnfamily 
> exists.



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

Reply via email to