[ 
https://issues.apache.org/jira/browse/HBASE-30479?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hernan Romer updated HBASE-30479:
---------------------------------
    Description: 
Since HBASE-29386, SnapshotProcedure takes an exclusive table lock for each 
state, instead of a shared lock held for the whole procedure. While a state 
runs, region assignment on that table is blocked. Some states do slow work 
inline: consolidating the manifest, verifying regions when the table has fewer 
than 10k regions, and adding split parent regions. On a table with tens of 
thousands of regions these can take minutes, and regions moved during that time 
stay in transition until the snapshot finishes. We hit this in production on a 
cluster with ~64k regions.

The original design used a shared lock specifically to avoid this (see 
HBASE-21480). I propose going back to the shared lock with holdLock=true, and 
fixing the HBASE-29386 deadlock directly by failing the snapshot in 
SNAPSHOT_WRITE_SNAPSHOT_INFO when the table is neither ENABLED nor DISABLED

  was:
Since HBASE-29386, SnapshotProcedure takes an exclusive table lock for each 
state, instead of a shared lock held for the whole procedure. While a state 
runs, region assignment on that table is blocked. Some states do slow work 
inline: consolidating the manifest, verifying regions when the table has fewer 
than 10k regions, and adding split parent regions. On a table with tens of 
thousands of regions these can take minutes, and regions moved during that time 
stay in transition until the snapshot finishes. We hit this in production on a 
cluster with ~64k regions.

The original design used a shared lock specifically to avoid this (see 
HBASE-21480). I propose going back to the shared lock with holdLock=true, and 
fixing the HBASE-29386 deadlock directly by failing the snapshot in 
SNAPSHOT_WRITE_SNAPSHOT_INFO when the table is neither ENABLED nor DISABLED.

We should also improve the new backup system to be resilient of these failures


> SnapshotProcedure's exclusive table lock blocks region assignment on large 
> tables
> ---------------------------------------------------------------------------------
>
>                 Key: HBASE-30479
>                 URL: https://issues.apache.org/jira/browse/HBASE-30479
>             Project: HBase
>          Issue Type: Improvement
>          Components: Region Assignment, snapshots
>    Affects Versions: 3.0.0, 2.6.3
>            Reporter: Hernan Romer
>            Priority: Major
>
> Since HBASE-29386, SnapshotProcedure takes an exclusive table lock for each 
> state, instead of a shared lock held for the whole procedure. While a state 
> runs, region assignment on that table is blocked. Some states do slow work 
> inline: consolidating the manifest, verifying regions when the table has 
> fewer than 10k regions, and adding split parent regions. On a table with tens 
> of thousands of regions these can take minutes, and regions moved during that 
> time stay in transition until the snapshot finishes. We hit this in 
> production on a cluster with ~64k regions.
> The original design used a shared lock specifically to avoid this (see 
> HBASE-21480). I propose going back to the shared lock with holdLock=true, and 
> fixing the HBASE-29386 deadlock directly by failing the snapshot in 
> SNAPSHOT_WRITE_SNAPSHOT_INFO when the table is neither ENABLED nor DISABLED



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to