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

Duo Zhang commented on HBASE-29795:
-----------------------------------

Obvious the implementation of FilePathStringPool has race condition, as there 
is no lock protection in the remove method, and there is also no lock 
protection in encode method when we calculate the id and put it into the map...

This is really not a good implementation, as we even need to use reference 
counting to determine whether we need to remove something from the pool? 
Usually this should be done using weak/soft reference.

[~wchevreuil] FYI.

> RegionServer abort because of NPE when closing compacted store file
> -------------------------------------------------------------------
>
>                 Key: HBASE-29795
>                 URL: https://issues.apache.org/jira/browse/HBASE-29795
>             Project: HBase
>          Issue Type: Bug
>          Components: Compaction, regionserver
>            Reporter: Duo Zhang
>            Priority: Major
>
> {noformat}
> 2025-12-26T13:19:02,668 ERROR 
> [RS_COMPACTED_FILES_DISCHARGER-regionserver/data01:16020-5] 
> regionserver.HStore: Exception while trying to close the compacted store file 
> hdfs://home/hbase/data/default/IntegrationTestBigLinkedList/e6d76396ff294910dc1f1af9e0169ec2/meta/9d8d39b8b9cd4f0993331ee8338dd4c2.a412dc08f446a90220a53b2052d5fa84
> java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because 
> the return value of 
> "org.apache.hadoop.hbase.io.hfile.BlockCacheKey.getHfileName()" is null
>         at 
> org.apache.hadoop.hbase.io.hfile.LruBlockCache.evictBlocksByHfileName(LruBlockCache.java:581)
>         at 
> org.apache.hadoop.hbase.io.hfile.CombinedBlockCache.evictBlocksByHfileName(CombinedBlockCache.java:159)
>         at 
> org.apache.hadoop.hbase.io.HalfStoreFileReader.lambda$close$0(HalfStoreFileReader.java:372)
>         at java.base/java.util.Optional.ifPresent(Optional.java:178)
>         at 
> org.apache.hadoop.hbase.io.HalfStoreFileReader.close(HalfStoreFileReader.java:368)
>         at 
> org.apache.hadoop.hbase.regionserver.HStore.removeCompactedfiles(HStore.java:2306)
>         at 
> org.apache.hadoop.hbase.regionserver.HStore.closeAndArchiveCompactedFiles(HStore.java:2268)
>         at 
> org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.process(CompactedHFilesDischargeHandler.java:41)
>         at 
> org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:104)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>         at java.base/java.lang.Thread.run(Thread.java:840)
> 2025-12-26T13:19:02,672 ERROR 
> [RS_COMPACTED_FILES_DISCHARGER-regionserver/data01:16020-5] 
> regionserver.HStore: Exception while trying to close the compacted store file 
> hdfs://home/hbase/data/default/IntegrationTestBigLinkedList/e6d76396ff294910dc1f1af9e0169ec2/meta/b1008c759d3340008b73b977a632f195.a412dc08f446a90220a53b2052d5fa84
> java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because 
> the return value of 
> "org.apache.hadoop.hbase.io.hfile.BlockCacheKey.getHfileName()" is null
>         at 
> org.apache.hadoop.hbase.io.hfile.LruBlockCache.evictBlocksByHfileName(LruBlockCache.java:581)
>         at 
> org.apache.hadoop.hbase.io.hfile.CombinedBlockCache.evictBlocksByHfileName(CombinedBlockCache.java:159)
>         at 
> org.apache.hadoop.hbase.io.HalfStoreFileReader.lambda$close$0(HalfStoreFileReader.java:372)
>         at java.base/java.util.Optional.ifPresent(Optional.java:178)
>         at 
> org.apache.hadoop.hbase.io.HalfStoreFileReader.close(HalfStoreFileReader.java:368)
>         at 
> org.apache.hadoop.hbase.regionserver.HStore.removeCompactedfiles(HStore.java:2306)
>         at 
> org.apache.hadoop.hbase.regionserver.HStore.closeAndArchiveCompactedFiles(HStore.java:2268)
>         at 
> org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.process(CompactedHFilesDischargeHandler.java:41)
>         at 
> org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:104)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>         at java.base/java.lang.Thread.run(Thread.java:840)
> 2025-12-26T13:19:02,678 ERROR 
> [RS_COMPACTED_FILES_DISCHARGER-regionserver/data01:16020-5] 
> regionserver.HStore: Exception while trying to close the compacted store file 
> hdfs://home/hbase/data/default/IntegrationTestBigLinkedList/e6d76396ff294910dc1f1af9e0169ec2/meta/0a82a3668506437494809649b49bad8e.a412dc08f446a90220a53b2052d5fa84
> java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because 
> the return value of 
> "org.apache.hadoop.hbase.io.hfile.BlockCacheKey.getHfileName()" is null
>         at 
> org.apache.hadoop.hbase.io.hfile.LruBlockCache.evictBlocksByHfileName(LruBlockCache.java:581)
>         at 
> org.apache.hadoop.hbase.io.hfile.CombinedBlockCache.evictBlocksByHfileName(CombinedBlockCache.java:159)
>         at 
> org.apache.hadoop.hbase.io.HalfStoreFileReader.lambda$close$0(HalfStoreFileReader.java:372)
>         at java.base/java.util.Optional.ifPresent(Optional.java:178)
>         at 
> org.apache.hadoop.hbase.io.HalfStoreFileReader.close(HalfStoreFileReader.java:368)
>         at 
> org.apache.hadoop.hbase.regionserver.HStore.removeCompactedfiles(HStore.java:2306)
>         at 
> org.apache.hadoop.hbase.regionserver.HStore.closeAndArchiveCompactedFiles(HStore.java:2268)
>         at 
> org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.process(CompactedHFilesDischargeHandler.java:41)
>         at 
> org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:104)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>         at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>         at java.base/java.lang.Thread.run(Thread.java:840)
> {noformat}



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

Reply via email to