[
https://issues.apache.org/jira/browse/HBASE-27973?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Bryan Beaudreault resolved HBASE-27973.
---------------------------------------
Resolution: Duplicate
> NPE in QuotaCache if Table is dropped from cluster
> --------------------------------------------------
>
> Key: HBASE-27973
> URL: https://issues.apache.org/jira/browse/HBASE-27973
> Project: HBase
> Issue Type: Bug
> Reporter: Bryan Beaudreault
> Priority: Major
>
> {code:java}
> java.lang.NullPointerException: Cannot invoke
> "org.apache.hadoop.hbase.client.RegionStatesCount.getOpenRegions()" because
> the return value of "java.util.Map.get(Object)" is null
> at
> org.apache.hadoop.hbase.quotas.QuotaCache$QuotaRefresherChore.updateQuotaFactors(QuotaCache.java:378)
> ~[hbase.jar]
> at
> org.apache.hadoop.hbase.quotas.QuotaCache$QuotaRefresherChore.chore(QuotaCache.java:224)
> ~[hbase.jar]
> at org.apache.hadoop.hbase.ScheduledChore.run(ScheduledChore.java:161)
> ~[hbase.jar]
> at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
> ~[?:?]
> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
>
> at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
> ~[?:?]
> at
> org.apache.hadoop.hbase.JitterScheduledThreadPoolExecutorImpl$JitteredRunnableScheduledFuture.run(JitterScheduledThreadPoolExecutorImpl.java:107)
> ~[hbase.jar]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> ~[?:?]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> ~[?:?]
> at java.lang.Thread.run(Thread.java:833) ~[?:?] {code}
>
> This is on 2.5.2, so the line numbers don't perfectly match with current
> branch-2. But the problem is
> [here|https://github.com/apache/hbase/blob/branch-2/hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/QuotaCache.java#L376].
> We may have cached a TableName in tableQuotaCache, and the table may have
> since been dropped from the cluster. In which case, tableRegionStatesCount
> which comes from ClusterMetrics, will not have that table.
> We need to protect the lookup with a containsKey or null check, rather than
> directly call getOpenRegions() on the result. It probably makes sense to
> remove the tableName from the tableQuotaCache in this case.
> While here, I think catching IOException in that block no longer makes sense.
> We can probably remove after verifying.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)