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

Andrew Purtell commented on HBASE-12975:
----------------------------------------

bq. As for the current patch SplitTransactionImpl supports splitting only one 
region at a time. If we want to split multiple regions do we need to have 
custom implementation?

A custom implementation is possible. What factory to use for instantiating 
transactions can be changed in configuration. I don't think this would be 
"supportable" though. You couldn't do this in a downstream project, for example 
and expect any level of source, binary, or semantic compatibility, because any 
implementation would require use of any number of private interfaces to make a 
split happen.  

bq. Can you explain bit more how we can add more regions to split 
transactionally?

Currently, regions are managed independently *except* when running a region 
merge transaction, for obvious reasons. I would hesitate to extend the scope of 
this issue to also make major changes to how split transactions work, so I 
don't think we should change SplitTransaction to handle coordination of splits 
of multiple regions, but if you have a specific proposal of course we should 
look at it.

What about allowing coprocessors or other internal users to create multiple 
SplitTransactions and coordinate them? The interfaces here would need some more 
work, but the procedure might go something like:

# Instantiate N SplitTransactions
# Run each SplitTransaction up to PONR. Can be done in parallel. If there's a 
failure, invoke the rollback method on all and try again and/or do some other 
remediation. 
# Run each SplitTransaction past PONR. Can be done in parallel. If there's a 
failure, the server must abort. 

The major difference between the above and current proposal is we allow an 
interface user to drive transaction execution in coordinated pre- and post-PONR 
phases to allow clean up without abort if there's a pre-PONR failure. We could 
actually continue to hide the pre- and post-PONR distinction from the API by 
adding a helper class that you create with an array of SplitTransaction, then 
call an {{execute}} method. It would do the above coordination. We could call 
it {{SplitTransactions}} ? 

What do you think?

> Supportable SplitTransaction and RegionMergeTransaction interfaces
> ------------------------------------------------------------------
>
>                 Key: HBASE-12975
>                 URL: https://issues.apache.org/jira/browse/HBASE-12975
>             Project: HBase
>          Issue Type: Improvement
>            Reporter: Rajeshbabu Chintaguntla
>            Assignee: Andrew Purtell
>             Fix For: 2.0.0, 1.1.0
>
>         Attachments: HBASE-12975.patch, HBASE-12975.patch
>
>
> Making SplitTransaction, RegionMergeTransaction limited private is required 
> to support local indexing feature in Phoenix to ensure regions colocation. 
> We can ensure region split, regions merge in the coprocessors in few method 
> calls without touching internals like creating zk's, file layout changes or 
> assignments.
> 1) stepsBeforePONR, stepsAfterPONR we can ensure split.
> 2) meta entries can pass through coprocessors to atomically update with the 
> normal split/merge.
> 3) rollback on failure.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to