diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index 2cbeb9ae5a..49b8f1e686 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -753,13 +753,15 @@ public class HBaseAdmin implements Admin { CreateTableResponse response = executeCallable( new MasterCallable(getConnection()) { + private final long group = ng.getNonceGroup(); + private final long nonce = ng.newNonce(); @Override public CreateTableResponse call(int callTimeout) throws ServiceException { HBaseRpcController controller = rpcControllerFactory.newController(); controller.setCallTimeout(callTimeout); controller.setPriority(desc.getTableName()); CreateTableRequest request = RequestConverter.buildCreateTableRequest( - desc, splitKeys, ng.getNonceGroup(), ng.newNonce()); + desc, splitKeys, group, nonce); return master.createTable(controller, request); } }); diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestClientScannerRPCTimeout.java hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestClientScannerRPCTimeout.java index 803a81da3a..331fc7850d 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestClientScannerRPCTimeout.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestClientScannerRPCTimeout.java @@ -26,7 +26,9 @@ import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.impl.Log4JLogger; import org.apache.hadoop.conf.Configuration; 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.testclassification.MediumTests; import org.apache.hadoop.hbase.MiniHBaseCluster.MiniHBaseClusterRegionServer; import org.apache.hadoop.hbase.TableName; @@ -82,6 +84,23 @@ public class TestClientScannerRPCTimeout { } @Test + public void testRetryForCreatingTable() throws Exception { + int[] timeouts = new int[] {2000, 1000, 500}; + HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("testRetryForCreatingTable")); + desc.addFamily(new HColumnDescriptor(FAMILY)); + for (int timeout : timeouts) { + Configuration conf = new Configuration(TEST_UTIL.getConfiguration()); + conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, timeout); + try (Connection con = ConnectionFactory.createConnection(conf); + Admin admin = con.getAdmin()) { + admin.createTable(desc); + admin.disableTable(desc.getTableName()); + admin.deleteTable(desc.getTableName()); + } + } + } + + @Test public void testScannerNextRPCTimesout() throws Exception { final TableName TABLE_NAME = TableName.valueOf("testScannerNextRPCTimesout"); Table ht = TEST_UTIL.createTable(TABLE_NAME, FAMILY);