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

Andrew Purtell commented on HBASE-12260:
----------------------------------------

I have seen now in several places that the only consideration for providing or 
keeping an interface is if Phoenix or the Timeline Server use it. I think it is 
fair to ask what is the consequence of removing these interfaces in terms of 
what state or behavior *any potential coprocessor use case* can access or 
influence. 

The security coprocessors use MasterServices to create their state tables, e.g. 
in AccessControlLists:

{code}
static void createACLTable(MasterServices master) {
    ...
    master.createSystemTable(ACL_TABLEDESC);
}
{code}

Possibly use of the normal admin API would work. Making admin API requests from 
an embedded client in the coprocessor might be fine for the majority of 
reasonable things someone would want to do with access to master functions from 
MasterServices. The proposed change eliminates direct access to 
AssignmentManager, ProcedureManager, MasterWalManager, ServerManager, 
SnapshotManager, TableStateManager, MasterQuotaManager, RegionNormalizer, 
CatalogJanitor,  and the master's executor service. There won't be admin API 
replacements for all of the things one could do with direct access. It may be 
fine then to wait until someone writes in with a "I can't do X with a 
MasterObserver" type problem, but I'd like to ask we take a quick look at these 
things and see if something is worth keeping. 

There is also the same issue I mentioned on the issue for Region interface 
changes, loss of access to MasterMetrics. This is a valid user facing interface 
for coprocessors to manipulate, just like they are allowed to manipulate 
user-facing RPC interface functionality and results. We talked in the context 
of that JIRA of eliminating the bypass semantic. In that case, functionality 
can't be overridden and replaced, only enhanced. So loss of access to system 
metrics is fine. If coprocessors can only mix in new functionality they can 
expose their own custom metrics. Same considerations apply here.

> MasterServices - remove from coprocessor API (Discuss)
> ------------------------------------------------------
>
>                 Key: HBASE-12260
>                 URL: https://issues.apache.org/jira/browse/HBASE-12260
>             Project: HBase
>          Issue Type: Sub-task
>          Components: master
>            Reporter: ryan rawson
>            Assignee: stack
>            Priority: Critical
>             Fix For: 2.0.0-alpha-4
>
>         Attachments: HBASE-12260.master.001.patch
>
>
> A major issue with MasterServices is the MasterCoprocessorEnvironment exposes 
> this class even though MasterServices is tagged with 
> @InterfaceAudience.Private
> This means that the entire internals of the HMaster is essentially part of 
> the coprocessor API.  Many of the classes returned by the MasterServices API 
> are highly internal, extremely powerful, and subject to constant change.  
> Perhaps a new API to replace MasterServices that is use-case focused, and 
> justified based on real world co-processors would suit things better.



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

Reply via email to