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)

Reply via email to