hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Appy (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-17312) [JDK8] Use default method for Observer Coprocessors
Date Sat, 25 Feb 2017 23:05:45 GMT

     [ https://issues.apache.org/jira/browse/HBASE-17312?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Appy updated HBASE-17312:
-------------------------
    Release Note: 
Deletes BaseMasterAndRegionObserver, BaseMasterObserver, BaseRegionObserver, BaseRegionServerObserver
and BaseWALObserver.
Their corresponding interface classes now use JDK8's 'default' keyword to provide empty/no-op
implementations so that:
1. Derived class don't break when more coprocessor hooks are added in future.
2. Derived classes don't have to redundantly override functions they don't care about with
empty implementations.

Earlier, BaseXXXObserver classes provided these exact two benefits, but with 'default' keyword
in JDK8, they are not needed anymore.

To fix the breakages because of this change, simply change "Foo extends BaseXXXObserver" to
"Foo implements XXXObserver".

> [JDK8] Use default method for Observer Coprocessors
> ---------------------------------------------------
>
>                 Key: HBASE-17312
>                 URL: https://issues.apache.org/jira/browse/HBASE-17312
>             Project: HBase
>          Issue Type: Sub-task
>          Components: Coprocessors
>    Affects Versions: 2.0.0
>            Reporter: Guanghao Zhang
>            Assignee: Appy
>              Labels: incompatible
>             Fix For: 2.0.0
>
>         Attachments: HBASE-17312.master.001.patch, HBASE-17312.master.001.patch, HBASE-17312.master.002.patch,
HBASE-17312.master.003.patch, HBASE-17312.master.004.patch, HBASE-17312.master.005.patch,
HBASE-17312.master.006.patch
>
>
> In cases where one might need to use multiple observers, say region, master and regionserver;
and the fact that only one class can be extended, it gives rise to following pattern:
> {noformat}
>     public class BaseMasterAndRegionObserver
>       extends BaseRegionObserver
>       implements MasterObserver
>     class AccessController
>       extends BaseMasterAndRegionObserver
>       implements RegionServerObserver
> {noformat}
> were BaseMasterAndRegionObserver is full copy of BaseMasterObserver.
>  There is an example of simple case too where the current design fails.
>  Say only one observer is needed by the coprocessor, but the design doesn't permit extending
even that single observer (see RSGroupAdminEndpoint), that leads to full copy of Base...Observer
class into coprocessor class leading to 1000s of lines of code and this ugly mix of 5 main
functions with 100 useless functions.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message