You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Alex Hughes (Jira)" <ji...@apache.org> on 2025/12/17 12:39:00 UTC

[jira] [Created] (HBASE-29782) Expose public Admin API to reopen table regions without moving

Alex Hughes created HBASE-29782:
-----------------------------------

             Summary: Expose public Admin API to reopen table regions without moving
                 Key: HBASE-29782
                 URL: https://issues.apache.org/jira/browse/HBASE-29782
             Project: HBase
          Issue Type: Improvement
          Components: Admin, master, proc-v2
            Reporter: Alex Hughes


Currently, when modifying a table descriptor with {{{}reopenRegions=false{}}}, there is no straightforward way to reopen regions without moving them to different servers. The only workaround is to call {{move()}} on each region individually, which is expensive as it triggers cross-server data transfers.

This limitation makes it difficult to gradually roll out table descriptor changes for large, latency-sensitive production tables. Operators need the ability to:
 # Reopen regions in-place (without server-to-server moves)
 # Target specific regions for canary testing before full rollout
 # Leverage existing batching/throttling (HBASE-28215) for controlled deployments

The {{ReopenTableRegionsProcedure}} already supports in-place region reopening via {{{}TransitRegionStateProcedure.reopen(){}}}, but this functionality is not exposed through the public {{Admin}} API.
h3. Motivation

For production environments, modifying table descriptors can be disruptive:
 * Setting {{reopenRegions=true}} causes simultaneous reopening of all regions, creating a "RIT storm" that impacts availability
 * Setting {{reopenRegions=false}} leaves regions unaware of changes, with no clean way to roll them out gradually
 * Using {{move()}} operations is unnecessarily expensive, involving network I/O and cross-server coordination when regions could simply reopen in-place

A public API for gradual, in-place region reopening enables safer, more controlled rollouts of table configuration changes, particularly for large tables serving latency-sensitive workloads.
h3. Proposed Solution:

 
{code:java}
// Reopen all regions for a table (in-place, no move)
void reopenTableRegions(TableName tableName)
Future<Void> reopenTableRegionsAsync(TableName tableName)
CompletableFuture<Void> reopenTableRegions(TableName tableName)
// Reopen specific regions (for canary testing)
void reopenTableRegions(TableName tableName, List<RegionInfo> regions)
Future<Void> reopenTableRegionsAsync(TableName tableName, List<RegionInfo> regions)
CompletableFuture<Void> reopenTableRegions(TableName tableName, List<RegionInfo> regions)
{code}
These methods will:
 * Invoke the existing {{ReopenTableRegionsProcedure}} with appropriate region targeting
 * Support batching/throttling via existing configurations ({{{}hbase.reopen.table.regions.progressive.batch.*{}}})
 * Validate that specified regions belong to the target table
 * Perform in-place reopens using {{TransitRegionStateProcedure.reopen()}}



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