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 12:21:58 GMT

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

Eshcar Hillel commented on HBASE-17434:

Java does not have pointers. It has primitive variables and reference variable. (some say
this is just semantics, ...)
We do not need to ensure happens-before relationship here. This should be handled at higher
level. Can you think of a scenario where this can be a problem?
The way volatile ensures happens-before is by using memory fences, and we already have them
in the locks. And since this variable is always updated at the context of a lock its value
is not stall  for too long.

Having said that, if this is a blocker for the Jira then I don't mind adding the volatile.

I value these discussions because it's important to understand why we do things.
So thanks again for all comments.

> 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

View raw message