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

Appy commented on HBASE-17732:
------------------------------

h4. Commit message
{noformat}
HBASE-17732 Coprocessor Design Improvements

    ------------------------------------------------------
    TL;DR
    ------------------------------------------------------
    We are moving from Inheritence
    - Observer *is* Coprocessor
    - FooService *is* CoprocessorService
    To Composition
    - Coprocessor *has* Observer
    - Coprocessor *has* Service

    ------------------------------------------------------
    Design Changes
    ------------------------------------------------------
    - Adds four new interfaces - MasterCoprocessor, RegionCoprocessor, 
RegionServierCoprocessor,
      WALCoprocessor
    - These new *Coprocessor interfaces have a get*Observer() function for each 
observer type
      supported by them.
    - Added Coprocessor#getService() to base interface. All extending 
*Coprocessor interfaces will
      get it from the base interface.
    - Added BulkLoadObserver hooks to RegionCoprocessorHost instad of 
SecureBulkLoadManager doing its
      own trickery.
    - CoprocessorHost#find*() fuctions: Too many testing hooks digging into CP 
internals.
      Deleted if can, else marked @VisibleForTesting.

    ------------------------------------------------------
    Backward Compatibility
    ------------------------------------------------------
    - Old coprocessors implementing *Observer won't get loaded (no backward 
compatibility guarantees).
    - Third party coprocessors only implementing Coprocessor will not get 
loaded (just like Observers).
    - Old coprocessors implementing CoprocessorService (for master/region host)
      /SingletonCoprocessorService (for RegionServer host) will continue to 
work with 2.0.
    - Added test to ensure backward compatibility of 
CoprocessorService/SingletonCoprocessorService
    - Note that if a coprocessor implements both observer and service in same 
class, its service
      component will continue to work but it's observer component won't work.

    ------------------------------------------------------
    Notes
    ------------------------------------------------------
    Did a side-by-side comparison of CPs in master and after patch. These 
coprocessors which were just
    CoprocessorService earlier, needed a home in some coprocessor in new 
design. For most it was clear
    since they were using a particular type of environment. Some were tricky.

    - JMXListener - MasterCoprocessor and RSCoprocessor (because jmx listener 
makes sense for
      processes?)
    - RSGroupAdminEndpoint --> MasterCP
    - VisibilityController -> MasterCP and RegionCP

    These were converted to RegionCoprocessor because they were using 
RegionCoprocessorEnvironment
    which can only come from a RegionCPHost.
    - AggregateImplementation
    - BaseRowProcessorEndpoint
    - BulkDeleteEndpoint
    - Export
    - RefreshHFilesEndpoint
    - RowCountEndpoint
    - MultiRowMutationEndpoint
    - SecureBulkLoadEndpoint
    - TokenProvider
{noformat}

> Coprocessor Design Improvements
> -------------------------------
>
>                 Key: HBASE-17732
>                 URL: https://issues.apache.org/jira/browse/HBASE-17732
>             Project: HBase
>          Issue Type: Improvement
>            Reporter: Appy
>            Assignee: Appy
>            Priority: Critical
>             Fix For: 2.0.0-alpha-4
>
>         Attachments: HBASE-17732.master.001.patch, 
> HBASE-17732.master.002.patch, HBASE-17732.master.003.patch, 
> HBASE-17732.master.004.patch, HBASE-17732.master.005.patch, 
> HBASE-17732.master.006.patch, HBASE-17732.master.007.patch, 
> HBASE-17732.master.008.patch, HBASE-17732.master.009.patch, 
> HBASE-17732.master.010.patch, HBASE-17732.master.011.patch, 
> HBASE-17732.master.012.patch, HBASE-17732.master.013.patch, 
> HBASE-17732.master.014.patch
>
>
> The two main changes are:
> * *Adding template for coprocessor type to CoprocessorEnvironment i.e. 
> {{interface CoprocessorEnvironment<C extends Coprocessor>}}*
>   ** Enables us to load only relevant coprocessors in hosts. Right now each 
> type of host loads all types of coprocs and it's only during execOperation 
> that it checks if the coproc is of correct type i.e. XCoprocessorHost will 
> load XObserver, YObserver, and all others, and will check in execOperation if 
> {{coproc instanceOf XObserver}} and ignore the rest.
>   ** Allow sharing of a bunch functions/classes which are currently 
> duplicated in each host. For eg. CoprocessorOperations, 
> CoprocessorOperationWithResult, execOperations().
> * *Introduce 4 coprocessor classes and use composition between these new 
> classes and and old observers*
>   ** The real gold here is, moving forward, we'll be able to break down giant 
> everything-in-one observers (masterobserver has 100+ functions) into smaller, 
> more focused observers. These smaller observer can then have different compat 
> guarantees!!
> Here's a more detailed design doc: 
> https://docs.google.com/document/d/1mPkM1CRRvBMZL4dBQzrus8obyvNnHhR5it2yyhiFXTg/edit?usp=sharing



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to