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

Jesse Yates commented on HBASE-5827:
------------------------------------

bq. provide backwards compatible postXXX methods that put the Throwable into 
the Context and provide a new Context method for getting the caught Throwable, 
or null if nothing was caught;

This seems a bit wonky and could will probably break a lot of existing CP 
functionality (or at least be incredibly wasteful, generating the same puts 
again, etc). 

bq. pass the caught Throwable to new postXXX methods as a new parameter,

This seems a good way to do the failXXX method and not make things too 
different.

We should also consider another interface based on (or at least conceptually 
similar to) SU's async stuff, so you could register a callback if you are 
interested in the error, but otherwise is handled by the standard mechanisms. 
Probably going to be a bit cleaner that doing all this wrapping and calling 
stuff on failure. Maybe a scope expansion here, but seemed a reasonable 
application. 
                
> [Coprocessors] Observer notifications on exceptions
> ---------------------------------------------------
>
>                 Key: HBASE-5827
>                 URL: https://issues.apache.org/jira/browse/HBASE-5827
>             Project: HBase
>          Issue Type: Improvement
>          Components: coprocessors
>            Reporter: Andrew Purtell
>            Assignee: Andrew Purtell
>
> Benjamin Busjaeger wrote on dev@:
> {quote}
> Is there a reason that RegionObservers are not notified when a get/put/delete 
> fails? Suppose I maintain some (transient) state in my Coprocessor that is 
> created during preGet and discarded during postGet. If the get fails, postGet 
> is not invoked, so I cannot remove the state.
> If there is a good reason, is there any other way to achieve the same thing? 
> If not, would  it be possible to add something the snippet below to the code 
> base?
> {code}
>     // pre-get CP hook
>     if (withCoprocessor && (coprocessorHost != null)) {
>       if (coprocessorHost.preGet(get, results)) {
>         return results;
>       }
>     }
> +    try{
>     ...
> +    } catch (Throwable t) {
> +        // failed-get CP hook
> +        if (withCoprocessor && (coprocessorHost != null)) {
> +          coprocessorHost.failedGet(get, results);
> +        }
> +        rethrow t;
> +    }
>     // post-get CP hook
>     if (withCoprocessor && (coprocessorHost != null)) {
>       coprocessorHost.postGet(get, results);
>     }
> {code}
> {quote}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to