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

Duo Zhang commented on HBASE-17434:
-----------------------------------

And have you heared about the DCL problem in java? After java 1.5, the problem 
can be solved by adding volatile.

https://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java

And I think the same thing could happen here. If you do not declare 
readOnlyCopy as volatile, the assign could happen before the initialization of 
the LinkedList. And the reader thread may get a uninitilaized LinkedList and 
cause strange problems.

Thanks.

> New Synchronization Scheme for Compaction Pipeline
> --------------------------------------------------
>
>                 Key: HBASE-17434
>                 URL: https://issues.apache.org/jira/browse/HBASE-17434
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Eshcar Hillel
>            Assignee: Eshcar Hillel
>         Attachments: HBASE-17434-V01.patch, HBASE-17434-V02.patch, 
> HBASE-17434-V03.patch, HBASE-17434-V04.patch, HBASE-17434.master.001.patch
>
>
> A new copyOnWrite synchronization scheme is introduced for the compaction 
> pipeline.
> The new scheme is better since it removes the lock from getSegments() which 
> is invoked in every get and scan operation, and it reduces the number of 
> LinkedList objects that are created at runtime, thus can reduce GC (not by 
> much, but still...).
> In addition, it fixes the method getTailSize() in compaction pipeline. This 
> method creates a MemstoreSize object which comprises the data size and the 
> overhead size of the segment and needs to be atomic.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to