[
https://issues.apache.org/jira/browse/HBASE-17434?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15805653#comment-15805653
]
Ted Yu commented on HBASE-17434:
--------------------------------
One difference between Eshcar's patch and mine is that her patch makes the copy
in the pipeline methods (such as pushHead()) while mine makes the copy in
primitive methods (such as add, removeAll())
I think mine is friendlier to developers in that as long as we are certain
(through unit tests, etc) the building blocks are correct, developers can add
methods which modify pipeline without having to remember adding the clone
statement.
The building block methods can be extracted to a generic base class which can
be reused by other classes which need to use copy-on-write semantics.
> 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
> Attachments: HBASE-17434-V01.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)