[
https://issues.apache.org/jira/browse/HBASE-17434?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15815057#comment-15815057
]
Eshcar Hillel commented on HBASE-17434:
---------------------------------------
With the possibility of non-atomic initialization of a LinkedList I added the
volatile + an explanation of why it is needed for each of the variables.
I wonder -- could it be that there are other variables in the code that have
the same problem? might be worth checking ...
With respect to the interleaving scenario - I would not call these traps.
CompctionPipeline is a concurrent data structure that was design for a specific
purpose; the user should understand its guarantees. One way to show that the
implementation is correct (linearizable) is to find a point in time during the
execution of the operation in which it can be linearized. In the above scenario
there is a point in time during the execution of the isEmpty() where the
pipeline is empty so the result is valid.
> 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-V05.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)