diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java index 0ed75a3..1e85e47 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java @@ -154,6 +154,16 @@ public class RestoreSnapshotHandler extends TableEventHandler implements Snapsho if (metaChanges.hasRegionsToRemove()) hrisToRemove.addAll(metaChanges.getRegionsToRemove()); MetaTableAccessor.deleteRegions(conn, hrisToRemove); + // Delete regions to remove from AssignmentManager + if (this.masterServices.getAssignmentManager().getRegionStates() != null) { + for (HRegionInfo hri : hrisToRemove) { + this.masterServices.getAssignmentManager().getRegionStates().deleteRegion(hri); + } + } + + // Delete regions to remove from ServerManager + this.masterServices.getServerManager().removeRegions(hrisToRemove); + // 4.2 Add the new set of regions to META // // At this point the old regions are no longer present in META. diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java index b0f07bb..c8e9b46 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java @@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.master.RegionState; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.master.MasterFileSystem; @@ -281,6 +282,26 @@ public class TestRestoreSnapshotFromClient { } } + @Test + public void testOfflineRegionsShouldBeZeroAfterRestoreSnapshot() throws IOException, + InterruptedException { + // Load more data to split regions + SnapshotTestingUtils.loadData(TEST_UTIL, tableName, 2000, FAMILY); + + // Split regions + admin.split(tableName); + + // Restore the snapshot + admin.disableTable(tableName); + admin.restoreSnapshot(snapshotName0); + admin.enableTable(tableName); + + int offlineRegions = TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager() + .getRegionStates().getRegionByStateOfTable(tableName).get(RegionState.State.OFFLINE).size(); + + assertEquals(0, offlineRegions); + } + // ========================================================================== // Helpers // ========================================================================== diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java index 27ff447..b1af33b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.client; import org.apache.hadoop.hbase.testclassification.LargeTests; +import org.junit.Ignore; import org.junit.experimental.categories.Category; @Category(LargeTests.class) @@ -27,4 +28,12 @@ public class TestRestoreSnapshotFromClientWithRegionReplicas extends protected int getNumReplicas() { return 3; } + + @Ignore + @Override + public void testOfflineRegionsShouldBeZeroAfterRestoreSnapshot() { + // HBASE-19850: When RegionReplicas is enabled and a primary region is split, its secondary + // region will become OFFLINE. So the number of Offline Region will not zero in this case. + // Ignore this test in the RegionReplicas enabled situation. + } }