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

Arjen Roodselaar commented on HBASE-10205:
------------------------------------------

I took the Chunhui's patch, but made some additional changes to allow 
parallelism in the BucketAllocator on the BucketSizeInfo level. I think 
synchronization can be removed from BucketAllocator.allocateBlock() and 
BucketAllocator.freeBlock(), but need to verify this under some stress. I will 
be running a load test over the next 24 hours and report back.

> ConcurrentModificationException in BucketAllocator
> --------------------------------------------------
>
>                 Key: HBASE-10205
>                 URL: https://issues.apache.org/jira/browse/HBASE-10205
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver
>    Affects Versions: 0.89-fb
>            Reporter: Arjen Roodselaar
>            Assignee: Arjen Roodselaar
>            Priority: Minor
>             Fix For: 0.89-fb, 0.99.0
>
>         Attachments: hbase-10205-trunk.patch
>
>
> The BucketCache WriterThread calls BucketCache.freeSpace() upon draining the 
> RAM queue containing entries to be cached. freeSpace() in turn calls 
> BucketSizeInfo.statistics() through BucketAllocator.getIndexStatistics(), 
> which iterates over 'bucketList'. At the same time another WriterThread might 
> call BucketAllocator.allocateBlock(), which may call 
> BucketSizeInfo.allocateBlock(), add a bucket to 'bucketList' and consequently 
> cause a ConcurrentModificationException. Calls to 
> BucketAllocator.allocateBlock() are synchronized, but calls to 
> BucketAllocator.getIndexStatistics() are not, which allows this race to occur.



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

Reply via email to