Charles Connell created HBASE-29315: ---------------------------------------
Summary: ModifyTableProcedure should hold exclusive table lock for duration of procedure 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 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 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 message was sent by Atlassian Jira (v8.20.10#820010)