hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eshcar Hillel (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-17434) New Synchronization Scheme for Compaction Pipeline
Date Tue, 10 Jan 2017 14:12:58 GMT

    [ 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

View raw message