From 54179fccd6aa9e9e45004a52b879ea5a1b819abd Mon Sep 17 00:00:00 2001 From: Toshihiro Suzuki Date: Tue, 21 Aug 2018 16:26:16 +0900 Subject: [PATCH] HBASE-21052 After restoring a snapshot, table.jsp page for the table gets stuck --- .../java/org/apache/hadoop/hbase/client/HBaseAdmin.java | 9 ++++++++- .../hbase/client/TestRestoreSnapshotFromClient.java | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) 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) { 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..5dd033f 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 @@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.client; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.io.IOException; @@ -342,6 +343,22 @@ public class TestRestoreSnapshotFromClient { SnapshotTestingUtils.verifyReplicasCameOnline(tableName, admin, getNumReplicas()); } + @Test + 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 // ========================================================================== -- 2.10.1 (Apple Git-78)