[ https://issues.apache.org/jira/browse/HBASE-29315?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Duo Zhang resolved HBASE-29315. ------------------------------- Fix Version/s: 2.7.0 3.0.0-beta-2 2.6.3 2.5.12 Hadoop Flags: Reviewed Resolution: Fixed Pushed to all active branches. Thanks [~charlesconnell]! > Cancel Split/MergeTableRegionProcedure if table modification is in progress > --------------------------------------------------------------------------- > > Key: HBASE-29315 > URL: https://issues.apache.org/jira/browse/HBASE-29315 > Project: HBase > Issue Type: Bug > Components: proc-v2 > Reporter: Charles Connell > Assignee: Charles Connell > Priority: Minor > Labels: pull-request-available > Fix For: 2.7.0, 3.0.0-beta-2, 2.6.3, 2.5.12 > > > When adding new replicas, ModifyTableProcedure roughly does the following: > # Edits the table descriptor > # Closes and opens all existing regions > # Creates replication peer to support the new replica regions > # Opens new replica regions > When closing a region in step 2, the act of closing it can trigger a split. > When the HMaster runs the SplitTableRegionProcedure, it roughly does: > # Close the region to be split > # Split the store files > # Open the new daughter regions (including replicas) > When a split is done as part of a ModifyTableProcedure that adds replicas, we > get the following combination of behavior: > # Edit the table descriptor > # Close and open all existing regions, adding a SplitTableRegionProcedure to > the HMaster's queue > # To begin the SplitTableRegionProcedure, close region to be split > # Split store files > # Open the new daughter regions, including replicas, completing the > SplitTableRegionProcedure > # Create replication peer to support the new replica regions > # Open new replica regions, even though some were already opened in step 5. > Double-opening doesn't work, and the open procedures get stuck. > -There are a few ways to correct this problem, but perhaps the most intuitive > way is to use the existing lock mechanisms in the procedure system. The > ModifyTableProcedure can lock the table from beginning to end, allowing only > itself and its child procedures to modify the table. This would enforce in > code what is already an implicit assumption in the implementation of the > procedure – that nobody else open regions while it's running.- > Discussed over > [email|https://lists.apache.org/thread/0x4pxr5jt8cwprq6xhxr6d5g3lctlhhc]. -- This message was sent by Atlassian Jira (v8.20.10#820010)