[
https://issues.apache.org/jira/browse/HBASE-17312?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Appy updated HBASE-17312:
-------------------------
Description:
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.
was:Use default method in MasterObserver, RegionObserver,
RegionServerObserver and WALObserver. And mark the BaseRegionObserver,
BaseMasterAndRegionObserver, BaseRegionServerObserver and BaseWALObserver. User
can implement the interface directly and will not break compatibility when add
new default methods.
> [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: Guanghao Zhang
> Labels: incompatible
> Attachments: HBASE-17312.master.001.patch,
> HBASE-17312.master.001.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)