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

stack commented on HBASE-6992:
------------------------------

Not happening for 2.0

> Coprocessors semantic issues: post async operations, helper methods, ...
> ------------------------------------------------------------------------
>
>                 Key: HBASE-6992
>                 URL: https://issues.apache.org/jira/browse/HBASE-6992
>             Project: HBase
>          Issue Type: Brainstorming
>          Components: Coprocessors
>    Affects Versions: 0.92.2, 0.94.2, 0.95.2
>            Reporter: Matteo Bertozzi
>            Assignee: Matteo Bertozzi
>            Priority: Critical
>
> Discussion ticket around coprocessor pre/post semantic.
> For each rpc in HMaster we have a pre/post operation that allows a coprocessor
> to execute some code before and after the operation
> * preOperation()
> * my operation
> * postOperation()
> This is used for example by the AccessController to verify if the user can 
> execute or not the operation.
> Everything is fine, unless the master operation is asynchronous (like 
> create/delete table)
> * preOperation()
> * executor.submit(new OperationHandler())
> * postOperation()
> The pre operation is still fine, since is executed before the operation and 
> need to throw exceptions to the client in case of failures...
> The post operation, instead, is no longer post... is just post submit. And if 
> someone subscribe to postCreateTable() the notification can arrive before the 
> table creation.
> To "solve" this problem, HBASE-5584 added pre/post handlers and now the 
> situation looks like this:
> {code}
> client request              client response
>       |                           |
>       +------+-- submit op --+----+---         (HMaster)
>            pre op         post op
> (executor)                     +---- handler ----+
>                            pre handler       post handler
> {code}
> Now, we've two types of pre/post operation and the semantical correct are 
> preOperation() and postOperationHandler()
> since the preOperation() needs to reply to the client (e.g AccessController 
> NotAllowException) and the postOperatioHandler() is really post operation.
> postOperation() is not post... and preOperationHandler() can't communicate 
> with the client.
> The AccessController coprocessor uses the postOperation() that is fine for 
> the sync operation like addColumn(), deleteColumn()... but in case of failure 
> of async operations like deleteTable() we've removed rights that we still 
> need.
> I think that we should get back just to the single pre/post operation but 
> with the right semantic...
> Other then the "when is executed" problem, we've also functions that can be 
> described with other simpler functions
> for example: modifyTable() is just a helper to avoid multiple 
> addColumn()/deleteColumn() calls
> but the problem here is that modifyTable() has its own pre/post operation() 
> and if I've implemented the pre/post addColumn I don't get notified when I 
> call modifyTable(). This is another problem in the access controller 
> coprocessor
> In this case I'm not sure what the best solution can be... but in this way, 
> adding new helper methods means breaking the coprocessors, because they don't 
> get notified even if something is changed...
> Any idea, thoughts, ...?



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

Reply via email to