[ https://issues.apache.org/jira/browse/HBASE-15691?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16056865#comment-16056865 ]
chunhui shen commented on HBASE-15691: -------------------------------------- {code:java} + public synchronized void instantiateBucket(Bucket b) { + private synchronized void removeBucket(Bucket b) { + public synchronized IndexStatistics statistics() { {code} The synchronized methods are all not on the client-read-path, thus there should be no perf implications. I haven't found any possibility about deadlock, because won't try to fetch any lock inside these methods and their child methods.(It's able to read all the process inside the methods now :D) +1 on the patch > Port HBASE-10205 (ConcurrentModificationException in BucketAllocator) to > branch-1 > --------------------------------------------------------------------------------- > > Key: HBASE-15691 > URL: https://issues.apache.org/jira/browse/HBASE-15691 > Project: HBase > Issue Type: Sub-task > Affects Versions: 1.3.0 > Reporter: Andrew Purtell > Assignee: Stephen Yuan Jiang > Fix For: 1.3.2, 1.4.1, 1.5.0, 1.2.7 > > Attachments: HBASE-15691-branch-1.patch, HBASE-15691.v2-branch-1.patch > > > HBASE-10205 solves the following problem: > " > 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. > " > However, for some unknown reason, HBASE-10205 was only committed to master > (2.0 and beyond) and 0.98 branches only. To preserve continuity we should > commit it to branch-1. -- This message was sent by Atlassian JIRA (v6.4.14#64029)