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

Arjen Roodselaar updated HBASE-10205:
-------------------------------------

    Description: 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.  
(was: 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 'bucketList'. At the same time another WriterThread might call 
BucketAllocator.allocateBlock(), which may call BucketSizeInfo.allocate() and 
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.)

> ConcurrentModificationException in BucketAllocator
> --------------------------------------------------
>
>                 Key: HBASE-10205
>                 URL: https://issues.apache.org/jira/browse/HBASE-10205
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 0.89-fb
>            Reporter: Arjen Roodselaar
>            Assignee: Arjen Roodselaar
>            Priority: Minor
>             Fix For: 0.89-fb
>
>
> 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