Repository: hbase Updated Branches: refs/heads/master b04b4b0fd -> a51c33385
HBASE-21052 After restoring a snapshot, table.jsp page for the table gets stuck Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a51c3338 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a51c3338 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a51c3338 Branch: refs/heads/master Commit: a51c333856c358d97706e10bcb1a46ba569b27fb Parents: b04b4b0 Author: Toshihiro Suzuki <[email protected]> Authored: Tue Aug 21 16:26:16 2018 +0900 Committer: Toshihiro Suzuki <[email protected]> Committed: Sun Sep 9 10:23:50 2018 +0900 ---------------------------------------------------------------------- .../apache/hadoop/hbase/client/HBaseAdmin.java | 9 +++++++- .../client/TestRestoreSnapshotFromClient.java | 23 ++++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/a51c3338/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index 856b118..c54ff17 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -3310,9 +3310,16 @@ public class HBaseAdmin implements Admin { @Override public CompactionState getCompactionState(final TableName tableName, CompactType compactType) throws IOException { + checkTableExists(tableName); + if (!isTableEnabled(tableName)) { + // If the table is disabled, the compaction state of the table should always be NONE + return ProtobufUtil.createCompactionState( + AdminProtos.GetRegionInfoResponse.CompactionState.NONE); + } + AdminProtos.GetRegionInfoResponse.CompactionState state = AdminProtos.GetRegionInfoResponse.CompactionState.NONE; - checkTableExists(tableName); + // TODO: There is no timeout on this controller. Set one! HBaseRpcController rpcController = rpcControllerFactory.newController(); switch (compactType) { http://git-wip-us.apache.org/repos/asf/hbase/blob/a51c3338/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.java ---------------------------------------------------------------------- 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 07044ee..138ec44 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 @@ -247,7 +247,8 @@ public class TestRestoreSnapshotFromClient { @Test public void testCloneSnapshotOfCloned() throws IOException, InterruptedException { - TableName clonedTableName = TableName.valueOf(name.getMethodName() + "-" + System.currentTimeMillis()); + TableName clonedTableName = TableName.valueOf(name.getMethodName() + "-" + + System.currentTimeMillis()); admin.cloneSnapshot(snapshotName0, clonedTableName); verifyRowCount(TEST_UTIL, clonedTableName, snapshot0Rows); SnapshotTestingUtils.verifyReplicasCameOnline(clonedTableName, admin, getNumReplicas()); @@ -282,7 +283,8 @@ public class TestRestoreSnapshotFromClient { @Test public void testCorruptedSnapshot() throws IOException, InterruptedException { SnapshotTestingUtils.corruptSnapshot(TEST_UTIL, Bytes.toString(snapshotName0)); - TableName cloneName = TableName.valueOf(name.getMethodName() + "-" + System.currentTimeMillis()); + TableName cloneName = TableName.valueOf(name.getMethodName() + "-" + + System.currentTimeMillis()); try { admin.cloneSnapshot(snapshotName0, cloneName); fail("Expected CorruptedSnapshotException, got succeeded cloneSnapshot()"); @@ -342,6 +344,23 @@ public class TestRestoreSnapshotFromClient { SnapshotTestingUtils.verifyReplicasCameOnline(tableName, admin, getNumReplicas()); } + @Test(timeout = 30000) + public void testGetCompactionStateAfterRestoringSnapshot() throws IOException, + InterruptedException { + // Take a snapshot + admin.snapshot(snapshotName1, tableName); + + // Restore the snapshot + admin.disableTable(tableName); + admin.restoreSnapshot(snapshotName1); + + // Get the compaction state of the restored table + CompactionState compactionState = admin.getCompactionState(tableName); + + // The compactionState should be NONE because the table is disabled + assertEquals(CompactionState.NONE, compactionState); + } + // ========================================================================== // Helpers // ==========================================================================
